dsvoronin

Locking Android Configs (Manifest / R8 config)

Aug 24th, 2021 (edited)
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.30 KB | None | 0 0
  1. Проблема
  2.  
  3. Результирующие Android Manifest и R8 конфиг не видны разработчику, а транзитивные зависимости могут внести туда неожиданные директивы.
  4.  
  5. Например добавить Permission или правило, которое отключит обфускацию по всему проекту.
  6.  
  7. Пример подобной проблемы: Among Us: ProGuard editon — ищем предателя cреди библиотек
  8. https://telegra.ph/Among-Us-ProGuard-editon--ishchem-predatelya-credi-bibliotek-08-20
  9.  
  10.  
  11. Предложение
  12.  
  13. По аналогии с Gradle Locking Dependency Versions предлагаю сделать локинг конфигураций Android.
  14.  
  15. В version control будет храниться результирующий файл конфигурации для приложения, и если он измениться, это попадет на PR.
  16.  
  17.  
  18.  
  19.  
  20. Реализация
  21.  
  22. Gradle Plugin, зависящий от AndroidGradlePlugin, а конкретно от задач генерирующих искомые конфиги, например в /build/generated/mergedManifest
  23.  
  24. Настройка плагина позволит выбрать какие buildVariant стоит лочить:
  25. androidLocking {
  26. manifest {
  27. lockVariants = setOf("debug", "release")
  28. }
  29. r8 {
  30. lockVariants = setOf("release")
  31. }
  32. }
  33.  
  34. ./gradlew app:lockAndroid
  35.  
  36. После чего сгенерируется файл app/lock/variant/AndroidManifest.xml
  37.  
  38. Следующий билд упадет если контент лок файла будет отличаться от сгенерированного, показав список различий
  39.  
  40. Разработчик будет должен повторно вызвать команду и запушить новый лок файл
  41. Opensource
  42.  
  43. Есть ощущение что эта проблема касается абсолютно любого Android проекта и будет очень позитивно воспринята в комьюнити.
  44.  
  45. Не удалось найти подобных решений беглым поиском по github.
  46.  
Add Comment
Please, Sign In to add comment