守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 1276|回复: 1

[Android] 特别篇-合并jar和调用.so文件的特别补充

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    51788
    钢镚
    1422

    开源英雄守望者

    发表于 2015-1-19 11:21:42 | 显示全部楼层 |阅读模式

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

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

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

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

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

    [/url]

    解决方式:

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

    至此解决这两个小问题。



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

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    51788
    钢镚
    1422

    开源英雄守望者

     楼主| 发表于 2015-1-19 11:22:48 | 显示全部楼层
    关于合计jar的补充第二弹
    • 首先之前写的一个比较粗糙的ANE教程:传送
    • 然后后面一个对于jar合计的补充:传送

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

    • 那就是android项目引入的原生类android-support-v4.jar该不该合并到一起?

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

    [/url]


    本来AIR打包APK是会自动把AIRSDK自带的这个库引入的.但是问题在于不同的 平台SDK开发的android SDK版本都不尽相同.

    所以导致了会不兼容.这个时候我们就需要将我们eclipse ANE 的java项目中的这个库一起合计到一个jar里面.

    • 那我怎么知道兼容不兼容呢?

    其实很简单,当你把ANE引入AIR项目打包APK运行报错的时候 如果log 报的第一个错误是和这个库的类有关,那多半就需要合并这个原生库jar了.

    但是,合计这个库类必然会替换掉adobe air sdk 本身的原生库类,有的时候在32位的机器上(XP or 32 bit win7)会引发内存不足的错误.

    • 打包APK报java内存不足怎么办?

    其实有办法,在我[url=http://shadowkong.com/anti-adt]解密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" %*
    复制代码



    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    守望者AIR技术交流社区(www.airmyth.com)
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    
    关闭

    站长推荐上一条 /4 下一条

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2019-11-18 22:37 , Processed in 0.070776 second(s), 31 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

    快速回复 返回顶部 返回列表