目前我打包的这个android工程是一个纯java工程,也就是没有使用到任何资源文件及组件类。所以打包的话还是相对简单的。
刚开始,我把这个工程当做一个library引用到主工程中,编译过后,在该工程的bin目录下面,就自动生成了一个jar包。正常情况下可以直接使用这个jar包。
但是目前,我们的library工程中还引用了assets/目录下的文件,而自动生成了这个jar包并没有包含这个assets目录下的文件,导致在使用这个jar包的过程中出错了,提示找不到资源文件。
于是只能按照从eclipse中导出jar包的方法来进行了。
导出方法参照:
http://blog.csdn.net/liranke/article/details/16112471
http://blog.csdn.net/liranke/article/details/16980449
需要注意的,我们使用了什么资源或src类,就勾选,其他的就不用勾选了。由于我这里只使用了src目录下的类和assets目录下的文件,所以只勾选这两个目录就行。
接下来就是一直next了。
最终导出的jar包,在jd-gui工具查看是这样的:
说明资源文件已经加入到jar包中了,在主工程中引用也是没问题的。
最后一步,需要把该jar包混淆一下。
关于混淆,主要是使用proguardgui这个工具,然后就是配置混淆的文件的内容了。
http://blog.csdn.net/vurtne_ye/article/details/35599491
一般,我的混淆配置文件都是手动修改,然后导入到proguardgui中,一路next,然后就能编译出混淆后的jar包。
目前混淆后的jar包,在jd-gui中查看不了。
混淆配置文件和一般在android工程中的混淆文件没多大区别,主要是声明一些不用被混淆的类。
由于我的jar包要提供给主工程用,所以对外的调用接口或类就不能被混淆了。否则,主工程如何知道用什么类来调用呢!
#---------------------导入需要打包的jar------------
-injars 'D:\proguard5.2.1\work\pinyin2.jar'
#---------------------指定混淆之后生成的jar------------
-outjars 'D:\proguard5.2.1\work\pinyin2-out.jar'
#---------------------引入依赖的jar------------
#-libraryjars 目前没有
#----------这里可以添加开发者项目中用到的其他依赖包--------------
# Also keep - Enumerations. Keep the special static methods that are required in
# enumeration classes.
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
# Also keep - Swing UI L&F. Keep all extensions of javax.swing.plaf.ComponentUI,
# along with the special 'createUI' method.
# Keep names - Native method names. Keep all native class/method names.
-keepclasseswithmembers,allowshrinking class * {
native <methods>;
}
#------------------Android基本混淆设置---------------
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
#-keeppackagenames
-dontshrink
-verbose
-dontwarn
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
#---------------------自定义混淆设置------------
-keep class com.android.hanyupinyin.PinyinHelper{*;}
最后声明的这个不被混淆的类是我在主工程中将要使用的类(也就是入口类)。其他类都被混淆编译了。