Модуль сборки Gradle Порядок сборки 2 - PullRequest
0 голосов
/ 07 января 2020

У меня есть и Android Проект Gradle со многими модулями (только AAR, без приложения).

Поскольку Google не поддерживает толстые AAR, мне нужно выполнить переупаковку самостоятельно (я пробовал несколько толстых AAR Gradle плагины, но ни один из них на самом деле не работает, поддержка мне совсем не помогла).

Так что я должен написать переупаковку самостоятельно (как скрипт Groovy, прямо в мою систему сборки Gradle).

Для этого мне нужно:

  • Построить много AAR - это несколько модулей Gradle
  • Упаковать все эти AAR в один большой AAR - это специальный Модуль Gradle (все вышеупомянутые AAR устанавливаются как зависимость реализации от этого AAR)
  • Затем запутывает все, используя DexGuard (нет ProGuard / R8 - они слишком слабые)

Переупаковка прекрасно работает для меня. НО ...

Если я выполню это, чтобы гарантировать чистую сборку релиза:

./gradlew clean :MbiSdkLibrary:assembleRelease

Сначала он все очищает, а затем пытается собрать мою библиотеку FAT.

проблема заключается в том, что сборка MARSdkLibrary AAR начинается параллельно со сборкой зависимых AAR, в то время как сборка других AAR еще не завершена полностью. Другими словами, Gradle, похоже, игнорирует зависимости при определении порядка сборки.

Впоследствии переупаковка MbiSdkLibrary (окончательный жирный AAR) происходит случайно (это гонки) на отсутствующем AAR от другого (параллельного ) builds.

Конечно, я могу добиться того, чтобы сборка работала таким образом (я тестировал, она отлично работает):

  • Сначала создайте AAR зависимостей с помощью отдельной команды gradle
  • Построить окончательный жирный AAR впоследствии (без чистой задачи)

Но это решение звучит для меня глупо, я считаю, что Gradle не может быть настолько ограничен, что не может сделать такую ​​простую вещь правильно ...

Я также много гуглил и пробовал несколько обходных путей, включая, например, такой:

  • { ссылка }
  • Это У меня не работает по какой-то причине (зависимости задач от других модулей Gradle у меня не работают)

Мой вопрос связан с этим вопросом: Порядок сборки модуля Gradle .

Извините, по какой-то причине мне не разрешено общаться там, поэтому я вынужден задать еще один (очень похожий) вопрос.

1 Ответ

0 голосов
/ 07 января 2020

Мне удалось взломать проблему, используя задачу типа GradleBuild.

Но это сделало сборку в 5 раз медленнее и потребило гораздо больше памяти.

Это мой метод

...