Плагин Android Gradle v3.3.0 -> не может найти R $ raw при использовании proguard - PullRequest
0 голосов
/ 16 января 2019

Только что обновлен до версии Android Gradle плагин 3.3.0

У нас есть следующие настройки (не уверен, что важно):

  • Прикладной проект (приложение) с 3 библиотечными модулями (данные, домен, утилиты)

  • Привязка данных включена (databinding.enabled true)

  • Proguard включен (proguardFiles 'proguard-rules.pro')

Когда я создаю приложение, используя:

./gradlew assembleDevRelease

Я получаю следующую ошибку:

can't find referenced class my.package.data.R$raw

Когда я создаю приложение, используя:

./gradlew :app:assembleDevRelease

Приложение прекрасно собирается, генерирует запутанный * .apk, который я могу установить

Вопрос:

  • В чем разница между assembleRelease и :app:assembleRelease

- Почему переключение на плагин Android Gradle 3.3.0 влияет на то, какую задачу я должен вызвать, чтобы построить мой apk? Мы используем assembleRelease везде в наших конвейерах CI для создания наших apks.

  • Что изменилось в плагине Android Gradle 3.3.0, что привело к срыву задачи assembleRelease? Мы используем assembleRelease везде в наших конвейерах CI для создания наших apks.

  • Есть какие-нибудь предложения, как мы можем заставить "assemblyRelease" работать снова? (обновить конфигурацию Proguard ?, включить R8?)

1 Ответ

0 голосов
/ 16 января 2019

В чем разница между assembleRelease и :app:assembleRelease

Первый запускает задачу assembleRelease на всех модулях относительно текущего уровня. Последний запускает его только на модуле app (и его зависимостях).

Почему переключение на плагин Android Gradle 3.3.0 влияет на то, какую задачу я должен вызвать, чтобы построить мой apk? Мы используем assembleRelease везде в наших конвейерах CI для создания наших apks.

В вопросе недостаточно информации, чтобы сказать наверняка, но в примечаниях к выпуску указан ряд изменений. Например, эта проблема может быть связана с:

Более быстрое создание классов R для библиотечных проектов: Ранее плагин Android Gradle генерировал файл R.java для каждой зависимости вашего проекта, а затем компилировал эти классы R вместе с другими классами вашего приложения. Теперь плагин генерирует JAR-файл, содержащий скомпилированный R-класс вашего приложения напрямую, без предварительной сборки промежуточных R.java классов. Эта оптимизация может значительно улучшить производительность сборки для проектов, которые включают множество подпроектов и зависимостей библиотеки, и повысить скорость индексации в Android Studio.

...