Сбой сборки при нацеливании на Android Q, но работает на API 28 с "Не удалось преобразовать файл 'android.jar' для соответствия атрибутам"
У меня есть устаревшее приложение, которое я поддерживаю, которое прекрасно работает при таргетинге на API 28, но не работает на Q.
Полная ошибка из сборки Gradle выглядит следующим образом:
> Task :lintVitalRelease
Calling mockable JAR artifact transform to create file: /Users/spartygw/.gradle/caches/transforms-1/files-1.1/android.jar/5fe3ee8a258b0a02d9b262c195a9ab63/android.jar with input /Users/spartygw/Library/Android/sdk/platforms/android-Q/android.jar
> Task :lintVitalRelease FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':lintVitalRelease'.
> Could not resolve all files for configuration ':androidApis'.
> Failed to transform file 'android.jar' to match attributes {artifactType=android-mockable-jar, returnDefaultValues=false} using transform MockableJarTransform
> Cannot create mockable android.jar
Я следовал инструкциям по настройке Android Q SDK отсюда.
Я строю из командной строки вне Android Studio.
Я вижу прогресс сборки через сборку библиотеки jni, но сразу же начинаем barfs, когда дело доходит до компиляции байтов java.
РЕДАКТИРОВАТЬ: Потому что я не могу включить весь стек Gradle (ограничено 30000 байтов в посте) вот краткий обзор:
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':lintVitalRelease'.
Caused by: org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException: Could not resolve all files for configuration ':androidApis'.
Caused by: org.gradle.api.artifacts.transform.ArtifactTransformException: Failed to transform file 'android.jar' to match attributes {artifactType=android-mockable-jar, returnDefaultValues=false} using transform MockableJarTransform
Caused by: java.lang.RuntimeException: Cannot create mockable android.jar
Caused by: java.util.zip.ZipException: invalid entry compressed size (expected 1821 but got 1807 bytes)
at com.android.builder.testing.MockableJarGenerator.createMockableJar(MockableJarGenerator.java:96)
at com.android.build.gradle.internal.dependency.MockableJarTransform.transform(MockableJarTransform.java:54)
... 109 more
Suppressed: java.util.zip.ZipException: invalid entry compressed size (expected 1821 but got 1807 bytes)
1 ответ
Любой, кто может прийти сюда из поиска Google, я нашел ответ.
В заметках о выпуске для Android Q Beta 2 я обнаружил в заметках о выпуске эту рекламу:
When using Gradle 3.2.0 for projects targeting Android Q, you might encounter a lint-related issue with an error message similar to "Could not transform android.jar to a mockable jar." This issue does not occur in Gradle 3.3.0 and later.
If you are working on an app that targets Android Q and are unable to upgrade to Gradle 3.3.0 or later, you can use one of the following workarounds:
- Disable lint for release builds
- Unzip and rezip android.jar
Конечно же, разархивирование и повторное архивирование android.jar позволило мне собрать и развернуть на моем тестовом устройстве Android Q
Те из вас, кто проходит через поиск Google и уже установил последнюю версию Gradle
Просто удалите Android Q SDK и переустановите. Банки из оставшейся бета-установки, вероятно, мешают окончательному выпуску
Перейдите в Инструменты> Менеджер SDK> Инструменты платформы и установите / обновите инструменты платформы SDK для Android Q. Возможно, вам потребуется удалить существующие инструменты платформы SDK для Android Q и переустановить