Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Проблема
- Результирующие Android Manifest и R8 конфиг не видны разработчику, а транзитивные зависимости могут внести туда неожиданные директивы.
- Например добавить Permission или правило, которое отключит обфускацию по всему проекту.
- Пример подобной проблемы: Among Us: ProGuard editon — ищем предателя cреди библиотек
- https://telegra.ph/Among-Us-ProGuard-editon--ishchem-predatelya-credi-bibliotek-08-20
- Предложение
- По аналогии с Gradle Locking Dependency Versions предлагаю сделать локинг конфигураций Android.
- В version control будет храниться результирующий файл конфигурации для приложения, и если он измениться, это попадет на PR.
- Реализация
- Gradle Plugin, зависящий от AndroidGradlePlugin, а конкретно от задач генерирующих искомые конфиги, например в /build/generated/mergedManifest
- Настройка плагина позволит выбрать какие buildVariant стоит лочить:
- androidLocking {
- manifest {
- lockVariants = setOf("debug", "release")
- }
- r8 {
- lockVariants = setOf("release")
- }
- }
- ./gradlew app:lockAndroid
- После чего сгенерируется файл app/lock/variant/AndroidManifest.xml
- Следующий билд упадет если контент лок файла будет отличаться от сгенерированного, показав список различий
- Разработчик будет должен повторно вызвать команду и запушить новый лок файл
- Opensource
- Есть ощущение что эта проблема касается абсолютно любого Android проекта и будет очень позитивно воспринята в комьюнити.
- Не удалось найти подобных решений беглым поиском по github.
Add Comment
Please, Sign In to add comment