android 混淆对于独立开发者来,和app打包上线的人来说是一个大坑。虽然说规则其实我们不用去记住,只需要把
混淆模板复制粘贴就行(下面是模板),但是当你debug模式下没问题,release打包时候各种闪出,并且报各种类找不到时候,这时候注意了,很有可能是混淆出来了问题。顺便说一下,release出错解决办法,那就是 在androidstuoid上连接手机,选着手机,但是不选择进程。我知道很简单,但是我有一次忘了AS有这个功能,竟然
用 adb 命令去分析 运行时问题。好了。下面时 混淆模板,再下面是 2个常用问题的混淆。RXjava,这个不混淆会发现涉及到联网就闪退(看个人),曝出的问题是类找不到。 第2个是。百度地图,在倒sdk的时候把混淆忽视了,感觉不多,结果在程序初始化的时候就闪退。
还有gson和Serializable .和
// 忽略警告,否则打包可能会不成功=
-ignorewarnings
开启混淆:
在app mould 中的build.gradle中 设置 :
android {
buildTypes {
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
}
万能模板:
#-------------------------------------------基本不用动区域----------------------------------------------
-----------------------------基本 -----------------------------
指定代码的压缩级别 0 - 7(指定代码进行迭代优化的次数,在Android里面默认是5,这条指令也只有在可以优化时起作用。)
-optimizationpasses 5
混淆时不会产生形形色色的类名(混淆时不使用大小写混合类名)
-dontusemixedcaseclassnames
指定不去忽略非公共的库类(不跳过library中的非public的类)
-dontskipnonpubliclibraryclasses
指定不去忽略包可见的库类的成员
-dontskipnonpubliclibraryclassmembers
#不进行优化,建议使用此选项,
-dontoptimize
不进行预校验,Android不需要,可加快混淆速度。
-dontpreverify
屏蔽警告
-ignorewarnings
指定混淆是采用的算法,后面的参数是一个过滤器
这个过滤器是谷歌推荐的算法,一般不做更改
-optimizations !code/simplification/arithmetic,!field/,!class/merging/
保护代码中的Annotation不被混淆
-keepattributes Annotation
避免混淆泛型, 这在JSON实体映射时非常重要
-keepattributes Signature
抛出异常时保留代码行号
-keepattributes SourceFile,LineNumberTable
#优化时允许访问并修改有修饰符的类和类的成员,这可以提高优化步骤的结果。