Proguard 和 R8 没有优化我的库代码
Posted
技术标签:
【中文标题】Proguard 和 R8 没有优化我的库代码【英文标题】:Proguard and R8 don't optimize my library code 【发布时间】:2020-10-08 07:10:58 【问题描述】:当我将自己的库连接到项目时,它没有优化。所以:
-
在我的库中,我打开了
minifyEnabled
:
apply plugin: 'com.android.library'
...
debug
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
...
在项目中我实现了我的库implementation project(':somelib')
在我的项目中,我打开minifyEnabled
:
...
debug
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
...
-
构建项目后,我的库没有优化。我首先使用 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;
【问题讨论】:
你也可以发布你的proguard规则吗? @Tirh 这是一个标准的自动生成的 proguard-android.txt 文件,其中包含 Parseble 和 butterknife6 的规则。 Proguard-rules.pro 为空。 【参考方案1】:proguard-android.txt
文件具有防止优化的-dontoptimize
规则。他们实际上在该文件中提到:
注意,如果你想启用优化,你不能只 在您自己的项目配置文件中包含优化标志; 相反,您需要指向 “proguard-android-optimize.txt”文件而不是你的这个文件 project.properties 文件。
所以替换
getDefaultProguardFile('proguard-android.txt')
与
getDefaultProguardFile('proguard-android-optimize.txt')
【讨论】:
以上是关于Proguard 和 R8 没有优化我的库代码的主要内容,如果未能解决你的问题,请参考以下文章