守望者--AIR技术交流

标题: 特别篇-合并jar和调用.so文件的特别补充 [打印本页]

作者: 破晓    时间: 2015-1-19 11:21
标题: 特别篇-合并jar和调用.so文件的特别补充

这篇文章是对前面系列文章的补充。传送门

也是我最近遇到的几个小问题。称不上有什么技术难点。但是很值得推敲。

A.合并Jar。对于混淆比较严重的jar源码包来说,例如银联的。

会出现类似一下的源码文件。这种文件若解压出来 在一些系统(例如WIN系)的会删掉掉一个。

因为在Win系的系统里面文件名不分大小写。遇到这种包的合并若不小心打包ANE后就会报ClassNoFound错误。

[attach]451[/attach]

解决方式:

以此混淆包为主包。把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-编译-签名-优化-发布。

至此解决这两个小问题。



本文来自:http://shadowkong.com/archives/1234

作者: 破晓    时间: 2015-1-19 11:22
关于合计jar的补充第二弹

没错今天又有东西需要补充了,其实是一个不一定会出现的问题.之前有犹豫写不写出来,但是随着接触的android SDK越多 发现其实这个问题还是蛮普遍的.

我觉得是需要差别对待.这个jar包含了android基础的几个包:

[attach]452[/attach]


本来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内存选项的代码如下:


  1. for (String vmArg : ManagementFactory.getRuntimeMXBean().getInputArguments())
  2. {
  3.       if ((vmArg.startsWith("-Xms")) || (vmArg.startsWith("-Xmx")))
  4.      {
  5.       dexCommand.add(vmArg);
  6.       }
  7. }
复制代码
换言之,就是在调用的时候输入内存限制,怎么做了?很简单.修改sdks\AIR3.5\bin文件夹下的 adt.bat(mac 则是 adt)
  1. //未修改之前
  2. //@java -jar "%~dp0\..\lib\adt.jar" %*
  3. //修改之后
  4. //@java -Xmx512M -jar "%~dp0\..\lib\adt.jar" %*
复制代码








欢迎光临 守望者--AIR技术交流 (http://www.airmyth.com/)