Andoid 关于Jar包的生成及调用详解

Android制作jar包:

Eclipse 新建android工程,然后右击,点击导出,选择导出类型为Java下的JAR file,在Java file specification 中不要选择androidmanifest.xml和res文件夹,就可以了。否则在调用jar包的时候会出现“Error generating final archive: Found duplicate file for APK: AndroidManifes”这个错误。

在Android Studio中,自带反编译查看class文件,如果没有混淆的话,class文件跟java文件基本没有区别了,为了保护,还是混淆的好。

网上看了不少资料,都是直接下载proguard额外jar,直接生成,觉得不方便,既然apk都能混淆,为什么不直接通过Android Studio来混淆jar包呢。

做法其实很简单,一个build文件,一个proguard文件就可以了。

首先要明白jar从哪里来,以前在Eclipse中是一个project设置为library,然后另外一个主project依赖它。build一下,在library中就会生成jar文件了。

在Android Studio是module的概念,其实也相当于project。主app module依赖其它子module,在打包时,会将其它module打成aar,赋给主app。所以jar是针对整个module来make的。

如果module内仅仅是java代码,生成jar是没问题的,但如果还有resource文件,那就得打aar文件了。

在你要打jar包的module build文件中,加上一个生成jar包的task。其实即使不添加,在整个工程build时也会生成jar文件的。在build/intermediates/bundles/release/classes.jar可以找到。只是没混淆罢了。

代码语言:javascript
复制
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’ 
 }

这个时候,在Termial中就输入./gradlew makeJar就能将classes.jar复制倒http.jar了。这个时候还是没混淆的,因为混淆根本没写。

如果module中同时也依赖其它libs,那需要在proguard中声明那些libs。比如:#-libraryjars libs\gson-2.2.2.jar,大部分都跟apk混淆类似的,只不过是局限于某个module而已。

一点福利。: 矢量图网站 http://www.iconfont.cn/plus/home/index

比较好用的图片处理 fresco https://www.fresco-cn.org/