Плагин gradle для Android (после обновления до 2.2.0) завершается с ошибкой задачи dexguard "Нет подписи метода: ....getAllLibraries()"

Я получаю эту трассировку стека во время задачи dexguard (все строки начинались с метки времени и [ERROR] [org.gradle.BuildExceptionReporter]):

Caused by: groovy.lang.MissingMethodException: No signature of method: com.android.build.gradle.internal.core.GradleVariantConfiguration.getAllLibraries() is applicable for argument types: () values: []
at com.guardsquare.dexguard.h.getProguardFiles(DexGuard7.1.23:1090)
at com.guardsquare.dexguard.ao.doCall(DexGuard7.1.23:784)
at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:590)

Я использую DexGuard v7.1.23, Android Studio 2.2, Gradle по умолчанию 2.14.1, в Windows 7 64b.

Ошибка происходит после того, как я изменяю (во всех соответствующих build.gradle скрипты):

     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.3'
+        classpath 'com.android.tools.build:gradle:2.2.0'

С плагином Gradle 2.1.3 сборка работает.

Я попытался отладить его в Android Studio путем удаленного подключения к gradle, но хотя кнопка "pause" в отладчике выглядит так, как будто она приостанавливает процесс, и я могу возобновить выполнение, она не будет показывать никакого кода (вероятно, нужны источники gradle и все задействованные плагины?).

Я думаю, что ошибка, скорее всего, связана с кодом плагина dexguard gradle, который обращается к тому, что больше не доступно в плагине android gradle 2.2.0.


Время вопросов:

Как даже отладить / исправить что-то подобное? Я привык к некоторым нетривиальным схемам сборки из огромных проектов C++, включающим создание файлов и различные сценарии, выполняющие внешние инструменты (где я могу легко проверить каждую ошибку сборки на уровне исходного кода и точно понять, какой двоичный файл вызывался с какими параметрами и почему), но эта нездоровая экосистема с таким количеством динамических частей, загруженных из некоторых сетевых репозиториев и чрезвычайно медленным контролем исполнения Groovy, для меня слишком сложна.

Есть ли (не очень сложный) способ отладки процесса сборки (я не говорю о собственном отладчике и отладке самой виртуальной машины, хотя, возможно, это звучит бесполезно в результате)? Может быть, какой-нибудь простой способ получить также исходные пакеты из репозиториев, аналогично linux -src.pkg, просто добавив зависимость?

Или я могу где-нибудь найти кешированный двоичный файл подключаемого модуля dexGuard, разобрать его, проверить, что он вызывает, и переписать его вручную в моем собственном сценарии?

Любые советы, как получить больше информации об этом gradle blackbox, оценили, т.е. как это работает, почему это не сработало и т. д. (хотя я не собираюсь изучать также весь Groovy должным образом, тем более, что у меня не складывается такое мышление даже для основного языка (я простой парень, думаю в ASM) и C++), и, если я хорошо понимаю, Gradle расширяет его весьма специфично для предметной области, так что чистого Groovy даже недостаточно, чтобы свободно понимать эти сценарии?).

1 ответ

Решение

У вас есть два варианта:

  • остаться с плагином Android Gradle 2.1.0 или более ранней
  • обновить DexGuard до более свежей версии (последняя версия 7.2.12), которая поддерживает 2.2.0+

Редактировать:

Чтобы лучше понять, почему это происходит, плагин DexGuard использует API из плагина Android gradle. Если API изменяется в новой версии, плагин DexGuard должен адаптироваться к более новому API, сохраняя при этом обратную совместимость со старыми версиями.

Другие вопросы по тегам