После обновления версии инструментов Gradle с 3.1.4 до 3.2.1 приложение больше не может быть установлено на Android 6.0 и ниже на сборках выпуск (Ошибка [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
APK сгенерирован 3.1.4 AndroidManifest атрибуты:
android:versionCode = ".."
android:versionName = ".."
android:installLocation = "1"
package = ".."
APK сгенерирован 3.2.1 AndroidManifest атрибуты:
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 = "4502" versionName = "4.1-dev4" Для обоих Apk
Так жестко запрограммированные строки? Есть ли в вашем манифесте другие атрибуты android: xxx, которые могут ссылаться на строковый ресурс, а не на жестко заданную строку?
Да, это строки, объединенные из файла gradle. В теге manifest я не вижу никаких ссылок, только в действиях, широковещательном приемнике, приложении (значок, классы, тема и т. д.). Но я взглянул на различия между манифестами (анализатор apk) и не вижу серьезных изменений, только разные ссылки на классы действий, значок приложения, темы.
Извините, у меня нет идей. Возможно, проверьте logcat устройства непосредственно перед выдачей ошибки, это может дать дополнительные подсказки.
Насколько велик файл resources.arsc в APK? Возможно, я имею представление об ошибке, в зависимости от ответа.
В файле resources.arsc 24,3 МБ (без сжатия proguard и я отключил их, чтобы сборка была быстрее.
Ошибка, которая могла быть связана с этим, была случайно введена в плагин Android Gradle 3.3.0-alpha01 (Canary 1) и исправлена в 3.3.0-rc01. Можете ли вы попробовать использовать последнюю версию и посмотреть, исправит ли это проблему?
Спасибо, Пьер, обновление до 3.3.0-rc01 работает.
Возможный дубликат java.lang.SecurityException при установке apk
кроме того, на Android META-INF/MANIFEST.MF может быть исключен из упаковки.
Исправление заключается в обновлении версии инструментов Gradle до 3.3.0-rc1, как указано в комментариях Пьер.
Каковы значения versionCode и versionName? Это строки ссылок на ресурсы? Они должны быть первыми.