在Android Studio中,自带反编译查看class文件,若是没有混淆的话,class文件跟java文件基本没有区别了,为了保护,仍是混淆的好。java
网上看了很多资料,都是直接下载proguard额外jar,直接生成,以为不方便,既然apk都能混淆,为何不直接经过Android Studio来混淆jar包呢。app
作法其实很简单,一个build文件,一个proguard文件就能够了。gradle
首先要明白jar从哪里来,之前在Eclipse中是一个project设置为library,而后另一个主project依赖它。build一下,在library中就会生成jar文件了。ui
在Android Studio是module的概念,其实也至关于project。主app module依赖其它子module,在打包时,会将其它module打成aar,赋给主app。因此jar是针对整个module来make的。ip
若是module内仅仅是java代码,生成jar是没问题的,但若是还有resource文件,那就得打aar文件了。get
在你要打jar包的module build文件中,加上一个生成jar包的task。其实即便不添加,在整个工程build时也会生成jar文件的。在build/intermediates/bundles/release/classes.jar能够找到。只是没混淆罢了。it
task makeJar(type: proguard.gradle.ProGuardTask, dependsOn: "build") {
// 未混淆的jar
injars 'build/intermediates/bundles/release/classes.jar'
// 混淆后的jar路径
outjars 'build/http.jar'
// 具体须要keep住的类
configuration 'proguard-rules.pro'
}io
这个时候,在Termial中就输入./gradlew makeJar就能将classes.jar复制倒http.jar了。这个时候仍是没混淆的,由于混淆根本没写。编译
若是module中同时也依赖其它libs,那须要在proguard中声明那些libs。好比:#-libraryjars libs\gson-2.2.2.jar,大部分都跟apk混淆相似的,只不过是局限于某个module而已。class
附送一个proguard供你们参考,也是网上找的。最后混淆效果并非很好,只是简单的将部分变量改为了abcd这样,不过也够了。总不能将方法也混淆,这样外部调用就麻烦了。