这篇文章是对前面系列文章的补充。传送门
也是我最近遇到的几个小问题。称不上有什么技术难点。但是很值得推敲。
A.合并Jar。对于混淆比较严重的jar源码包来说,例如银联的。
会出现类似一下的源码文件。这种文件若解压出来 在一些系统(例如WIN系)的会删掉掉一个。
因为在Win系的系统里面文件名不分大小写。遇到这种包的合并若不小心打包ANE后就会报ClassNoFound错误。
解决方式:
以此混淆包为主包。把ANE接口包合并到此包中。这样就不需要解压这个混淆包了。
B..若库引用了so文件,若不止一个so文件 若so文件还分文件夹。
1.若引用了so文件(我们假如全部都在同一个文件夹)
则把so文件放到 android-ARM/libs下 便可
2.若so文件还分文件夹。例如新版360SDK的引用了:
armeabi/libpaypalm_app_plugin_jar_360game.so
mips/libpaypalm_app_plugin_jar_360game.so
两个不同文件夹的同名so文件。这个时候的解决方式就是:
把armeabi文件夹的so文件放到android-ARM/libs下 同ANE一起打包
把mips(如果有 其他文件夹一并这种做法)文件夹的so连同文件夹 在打包好AIR项目APK之后使用apktool
反编译-放入mips到libs-编译-签名-优化-发布。
至此解决这两个小问题。
没错今天又有东西需要补充了,其实是一个不一定会出现的问题.之前有犹豫写不写出来,但是随着接触的android SDK越多 发现其实这个问题还是蛮普遍的.
我觉得是需要差别对待.这个jar包含了android基础的几个包:
本来AIR打包APK是会自动把AIRSDK自带的这个库引入的.但是问题在于不同的 平台SDK开发的android SDK版本都不尽相同.
所以导致了会不兼容.这个时候我们就需要将我们eclipse ANE 的java项目中的这个库一起合计到一个jar里面.
其实很简单,当你把ANE引入AIR项目打包APK运行报错的时候 如果log 报的第一个错误是和这个库的类有关,那多半就需要合并这个原生库jar了.
但是,合计这个库类必然会替换掉adobe air sdk 本身的原生库类,有的时候在32位的机器上(XP or 32 bit win7)会引发内存不足的错误.
其实有办法,在我解密ADT的文章中,详细介绍了java工具的命令使用,调用java 打包APK是可以事先定义内存限制的.这个不宜说太多 只说具体解决方法.
我们知道ADT中读取JAVA内存选项的代码如下:
| 欢迎光临 守望者--AIR技术交流 (http://www.airmyth.com/) |