【问题标题】:Android update to gradle 3.2.1 [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION] on Android <=6Android 更新到 gradle 3.2.1 [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION] 在 Android <=6
【发布时间】:2018-12-20 09:40:30
【问题描述】:

将 gradle 工具版本从 3.1.4 更新到 3.2.1 后,该应用无法再在 Android 6.0 上安装,release strong> 构建(失败 [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION])。

compileSdkVersion = 28 
minSdkVersion = 19
targetSdkVersion = 27
gradleToolsVersion = 3.2.1


distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip

3.1.4 AndroidManifest 属性生成的APK:

android:versionCode=".."
android:versionName=".."
android:installLocation="1"
package=".."

3.2.1 AndroidManifest 属性生成的APK:

android:versionCode=".."
android:versionName=".."
android:installLocation="1"
android:compileSdkVersion="28"
android:compileSdkVersionCodename="9"
package=".."
platformBuildVersionCode="same as versionCode"
platformBuildVersionName="same as versionName"

如果我只是将 gradle 构建工具的版本从 3.2.1 降级到 3.1.4,那么它就可以工作了。

例外:

12-24 11:55:40.930 1498-1527/system_process W/PackageManager: Failed collect during installPackageLI
android.content.pm.PackageParser$PackageParserException: Failed reading resources.arsc in java.util.jar.StrictJarFile@39b13b4e
    at android.content.pm.PackageParser.loadCertificates(PackageParser.java:600)
    at android.content.pm.PackageParser.collectCertificates(PackageParser.java:1094)
    at android.content.pm.PackageParser.collectCertificates(PackageParser.java:1049)
    at com.android.server.pm.PackageManagerService.installPackageLI(PackageManagerService.java:10564)
    at com.android.server.pm.PackageManagerService.access$2300(PackageManagerService.java:234)
    at com.android.server.pm.PackageManagerService$6.run(PackageManagerService.java:8627)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.os.HandlerThread.run(HandlerThread.java:61)
    at com.android.server.ServiceThread.run(ServiceThread.java:46)
 Caused by: java.lang.SecurityException: META-INF/MANIFEST.MF has invalid digest for resources.arsc in resources.arsc
    at java.util.jar.JarVerifier.invalidDigest(JarVerifier.java:140)
    at java.util.jar.JarVerifier.access$000(JarVerifier.java:51)
    at java.util.jar.JarVerifier$VerifierEntry.verify(JarVerifier.java:132)
    at java.util.jar.JarFile$JarFileInputStream.read(JarFile.java:117)
    at android.content.pm.PackageParser.readFullyIgnoringContents(PackageParser.java:5015)
    at android.content.pm.PackageParser.loadCertificates(PackageParser.java:597)
    at android.content.pm.PackageParser.collectCertificates(PackageParser.java:1094) 
    at android.content.pm.PackageParser.collectCertificates(PackageParser.java:1049) 
    at com.android.server.pm.PackageManagerService.installPackageLI(PackageManagerService.java:10564) 
    at com.android.server.pm.PackageManagerService.access$2300(PackageManagerService.java:234) 
    at com.android.server.pm.PackageManagerService$6.run(PackageManagerService.java:8627) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.os.HandlerThread.run(HandlerThread.java:61) 
    at com.android.server.ServiceThread.run(ServiceThread.java:46) 

【问题讨论】:

  • versionCode 和 versionName 的值是多少?它们是对资源的引用字符串吗?他们应该是前者。
  • versionCode = "4502" versionName ="4.1-dev4" 对于两个 Apk 的
  • 这么硬编码的字符串?您的清单中是否还有其他 android:xxx 属性可能会引用字符串资源而不是硬编码字符串?
  • 是的,它们是从 gradle 文件合并的字符串。在清单标签中,我没有看到任何引用,只是在 activitiy、broadcastreceiver、应用程序(图标、类、主题等)中。但我查看了 Manifests(apk 分析器)之间的差异,并没有看到重大变化,只是活动类、应用程序图标、主题的不同引用。
  • 抱歉,我没办法了。也许在抛出错误之前检查设备的logcat,这可能会提供额外的线索。

标签: android android-gradle-plugin build.gradle android-install-apk apksigner


【解决方案1】:

修复将 gradle 工具版本更新为 3.3.0-rc1,如 cmets 中建议的 Pierre

【讨论】:

    猜你喜欢
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    • 2021-11-30
    • 2016-01-25
    相关资源
    最近更新 更多