【问题标题】:Android: Unable to install release build onto emulator; getting Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION]Android:无法将发布版本安装到模拟器上;遇到失败 [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION]
【发布时间】:2022-04-28 06:04:09
【问题描述】:

我可以在模拟器上安装调试版本:

ant debug install

但我无法安装发布版本。我的步骤:

1. ant release
2. jarsigner -verbose -keystore ..\my-release-key.keystore bin\myapp-release-unsigned.apk mykey
3. ren bin\myapp-release-unsigned.apk bin\myapp-release-signed.apk
4. zipalign -v 4 myapp-release-signed.apk myapp-release.apk
5. adb install bin\myapp-release.apk

除了最后一个我收到消息的步骤之外,所有步骤都成功运行:

82 KB/s (388012 bytes in 4.613s)
        pkg: /data/local/tmp/myapp-release.apk
Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION]

我也尝试过使用ant installr 而不是adb install bin\myapp-release.apk,结果相同

编辑:我认为这与密钥有关,因为这是我可以看到的发布版本和调试版本之间的唯一区别。我使用以下方法生成了密钥:

keytool -genkey -v -keystore my-release-key.keystore
-alias alias_name -keyalg RSA -keysize 2048 -validity 10000

http://developer.android.com/guide/publishing/app-signing.html 所述。我根据http://developer.android.com/guide/developing/building/building-cmdline.html 修改了ant.properties 文件,现在只做ant release install(而不是上面的步骤),但仍然遇到同样的问题。如果有人知道 ant 是如何生成调试密钥的,那么我可以按照相同的程序生成我的发布密钥,看看是否能解决问题。

【问题讨论】:

  • 您是否卸载了调试构建应用程序?
  • 是的,我已经卸载了调试版本
  • 只需安装未签名的 apk。
  • 您的证书可能有问题。尝试生成一个新的。也尝试在设备和模拟器上安装发布版本,如果错误是一致的,那么这不是设备故障。
  • 这可能是由您的 AndroidManifest.xml 文件中的错误引起的(例如,如果您的版本代码不是整数,如 here 所述。)

标签: android


【解决方案1】:

我遇到了同样的问题,因为我在我的 AndroidManifest.xml 文件中使用了一个字符串值,如下所示:

android:versionCode="@string/version_code"
android:versionName="@string/version_name"

strings.xml 包含的位置:

<string name="version_code">3</string>
<string name="version_name">1.0</string>

versionCode 应该是一个整数。取出 @string 引用后,我不再收到此错误,并且应用程序编译并运行得很好:

android:versionCode="3"
android:versionName="1.0"

【讨论】:

  • 您可以将versionCode 存储为整数:&lt;integer name="version_code"&gt;3&lt;/integer&gt; 并引用为@integer/version_code
【解决方案2】:

解决方案:https://stackoverflow.com/a/8225017/147530
备注:
1. 我收到了 INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION。我没有得到 INSTALL_PARSE_FAILED_NO_CERTIFICATES
2. 在命令行中运行adb logcat 显示的stacktrace 与Android signing with Ant 中的类似:

W/PackageParser(   51): Exception reading /data/app/vmdl24231.tmp
W/PackageParser(   51): java.lang.SecurityException: META-INF/METALLIC.SF has in
valid digest for assets/myasset.xtx in /data/app/vmdl24231.tmp
W/PackageParser(   51):         at java.util.jar.JarVerifier.verifyCertificate(J
arVerifier.java:370)
W/PackageParser(   51):         at java.util.jar.JarVerifier.readCertificates(Ja
rVerifier.java:273)
W/PackageParser(   51):         at java.util.jar.JarFile.getInputStream(JarFile.
java:416)
W/PackageParser(   51):         at android.content.pm.PackageParser.loadCertific
ates(PackageParser.java:317)
W/PackageParser(   51):         at android.content.pm.PackageParser.collectCerti
ficates(PackageParser.java:479)
W/PackageParser(   51):         at com.android.server.PackageManagerService.inst
allPackageLI(PackageManagerService.java:4287)
W/PackageParser(   51):         at com.android.server.PackageManagerService.acce
ss$1600(PackageManagerService.java:109)
W/PackageParser(   51):         at com.android.server.PackageManagerService$5.ru
n(PackageManagerService.java:3779)
W/PackageParser(   51):         at android.os.Handler.handleCallback(Handler.jav
a:587)
W/PackageParser(   51):         at android.os.Handler.dispatchMessage(Handler.ja
va:92)
W/PackageParser(   51):         at android.os.Looper.loop(Looper.java:123)
W/PackageParser(   51):         at android.os.HandlerThread.run(HandlerThread.ja
va:60)

参考:
http://code.google.com/p/android/issues/detail?id=19567

【讨论】:

  • 谢谢,使用 logcat 对获取详细信息很重要,我也有。
【解决方案3】:

我遇到了同样的错误,但是当我在尝试将 apk 文件安装到手机时查看 logcat 时,我看到了这些行:

11-10 11:28:26.971 20075 20085 D:邮编:EOCD 未找到, /data/local/tmp/myapp.apk 是 不压缩

11-10 11:28:26.972 20075 20085 W zipro:打开存档时出错 /data/local/tmp/myapp.apk: 文件无效

11-10 11:28:26.972 20075 20085 D 资产:无法打开 Zip 存档 '/data/local/tmp/myapp.apk'

11-10 11:28:26.972 20075 20085 W DefContainer: 无法解析包 在 /data/local/tmp/myapp.apk: android.content.pm.PackageParser$PackageParserException: 失败 解析 /data/local/tmp/myapp.apk

正如another question中提到的,原来apk文件已损坏(可能没有正确下载),所以我不得不重新下载它,然后它就可以正常工作了。

【讨论】:

    【解决方案4】:

    在此找到答案。 https://github.com/flutter/flutter/issues/96497

    AndroidManifest.xml 缺少一行代码:

    android:exported="true"

    <activity
            android:name=".MainActivity"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:exported="true" -> this is the missing line of code
            android:windowSoftInputMode="adjustResize"
            >
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-08
      • 2012-07-22
      • 2013-07-16
      相关资源
      最近更新 更多