java – 为什么签名是null?

美好的一天!

我试过这段代码:

PackageInfo info = mContext.getPackageManager().getPackageArchiveInfo(absolute_apk_name, PackageManager.GET_SIGNATURES);
        if (info != null)
        {
            Signature[] sig = info.signatures;
            if (sig != null)
                sigstring = new String(sig[0].toChars());
        }

但是info.signatures == null,我不知道“为什么?”
我检查了absolute_apk_name中的文件
Android 2.1

UPD:

absolute_apk_name = "/data/data/ru.UseIT.SimpleFormsLauncher/files/SimpleFormsGeneral.apk"  

apk是用标志创建的Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE

但是如果exec这个代码

Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setDataAndType(Uri.fromFile(new File(absolute_apk_name )), "application/vnd.android.package-archive");
        mContext.startActivity(intent);

它已安装.

最佳答案 我检查了Android源代码,结果发现如果Android版本为2.3.7及更低版本,PackageManager#getPackageArchiveInfo(String,int)不包含签名.

请看下面的链接.

http://tools.oesf.biz/android-2.3.7_r1.0/xref/frameworks/base/core/java/android/content/pm/PackageManager.java#1891

http://tools.oesf.biz/android-4.0.3_r1.0/xref/frameworks/base/core/java/android/content/pm/PackageManager.java#2121

点赞