2

我怎么知道(例如在 Activity 中)该应用程序是从 Eclipse 安装和运行的(通过 USB 插入移动设备)?

4

2 回答 2

3

所有应用程序都由证书签名。即使由 Eclipse 启动。在 Eclipse 中使用 android SDK 时,会默认创建一个调试密钥库,并在每次使用 IDE 构建应用程序并将其推送到设备/模拟器时使用。

您可以在代码中获取有关密钥库的信息,并验证它是您自己的签名代码还是其他代码。我在 Eclipse 中的应用程序上使用了下面的快速而肮脏的代码:

    try {
        PackageInfo pi = this.getPackageManager().getPackageInfo( this.getPackageName(), PackageManager.GET_SIGNATURES);
        Signature[] signatures = pi.signatures;
        byte[] cert = signatures[0].toByteArray();
        InputStream input = new ByteArrayInputStream(cert);
        CertificateFactory cf = CertificateFactory.getInstance("X509");
        X509Certificate cf509 = (X509Certificate) cf.generateCertificate(input);
        Log.d(LOG_TAG, "Certificate issued by: " + cf509.getIssuerDN() );
    } catch ( Exception e ) {

结果是:

Certificate issued by: CN=Android Debug, O=Android, C=US

更好的结构化代码和信用转到此链接: http ://thomascannon.net/misc/android_apk_certificate/

于 2012-10-04T14:04:27.677 回答
1

使用android:debuggable =true 标志从 Eclipse 构建您的应用程序。然后你可以用这种方法从应用程序中检查它的值:Getting "debuggable" value of androidManifest from code?

于 2012-10-04T12:51:39.030 回答