Proguard и R8 не оптимизируют код моей библиотеки

Когда я подключаю свою собственную библиотеку к проекту, она не оптимизируется. Так:

  1. В моей библиотеке я включаю minifyEnabled:
apply plugin: 'com.android.library'
...
 debug {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
...
  1. В проекте я реализую свою библиотеку implementation project(':somelib')

  2. В моем проекте я включаю minifyEnabled:

...
 debug {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
...
  1. После сборки проекта моя библиотека не оптимизирована. Я проверяю его с помощью APK Analyzer, затем использую R8 и только после него. Также я подключаю lib в поверх проекта, где он вообще не используется. Но после оптимизации метод подсчета увеличился, потому что я реализую неиспользуемую библиотеку.

Proguard содержит стандартный автоматически сгенерированный файл proguard-android.txt с правилами для Parseble и Butterknife6. Proguard-rules.pro пуст.

// default proguard-android.txt file
...
-keep public class * implements butterknife.Unbinder { public <init>(**, android.view.View); }

-keep class butterknife.*
-keepclasseswithmembernames class * { @butterknife.* <methods>; }
-keepclasseswithmembernames class * { @butterknife.* <fields>; }
-keep class **$$ViewInjector { *; }
-keepclassmembers class * implements android.os.Parcelable {
    public static final ** CREATOR;
}

-keep class * implements android.os.Parcelable {
*;
}

-keepnames class * implements android.os.Parcelable {
    public static final ** CREATOR;
}

person crysis74    schedule 18.06.2020    source источник
comment
Можете ли вы также опубликовать свои правила proguard?   -  person Tirth Mehta    schedule 18.06.2020
comment
@Tirh Это стандартный автоматически сгенерированный файл proguard-android.txt с правилами для Parseble и Butterknife6. Proguard-rules.pro пуст.   -  person crysis74    schedule 18.06.2020


Ответы (1)


В файле proguard-android.txt есть правило -dontoptimize, запрещающее оптимизацию. Они действительно упоминают в этом файле:

Обратите внимание: если вы хотите включить оптимизацию, вы не можете просто включить флаги оптимизации в свой собственный файл конфигурации проекта; вместо этого вам нужно будет указать файл proguard-android-optimize.txt вместо этого из вашего файла project.properties.

Так что просто замените

getDefaultProguardFile('proguard-android.txt')

с

getDefaultProguardFile('proguard-android-optimize.txt')
person Cruceo    schedule 18.02.2021