美好的一天!
我试过这段代码:
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
但是如果执行此代码
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);
已安装。
答案 0 :(得分:1)
这是一个android系统bug看到这个 https://code.google.com/p/android/issues/detail?id=9151#c8 这个bug修复了4.0 +
答案 1 :(得分:1)
我检查了Android源代码,结果发现,如果Android版本为2.3.7及更低版本,PackageManager#getPackageArchiveInfo(String,int)不包含签名。
请看下面的链接。
答案 2 :(得分:0)
我不太确定你想要实现什么,但是使用绝对的apk名称/路径是不正确的,你需要包名。我已经能够使用以下内容获取签名,只需将“com.android.chrome”替换为您想要的应用程序的包名称。
final PackageInfo pkgInfo = packageManager.getPackageInfo(
"com.android.chrome", PackageManager.GET_SIGNATURES);
final Signature[] signatures = pkgInfo.signatures;