AndroidMainfest中的类不混淆,所以四大组件和Application的子类和Framework层下所有的类默认不会进行混淆。自定义的View默认也不会被混淆;所以像网上贴的很多排除自定义View,或四大组件被混淆的规则在Android Studio中是无需加入的
子模块的混淆影响不到app模块,但是APP模块的混淆会影响到子模块
aar包默认是没有混淆文件的,要想混淆需要在宿主APP里面加
但是也可以配置aar包可以包含混淆文件
aar包自带混淆文件配置
consumerProguardFiles "consumer-rules.pro"
打出来的aar包就会包含混淆配置文件,如果没有,就需要再宿主apk里面添加混淆配置
Android混淆(ProGuard)从0到1 - 简书本文为原创,转载请注明出处:http://www.jianshu.com/p/1b76e4c10495 说在前面的 作为一个Android开发者,或多或少都知道点关于混淆的概...https://www.jianshu.com/p/1b76e4c10495
混淆规则 用法
android_混淆_详解_写bug的蚊子的博客-CSDN博客_android混淆指定类
子模块的consumer-rules.pro被主模块用或者被宿主app用(aar的时候)
子模块的proguard-rules.pro被子模块自己用
混淆还原
GET代码混淆(ProGuard) - 简书由于本人能力有限,文中若有错误之处,欢迎指正。转载请注明出处:http://www.jianshu.com/p/7371952ae006 不会代码混淆的程序员不是合格的And...https://www.jianshu.com/p/7371952ae006
https://www.jianshu.com/p/7371952ae006
Android制作AAR包并混淆后加载调用 - 云+社区 - 腾讯云https://cloud.tencent.com/developer/article/1867422
GET代码混淆(ProGuard) - 简书由于本人能力有限,文中若有错误之处,欢迎指正。转载请注明出处:http://www.jianshu.com/p/7371952ae006 不会代码混淆的程序员不是合格的And...https://www.jianshu.com/p/7371952ae006
绿色记忆:ProGuard学习笔记https://blog.gmem.cc/proguard-study-note
Android多模块混淆、多module混淆、多library混淆的正确姿势_Android小码农的博客-CSDN博客_android module不混淆Android Studio本身集成了ProGuard混淆工具,我们可以通过编辑build.gradle文件来开启混淆并且对代码进行压缩,对资源进行优化等。如下图下面是代码,可以直接复制 buildTypes { release { minifyEnabled true //开启混淆 zipAlignEnabl...https://blog.csdn.net/s13383754499/article/details/81289327
多个moudle混淆配置问题:
网上很多关于子module的混淆配置是错误的,经过我的多次实践得出,主模块的混淆开关配置会直接影响到子模块,也就是说如果你的主模块开启的混淆,就算你的子模块关闭混淆开关,最终子模块还是会被混淆的。
其次
子模块混淆文件的指定是通过consumerProguardFiles这个属性来指定的,并不是proguardFiles 属性,而且我们无需配置其他的选项,只需要配置consumerProguardFiles属性就可以。该属性表示在打包的时候会自动寻找该module下我们指定的混淆文件对代码进行混淆。
Android多模块混淆的问题 - 简书Android在多模块或者组件化的时候,关于混淆的管理,一般常见的做法就是两条。 把所有的混淆规则规则都放在app模块下面,由app统一管理。这样就会有一个问题,就是到会导致...https://www.jianshu.com/p/e4133e9fd60f
aar包自带混淆文件配置
consumerProguardFiles "consumer-rules.pro"
打出来的aar包就会包含混淆配置文件,如果没有,就需要再宿主apk里面添加混淆配置
Android aar中增加独立的混淆配置 - 简书1、为什么要在AAR中独立配置混淆文件 我们的工程中有很多的aar,我们希望别人在使用我们的aar的时候不用像使用jar包一样还要再进行相应的混淆配置。同时为了使每个aar库...https://www.jianshu.com/p/a8614ff60647
2.2、gradle 中的将混淆文件打包到aar中的方法
如果同时配置了
consumerProguardFiles(自定义) 和 proguardFiles,那么consumerProguardFiles会覆盖proguardFiles,以consumerProguardFiles 自定义的为准
如果只配置了proguardFiles
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
那么这个是把sdk\tools\proguard下面的proguard-android.txt拷贝到proguard-rules.pro作为混淆文件,如果proguard-rules.pro本身也有内容,那应该是合并本身和proguard-android.txt的内容
这种在子moudle里面都好说。一般就是配置
consumerProguardFiles "consumer-rules.pro" 或者
consumerProguardFiles "proguard-rules.pro"
如果有的app模块要单独运行,自身也要作为aar
用以下的方
哪些内容不能被混淆
Android编译混淆与堆栈还原 - 简书
Android混淆从入门到精通 - 简书
1,jni方法不可混淆,因为这个方法需要和native方法保持一致;
-keepclasseswithmembernames class * { # 保持native方法不被混淆
native ;
}
2,反射用到的类不混淆(否则反射可能出现问题);
3,AndroidMainfest中的类不混淆,所以四大组件和Application的子类和Framework层下所有的类默认不会进行混淆。自定义的View默认也不会被混淆;所以像网上贴的很多排除自定义View,或四大组件被混淆的规则在Android Studio中是无需加入的;
4,与服务端交互时,使用GSON、fastjson等框架解析服务端数据时,所写的JSON对象类不混淆,否则无法将JSON解析成对应的对象;
5,使用第三方开源库或者引用其他第三方的SDK包时,如果有特别要求,也需要在混淆文件中加入对应的混淆规则;
6,有用到WebView的JS调用也需要保证写的接口方法不混淆,原因和第一条一样;
7,Parcelable的子类和Creator静态成员变量不混淆,否则会产生Android.os.BadParcelableException异常;
-keep class * implements Android.os.Parcelable { # 保持Parcelable不被混淆
public static final Android.os.Parcelable$Creator *;
}
8,使用enum类型时需要注意避免以下两个方法混淆,因为enum类的特殊性,以下两个方法会被反射调用,见第二条规则。
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
发布一款应用除了设minifyEnabled
为ture
,你也应该设置zipAlignEnabled
为true
,像Google Play
强制要求开发者上传的应用必须是经过zipAlign的,zipAlign可以让安装包中的资源按4字节对齐,这样可以减少应用在运行时的内存消耗。