一.APK瘦身
首先,我们可以把APK包 拖到AndroidStudio中打开。
那么我们可以怎么做到APK瘦身呢?
1.图片资源操作
<1> 压缩图片,我们的切图放到项目中。最好压缩一下。
<2> 鉴于目前,手机设备的改变。我们可以在项目中只添加一套最大的图片,比如xxxdpi。图片在小的设备上会自己缩放图片显示。这样只放一套图片资源,APK体积会减少很多。Android设备图片适配规则如下。
2.so文件操作
为了减少APK的体积,我们可以选择只编译指定平台的SO文件。详情如下
https://blog.csdn.net/weixin_37730482/article/details/72866775
3.代码混淆
因为代码混淆 提供了压缩(shrinker)、优化(optimizer)、混淆(obfuscator)、预校验(preverifier)四大功能。所以为了减小APK体积。我们需要代码混淆。详情如下
https://blog.csdn.net/weixin_37730482/article/details/73614142
4.指定语言
项目中如果没有特殊的语音要求,我们可以只指定中文的语言。执行配置
android {
defaultConfig {
...
//仅支持中文
resConfigs "zh"
}
}
二.稳定性
提升我们APK的稳定性也是一件很重要的事情。比如降低闪退率。但是有一些闪退,查看闪退日志比较麻烦。我们可以全局铺货。
1.自定义CrashManager类
public class CrashManager implements Thread.UncaughtExceptionHandler {
private final Thread.UncaughtExceptionHandler mDefaultHandler;
public CrashManager() {
//获取系统默认的UncaughtExceptionHandler
mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
}
@Override
public void uncaughtException(Thread t, Throwable e) {
if (null == e||null==mDefaultHandler) return;
Log.d("CrashManager", "e.toString()----:" + e.toString());
Log.d("CrashManager", "e.getLocalizedMessage()----:" + e.getLocalizedMessage());
Log.d("CrashManager", "e.getMessage()----:" + e.getMessage());
mDefaultHandler.uncaughtException(t, e);
}
}
2.Application类注册
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 捕获全局异常
Thread.setDefaultUncaughtExceptionHandler(new CrashManager());
}
}
3.写空指针测试
public class MainActivity extends AppCompatActivity {
private String mName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
boolean b = mName.isEmpty();
Log.d("MainActivity", "b----:" + b);
}
}
4.结果
D/CrashManager: e.toString()----:java.lang.RuntimeException:
Unable to start activity ComponentInfo{com.wjn.networkdemo/com.wjn.networkdemo.MainActivity}:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.isEmpty()' on a null object reference
D/CrashManager: e.getLocalizedMessage()----:
Unable to start activity ComponentInfo{com.wjn.networkdemo/com.wjn.networkdemo.MainActivity}:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.isEmpty()' on a null object reference
D/CrashManager: e.getMessage()----:
Unable to start activity ComponentInfo{com.wjn.networkdemo/com.wjn.networkdemo.MainActivity}:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.isEmpty()' on a null object reference
三.内存的优化
Android Studio 里面的Profiler工具,可以帮助我们分析APP的内存使用问题。
详细使用,官网有详细的介绍
https://developer.android.google.cn/studio/profile/memory-profiler?hl=zh-cn
四.布局优化
https://blog.csdn.net/weixin_37730482/article/details/76157085
五.启动速度优化
https://blog.csdn.net/weixin_37730482/article/details/73614214
六.MultiDex优化
https://blog.csdn.net/weixin_37730482/article/details/72822850