生成带混淆配置的aar库
来源:互联网 发布:uml对象设计与编程 编辑:程序博客网 时间:2024/04/27 21:10
今天同事问了一个问题,如何生成带Proguard配置的库,这样在引入的时候就直接从maven或者jcenter引入了,不需要在项目中配置混淆规则了,多贴心的功能啊。但是目前使用的大多数库都要手工加入混淆规则。难道就没有方法了么?
想起前一阵使用的Realm库,里面就不需要手工加规则:
A ProGuard configuration is provided as part of the Realm library. This means that you don’t need to add any Realm specific rules to your ProGuard configuration.
难道Realm有独家秘方?
带着好奇心,开始探究realm源码。
这里就是上面解释里自带的混淆规则。继续找
看到没consumerProguardFiles
属性,它指定了编译时,库自动引入的混淆规则。也就是说应用打包时候会自动的寻找库里的混淆文件,不需要手工配置了。
那么这个属性是咋回事呢?
该属性是在AS的0.5.7版本引入的,目的是让库支持ProGuard。
Proguard support for libraries. Note the current DSL property ‘proguardFiles’ for library now sets the proguard rule file used when proguarding the library code. The new property ‘consumerProguardFiles’ is used to package a rule file inside an aar.
另外在http://blog.hwangjr.com/2015/11/25/%E6%90%9E%E5%AE%9AAndroid-Proguard/中也有解释。
consumerProguardFiles
开源库中可以依赖此标志来指定库的混淆方式,此会将
*.pro
文件打包进入aar
中,库混淆时候会自动使用此混淆配置文件。
需要注意的是,以consumerProguardFiles
方式加入的混淆具有以下特性:
-*.pro
文件会包含在aar
文件中
- 这些pro
配置会在混淆的时候被使用
- 此配置针对此aar
进行混淆配置
- 此配置只对库文件有效,对应用程序无效
所以以AndroidKnife/proguard-config开源库,只要一行代码即可搞定外部混淆:
dependencies { ... compile 'com.hwangjr.proguard:proguardconfig:1.0.1@aar'}
还有https://guides.codepath.com/android/Building-your-own-Android-library中找到了解释。
使用Proguard
如果你打算发布你的正式版,你还应当配置,这样ProGuard会应用到你的库。如果在库配置中指定consumerProguardFiles
,ProGuard规则将在编译时期加入。
android { defaultConfig { minifyEnabled true consumerProguardFiles 'consumer-proguard-rules.pro' }}
务必创建一个consumer-proguard-rules.pro
。详见配置ProGuard。
如果你使用默认配置,ProGuard将混淆并提醒你库类名,使得Android工程不可能引用它们。最确保库类被引入的基本例子如下:
-dontobfuscate# See https://speakerdeck.com/chalup/proguard -optimizations !code/allocation/variable-keep public class * { public protected *;}
混淆文件的语法详见ProGuard文档。参见这个例子。
以上这些适用于aar文件。因为aar文件可包含proguard配置文件。
aar文件可包含如下文件类型:
- /AndroidManifest.xml(强制)
- /class.jar(强制)
- /res/ (强制)
- /R.txt (强制)
- /assets/ (可选)
- /libs/*.jar (可选)
- /jni//*.so (可选)
- /proguard.txt (可选)
- /lint.jar (可选)
ConsumerProGuardFilesTest这个git里对配置了混淆规则库的不同编译方式进行了shi’y实验,证明上面的方法是可行的。在编译生成的seeds.txt文件中,找到了库里的类名,未被混淆。
同时在添加Realm库后,realm的类文件也未混淆,同样证明了方法可行。
参考链接:
http://stackoverflow.com/questions/26983248/proguard-ignores-config-file-of-library
http://stackoverflow.com/questions/30201420/how-to-include-a-proguard-configuration-in-my-android-library-aar
http://stackoverflow.com/questions/30820915/android-studio-proguard-handling-in-multi-library-projects
https://guides.codepath.com/android/Building-your-own-Android-library#using-with-proguard
http://blog.hwangjr.com/2015/11/25/%E6%90%9E%E5%AE%9AAndroid-Proguard/
https://github.com/krschultz/android-proguard-snippets
- 生成带混淆配置的aar库
- Android studio aar 生成 和代码混淆
- AAR文件的生成
- 安卓如何生成代码混淆的release版本的aar文件并使用
- 打aar混淆包和集成aar的方法
- android studio如何生成带混淆的jar包
- *.jar *.aar文件的生成
- 使用Gradle生成包含所有依赖库(.jar或.aar)的aar包
- 使用Gradle生成包含所有依赖库(.jar或.aar)的aar包
- *.jar 与 *.aar 的生成与*.aar导入项目方法
- Android studio aar 混淆
- AAR 库怎么来配置
- aar打包和用aar打apk包的混淆问题
- [Android Studio] *.jar 与 *.aar 的生成与*.aar,jar,第三方库项目导入项目方法
- Android aar的生成与使用说明
- jar/aar的生成以及使用
- 使用android studio生成jar包,以及带混淆的jar
- 打包自己的aar库
- Android中的Drawable资源—— StateListDrawable
- C++中继承的注意事项
- oracle复习 - day02
- 如何把安全证书导入/删除 java中的cacerts证书库
- How to install and configure NGINX on CentOS 7
- 生成带混淆配置的aar库
- 单例模式--设计模式1
- 关于Android补间动画中的属性值
- 如何强制删掉文件(特别提示文件不存在)
- python 读取二进制 显示图片
- Kodi ——6 Controls (13)6.13 Text Box
- 浅谈算法和数据结构: 九 平衡查找树之红黑树
- html——图文混排
- React Native 开发笔记