在android studio中可以将java library中的java 代码编译成jar包,注意,这里首要的前提一定是java library.
java library的创建过程 File -> New -> New Module...
新建的library起名字这里叫做lib,在下面创建一个类YourManager
然后我们写一点内容到YourManager,写好之后, 我们打开gradle 窗口
在lib module下面有一个task的名称叫做jar,我们双击这个jar文件就可以将java library中的java源码打成jar包,将浏览方式切换成project,在build的目录中, 就可以发现我们生成的lib.jar文件,如果是好奇jar中的内容,可以将jar文件拷贝出来,扩展名改为zip,因为jar本质上也是zip来的,来查看里面的内容。当然,jar文件也是可以直接查看目录结构和内容的
显然此时的jar包尚未混淆,去看看其中的class就知道了。那么如何混淆呢。我们先创建一个proguard文件,这里起名字就叫做proguard.txt, 这个文件是要放在lib模块下的,其中我们先写一条最简单的,这条语句翻译过来就是,第一,java sdk文件的位置,它是libraryjars的, 就是我们要用到java sdk的,但是打包时候不要把它也打进去,它只是一个library。第二, 不要混淆公开类的公开方法和受保护的方法。对于proguard想了解更多,请参考 https://www.guardsquare.com/en/proguard/manual/examples
#proguard.txt
-libraryjars <java.home>/lib/rt.jar
-keep public class * {
public protected *;
}
接着我们在lib下的build.gradle文件中配置一个混淆的task,重点是task myproguard。这一番操作后, 原来的lib.jar会进行混淆,进而在同一个目录下生成一个新的jar包,这里起名字叫libProguard。其他代码都是创建lib模块时自动生成的。
apply plugin: 'java'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
task myproguard(type: proguard.gradle.ProGuardTask) {
configuration 'proguard.txt'
injars 'build/libs/lib.jar’
outjars 'build/libs/libProguard.jar'}
sourceCompatibility = “1.7"
targetCompatibility = “1.7”
当我们在gradle的task中寻找myproguard,双击该task,就会生成混淆过的的libProguard.jar文件。打开看看就知道是混淆过的。注意啊,源码中一定要写一些private之类的方法才能被混淆,因为public和protected被我们之前的proguard给keep住了。
![](http://upload-images.jianshu.io/upload_images/4742944-a8b3ca6886ab16f0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
到此完成,参考文档
[1]. https://stackoverflow.com/questions/21712714/how-to-make-a-jar-out-from-an-android-studio-project/21713954#21713954
[2]. https://github.com/loopj/proguard-gradle-example