【问题标题】:How to determine if an apk is signed in Java?如何确定一个apk是否用Java签名?
【发布时间】:2021-04-19 12:55:04
【问题描述】:

我正在 Android Studio 中构建一个 Java Android 应用程序。在我的 onCreate 函数中,我想确定应用程序是在有证书还是没有证书的情况下构建的。

但现在,我根本没有得到任何证书信息。

        Activity activity = this;

        Signature[] sigs;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            // New signature
            PackageInfo siginfo = activity.getPackageManager().getPackageArchiveInfo(activity.getPackageName(), activity.getPackageManager().GET_SIGNING_CERTIFICATES);
            if (siginfo == null){
                sigs = new Signature[0];
            }else{
                sigs = siginfo.signingInfo.getApkContentsSigners();
            }
            
        }else {
            sigs = activity.getPackageManager().getPackageArchiveInfo(activity.getPackageName(), activity.getPackageManager().GET_SIGNATURES).signatures;
        }
        
        String sigstring = "";
        for (Signature sig : sigs)
        {
            sigstring.concat(sig.toCharsString() + "; ");
        }
        Log.i("SigString: " + sigstring);
        Log.i("NumberOfSignatures: " + sigs.length);

输出:

2021-04-19 14:44:52.156 I:SigString: 
2021-04-19 14:44:52.156 I:NumberOfSignatures: 0

【问题讨论】:

    标签: java android digital-signature


    【解决方案1】:

    您必须使用getPackageInfo 而不是getPackageArchiveInfo。这样做时,getPackageInfo 必须包含在 try-catch-block 中。

    因此,这条线

    PackageInfo siginfo = activity.getPackageManager().getPackageArchiveInfo(activity.getPackageName(), activity.getPackageManager().GET_SIGNING_CERTIFICATES);
    

    需要替换为

    PackageInfo siginfo;
    try {
      siginfo = activity.getPackageManager().getPackageInfo(activity.getPackageName(), activity.getPackageManager().GET_SIGNING_CERTIFICATES);
    }catch (PackageManager.NameNotFoundException e){
      siginfo = null;
    }
    

    else 块中的行也必须进行等效更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-04
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      相关资源
      最近更新 更多