Правило Proguard/R8 для исключения папки ресурсов

Мой проект состоит из основного модуля, за которым следуют другие зависимости модуля. Одной из таких зависимостей является "общее достояние". В "общем" есть папка активов, скажем, "флаги".

Если мы заранее знаем, что эта папка никогда не будет использоваться, есть ли способ написать правило proguard для исключения этой конкретной папки "flags"?

В моем проекте основной модуль не использует какой-либо код из модуля "commons", который специально нацелен на эту папку, но он все еще включен в окончательный пакет.

0 ответов

Ни R8, ни Proguard не могут удалять активы, поскольку они даже не передаются в качестве входных данных в эти инструменты. Кроме того, даже если они являются частью входных данных, нетривиально определить, используется ли актив или нет. По той же причине R8 и Proguard не удаляют ресурсы Java (они могут только изменять свой путь / имена).

Решением вашей проблемы может быть использование DSL в приложении build.gradleфайл. А именно, если добавить:

android {
  aaptOptions {
    ignoreAssetsPattern "<dir>flags"
  }
}

окончательный APK не будет содержать файлов в flagsкаталог. Имейте в виду, что этот параметр не зависит от варианта, и все варианты приложения (например, отладка, выпуск) не будут содержать эти активы.

Надеюсь, это поможет.

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