Во время разделения приложения на модули я обнаружил, что мы достигли предела числа полей dex:
D8: Cannot fit requested classes in a single dex file. Try supplying a main-dex list.
# fields: 93259 > 65536
После исследования я обнаружил, что большинство (~ 67000) этих полей принадлежит константам из различных R.java
файлы.
И с добавлением новых модулей это число растет очень быстро, потому что файл R.java
каждого модуля содержит константы из всех зависимостей.
Я нашел правило Proguard в proguard-android.txt
, которое предотвращает его сжатие:
-keepclassmembers class **.R$* {
public static <fields>;
}
Поэтому я удалил это правило, и число полей вернулось к нормальному.
Кто-нибудь знает, почему это правило добавляется в конфигурацию proguard по умолчанию и каковы будут последствия, если эти поляуменьшенный Proguard?