(最后附Fat jar介绍)
环境:Win7 64bit+Eclipse
将工程资源文件进行插件化打包时,遇到问题点:
1、export->JAR file无法编译libs中的jar文件到dex文件;
2、export->Fat jar打包的资源文件无法通过AssetManager进行访问;
3、以上两种方式均可进行选择性打包,apk打包无法过滤文件
解决方案:
一、针对问题1,可通过问题2中的fat jar解决,但是fat jar本身具有缺点。比较三种打包方式如下:
1、export->JAR file可以进行普通资源文件打包,适合静态jar插件,可以进行选择性打包,无法编译libs、res和manifest文件;
2、export->Fat jar适合动态jar插件,可将libs中jar一同进行编译,可以进行选择性打包,但无法编译res和manifest文件
3、apk适合动态插件调用,不仅把libs中jar进行编译,res和manifest资源文件也进行了编译,但是无法进行选择性打包。
二、针对问题3,可以通过结合fat jar和apk两种方式,优劣互补,完善插件化打包流程,可以进行java代码选择性打包。
apk文件结构如下:
其中apk的classes.dex是全部java代码(包括libs和外部library包)的编译后文件。
fat jar打包后并通过dx编译后文件结果如下:
其中fat jar的classes.dex是过滤com.letv.ads.plug.view包后的java代码(包括libs和外部library包)编译后文件,如果将res文件一起导入时没有apk中resources.arsc文件的,classes.dex与apk的classes.dex是一样的。
所以可以将apk中的classes.dex用fat jar编译的进行替换。
测试后可用!
介绍Fat jar:
fat jar可以将其他jar文件进行编译打包。
fat-jar它是sourceforge.net下的一个开源工具从http://sourceforge.net/projects/fjep地址可以下载该工具,下载完成后是一个zip压缩包,解压后将plugins文件夹下的net.sf.fjep.fatjar_0.0.31复制到Eclipse的plugins目录下,然后重启Eclipse。
可以在Preferences中看到Fat Jar Preferences菜单选项。
可以通过Export->Other->Fat Jar进行打包
可以选择需要的文件进行打包,也可以导入其他工程的jar和资源文件