4

再会!
我试过这段代码:

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

升级版:

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

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

但是如果执行这段代码

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

它已安装。

4

3 回答 3

1

这是一个 android 系统错误,请参阅此 https://code.google.com/p/android/issues/detail?id=9151#c8 此错误已在 4.0+ 上修复

于 2014-01-06T02:47:52.527 回答
1

我检查了 Android 源代码,结果发现 PackageManager#getPackageArchiveInfo(String, int) 如果 Android 版本为 2.3.7 或更低版本,则不包含签名。

请看下面的链接。

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

于 2014-06-17T08:33:13.560 回答
-1

我不太确定您要实现什么,但是使用绝对 apk 名称/路径不正确,您需要包名。我已经能够使用以下方法获取签名,只需将“com.android.chrome”替换为您想要的应用程序的包名称。

final PackageInfo pkgInfo = packageManager.getPackageInfo(
                    "com.android.chrome", PackageManager.GET_SIGNATURES);
final Signature[] signatures = pkgInfo.signatures;
于 2013-07-17T08:53:29.487 回答