android性能优化

性能优化分为几个方向:

  • 内存优化
  • 电量优化
  • 渲染优化
  • size大小优化
  • 异常捕获

apk瘦身

针对与apk大小优化而言,
首先需要知道apk中主要结构,了解其中是哪些部分比较大。
然后来针对性优化。

一般而言比较占用的是:资源文件、架构文件(.so)

资源文件优化

针对资源文件,首先我们去除没有被使用的资源,然后就是降低所用资源的大小。

在app/build.gradle文件中设置shrinkResources true

1
2
3
4
5
release {
shrinkResources true
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"

}

则会在Gradle打包release apk时,自动忽略未使用的资源文件,包括:图片、xml

但要注意此时也会忽略隐式调用的资源文件,如通过反射调用,或者react-native中在js调用drawable木土图片,
在这两种场景时,都会被忽略。
针对这种场景,可以通过keep文件,保持这些资源文件不会被忽略。

在res目录下新建xml目录,在xml目录下新建文件keep.xml

1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<resources
xmlns:tools="http://schemas.android.com/tools"
tools:keep="@layout/l_used*_c,@layout/l_used_a,@layout/l_used_b*"
tools:discard="@layout/unused2" />

其中tools:keep是强制不忽略,tools:discard是强制忽略

上面讲述的是去除无用资源,还有我们可以去除无用的代码,如未被调用的函数,未被使用的变量

minifyEnabled设置为true,设置在与shrinkResources一起的地方。
注意shrinkResources需要与minifyEnabled一起使用才会生效

1
2
3
4
5
6
release {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"

}

针对架构.so优化

在大型项目,特别时继承第三方过多时,此时.so文件才是占用最多的部分。

异常捕获

开发时怕的不是出现问题,而是问题无法重现。
因为android碎片化严重 生产上的问题肯定要比开发时问题多。而且很多都是在开发端未必能重现的。
此时需要我们记录发生在用户手机上的异常。

针对异常可以分类,java异常、native异常。
native异常即是native函数c++代码异常

java异常捕获

在andorid app中捕获java异常,只需要实现Thread.UncaughtExceptionHandler

native异常