我想.apk文件是我的应用程序的新版本。在Android设备上安装以进行升级;
但我得到"解析错误"或"未安装应用程序"
如果我手动尝试安装.apk文件删除旧版本的应用程序。 ,它的工作原理 如果我在调试旧版本应用程序后手动尝试安装.apk文件,则无效
我在我的代码上测试了另一个不同的.apk文件,它可以安装,所以我没有想到,但是你可以检查一下;
File fileTest = new File(Environment.getExternalStorageDirectory() + "/download/appName.apk");
if (fileTest != null && fileTest.exists() == true){
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/download/appName.apk")), "application/vnd.android.package-archive");
startActivity(intent);
此问题可能签名不同或 Sdk版本不同。 我测试的签名与我的代码应用程序和.apk文件不同,在这里;
Signature sig = updateContext.getPackageManager().
getPackageInfo(updateManager.updateContext.getPackageName(),
PackageManager.GET_SIGNATURES).signatures[0];
Signature releaseSig = updateManager.updateContext.getPackageManager().
getPackageArchiveInfo(path2, PackageManager.GET_SIGNATURES).signatures[0];
String path2 =Environment.getExternalStorageDirectory() +
"/download/appName.apk";
if (sig.hashCode() != releaseSig.hashCode()) //false
那你觉得怎么样?
答案 0 :(得分:2)
由不同密钥签名的两个版本的应用程序无法相互安装。
您的调试版本由计算机上的调试密钥自动签名。
您的应用程序发布版本已签名为您提供的密钥。
如果您尝试在应用的调试版本上安装应用的发布版本,那么它将无法正常工作,您首先必须卸载旧版本。
在现实生活中,它应该不是问题,因为用户只能访问应用程序的发布版本(当然,如果你不发送它们的调试版本)。