优化
buildTypes {
release {
debuggable false
zipAlignEnabled true
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
debug {
debuggable true
minifyEnabled false
zipAlignEnabled false
}
}
对代码的优化
未使用的代码
当在工程中新建一个类,如果该类从来没有使用,会被记录在usag.txt
使用的代码
注意 需要在类的名称上加@Keep
@Keep
public class TTTTTTSSSSS {
@NonNull
@Override
public String toString() {
return "111";
}
}
对资源进行优化
使用资源优化时,前提是需要支持代码优化,因为只有代码优化完之后,保留使用的代码,在使用的代码中,再去寻找使用的资源。
需要加上
buildTypes {
release {
signingConfig signingConfigs.releasekey
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
严格模式
如何启用严格模式
在res/raw/目录下创建一个keep.xml文件
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:shrinkMode="strict" />
作用
当启用严格模式时,一些没有使用的图片会被删除
在该目录下的resources.txt文件中,会记录哪些资源文件会被删除
Skipped unused resource res/drawable/icon_login_bottom.png: 86680 bytes (replaced with small dummy file of size 67 bytes)
如上,res/drawable/icon_login_bottom.png
该文件并没有使用,会被删除
在代码中使用资源文件
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView img = findViewById(R.id.img);
int drawable = getResources().getIdentifier("icon_login_bottom", "drawable", getPackageName());
img.setImageResource(drawable);
}
}
如果在严格模式中,使用图片字符串的引用,图片也会被删除
只有在keep中加上保留关键字,才可以显示
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@drawable/icon_*"
tools:shrinkMode="strict" />