设置混淆的压缩比率 0 ~ 7
-optimizationpasses 5
混淆时不使用大小写混合,混淆后的类名为小写
-dontusemixedcaseclassnames
指定不去忽略非公共库的类
-dontskipnonpubliclibraryclasses
指定不去忽略非公共库的成员
-dontskipnonpubliclibraryclassmembers
混淆时不做预校验
-dontpreverify
混淆时不记录日志
-verbose
忽略警告
-ignorewarning
代码优化
-dontshrink
不优化输入的类文件
-dontoptimize
保留注解不混淆
-keepattributes Annotation,InnerClasses
避免混淆泛型
-keepattributes Signature
保留代码行号,方便异常信息的追踪
-keepattributes SourceFile,LineNumberTable
混淆采用的算法
-optimizations !code/simplification/cast,!field/,!class/merging/
dump.txt文件列出apk包内所有class的内部结构
-dump class_files.txt
seeds.txt文件列出未混淆的类和成员
-printseeds seeds.txt
usage.txt文件列出从apk中删除的代码
-printusage unused.txt
mapping.txt文件列出混淆前后的映射
-printmapping mapping.txt
不需混淆的Android类
support design库、support下的所有类及其内部类、Android类
-keep public class * extends android.app.Fragment
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.preference.Preference
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class * extends android.view.View
-keep public class com.android.vending.licensing.ILicensingService
-keep class android.support.** {*;}
-dontwarn android.support.**
-keep interface android.support.** { *; }
-keep class androidx.** {*;}
-keep interface androidx.** {*;}
-keep public class * extends androidx.**
-dontwarn androidx.**
-dontwarn android.support.design.**
-keep class android.support.design.** { *; }
-keep interface android.support.design.** { *; }
-keep public class android.support.design.R$* { *; }
-keep class com.google.android.material.** {*;}
-dontwarn com.google.android.material.**
-dontnote com.google.android.material.**
避免混淆自定义控件类的 get/set 方法和构造函数
-keep public class * extends android.view.View{
*** get*();
void set*(***);
public (android.content.Context);
public (android.content.Context, android.util.AttributeSet);
public (android.content.Context, android.util.AttributeSet, int);
}
关闭 Log日志
-assumenosideeffects class android.util.Log {
public static boolean isLoggable(java.lang.String, int);
public static int v(…);
public static int i(…);
public static int w(…);
public static int d(…);
public static int e(…);
}
避免资源混淆
-keep class *.R$ {*;}
避免layout中onclick方法
-keepclassmembers class * extends android.app.Activity{
public void *(android.view.View);
}
避免混淆枚举类
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
Natvie 方法不混淆
-keepclasseswithmembernames class * {
native ;
}
避免Parcelable混淆和Serializable接口
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
!static !transient ;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
WebView混淆配置
尾声
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
最后想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。
当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。
进阶学习视频
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
进阶学习视频**
[外链图片转存中…(img-rQm2adtK-1714486292351)]
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
[外链图片转存中…(img-ItMQDWkM-1714486292353)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!