簡體   English   中英

如何確定一個apk是否在Java中簽名?

[英]How to determine if an apk is signed in Java?

我正在 Android Studio 中構建一個 Java Android 應用程序。 在我的 onCreate function 中,我想確定應用程序是否已在有或沒有證書的情況下構建。

但到目前為止,我根本沒有得到證書信息。

        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);

output:

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

您必須使用getPackageInfo而不是getPackageArchiveInfo 當你這樣做時, getPackageInfo必須被一個 try-catch 塊包圍。

因此,線

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塊中的行也必須進行等效更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM