目前为止我为项目共接入了大概8家或大或小的平台。深知AIR移动项目接入运营平台在打造ANE过程中会有各种各样的问题。在这里我打算把我遇到的问题 和解决方式记录下来,也许你用得着 也许你已经遇到过 也许你已经解决掉。接下来我会从我的air项目和各种android应用运营平台方的SDK接入过程 中 遇到的问题进行探讨。其中有些问题已经解决 有些问题解决得很差强人意,有些问题尚未解决。也请已经解决了这些问题的朋友 能和我交流。当然我对原生android开发刚刚入门 有一些看法或多或少存在错误。也请看到的朋友能Email我指出。(rectvv[at]gmail[dot]com)
首先关于最近大家都在群里讨论 AIR是生是死的问题,ASER是否转行的问题,我觉得应该把当下的事情做好,作为一个程序员不应该被一种语言 或者被一个公司束缚住,就像CODE COMPLETE里面说的一样。程序员应该是超越语言的。当然我目前还没到这水平。接下来进入正题。
在这之前 我之前写了一些关于ANE更早的一些文章:传送门
————————————————–
我的项目信息:
使用的跨平台技术:Adobe Air
使用的GPU加速框架(引擎?):Starling
使用的AIR SDK版本:3.5
(AIR3.5打包STARLING项目出来的的APK对于HTC的机器会有一个BUG,更新到AIR3.7之后 HTC的BUG解决了 但是对三星的一款机器又出一个新BUG 目前我还在寻找完美的解决方式 当前我的解决方式并不完美 详细的BUG描述会在后面统计的时候给出)
在接入的那么多平台中 在这里选择一个平台SDK看起来最繁琐 在打包ANE的时候 需要做的处理最多的 平台 做为例子。当然由于这个平台的SDK里面明确表示不允许 向他人 传播。所以我在后面的源码 与 附件中 会把 该平台的相关JAR 文档 等等去掉。但是如果你也接这个平台 那你可以完全拿过来套用。
接入的平台信息:
针对设备:android
需要打包入APK的资源有:res assets两种资源处理方式都有。(在之前我就写过一篇关于ANE如何处理资源的问题的文章)
平台方接入的第三方(对于游戏是第四方):微博授权登录 QQ授权登录
平台方需要加入的activity情况:这个平台需要加入的activity声明是最多的 在这个平台的 -app.xml也是最臃肿的,这会涉及到一个SDK activity 与 游戏activity 如何通信切换的问题。在之前就遇到过一个问题 把游戏主activity传给SDK的时候 执行完SDK操作 返回不了游戏activity 详细的解决方式 请看我前面的一篇文章。
平台方需要加入的JAR数量:6个(平台方的JAR最后全部都需要打包成一个JAR 才能生成ANE 这个问题的解决方式后面会给出)
——————————————————-
第一步 准备工作
1.在这之前需要先安装 JDK JRE 并且添加环境变量如图:(路径自己按照各自环境配置)
这两个工具 请自行下载
配置JAR 配置JDK:
例如我的路径:C:\Program Files\Java\jdk1.7.0_17\bin 加入 环境变量 系统变量
2.安装FB6 eclipse androidSDK 按照正常教程配置android开发环境 推荐下载androidSDK :2.2,2.3,4.0 我的项目全部统一使用android SDK2.3.3
这些编辑器 SDK IDE等全部自行下载。。>.<
3.一般平台SDK都会需要在assets加APK或者资源,这就需要命令行 编译 打包。所以建议在环境变量中加入 amxmlc
例如我的是在其中加入:D:\FB\Adobe Flash Builder 4.6\sdks\AIR3.5\bin 命名为amxmlc 这样就可以在CMD中直接使用命令行编译了,若想命令行打包 则也一样的 直接加入 ADT所在路径即可。(这并不是必须的 仅仅为了更好的使用命令行)
第二步 编写 JAVA端接口 与 AS端接口项目
第三步 打包处理多个JAR变成一个JAR提供给第五步
详细教程和源码 命令行解释2013-5-14
*第四步 处理RES资源文件 提供给第五步 和 ASSETS文件 (看平台SDK情况而定这步是否必须)
A.处理android文字国际化2013-5-17
B.处理访问不了资源ID 2013-6-3
第五步 命令行打包ANE
命令行打包ANE
一点说明:打包ANE有很多方式。我的方式比较普遍 把步骤分得太细。最初的时候也是为了了解全过程。其实zrong打包ANE的方式才是王道。举个例子 我打包飞流ANE的命令:
“D:\FB\Adobe Flash Builder 4.6\sdks\AIR3.5\bin\adt” -package -storetype PKCS12 -keystore qlwx.p12 -storepass 1234 -target ane com.feiliu.ane extension.xml -swc *.swc -platform Android-ARM -C Android-ARM . 说明: |
*第六步 命令行打包SDK关联的资源文件 APK文件 进入 AIR项目APK(看平台SDK情况而定这步是否必须)
打包APK命令解释
一点说明:同样我打包的方式步骤分得太细。打包APK用命令行 因为很多平台都会要求打APK进入我们的AIR APK中 举个例子小米平台的打包APK命令: “D:\FB\Adobe Flash Builder 4.6\sdks\AIR3.5\bin\adt” -package -target apk-captive-runtime -storetype pkcs12 -keystorea.p12 -storepass 1234 xiaomi.apk logInTest-app.xml logInTest.swf MiGameCenterSDKService.apk assets -extdir . 说明: “D:\FB\Adobe Flash Builder 4.6\sdks\AIR3.5\bin\adt” 你的本机ADT命令 |
最终 我所遇到的问题 和 解决方式(持续更新)
看见RECK哥给我回复,莫名的有点感动,我还有一个问题,渠道太多,不好管理,每一个都有SDK,但是又不能相互关联,求给思路,我的想法是,每一个渠道都要新建立一个项目,去调用SDK,求RECK哥指教
如果是安卓项目,建议纯游戏逻辑和带有SDK的分开两个项目.这样就仅仅需要两个项目:A.游戏逻辑项目,只产出SWF供B项目加载显示,B.带有平台SDK的项目,根据不同的平台设置不同的启动类 不同的-app.xml 不同的ANE,甚至可以不同的图标,logo等.如果是IOS项目 除了主逻辑SWF需要打包进IPA之外 和安卓项目没区别.@91 ANE
嗯,谢谢,已经搞定了,当搞完移植以后,发现还有一个屏幕分辨率的问题,怎么能够自适应各个屏幕,想知道RECT哥是如何解决这类问题
之前的文章有个小总结:http://www.shadowkong.com/archives/1243 @91 ANE
大爱
感谢分享~
大神,看到你这个文章,我突然觉得这个世界好温暖,我是新手。希望大神能够带我飞。
在buildAPK目录下编译的APK,反编译添加ACtivity后就是无法运行阿,还有SDK不用跟ANE打包到一起么,不然ANE的java代码怎么调用SDK的呢,这个地方是怎么做的呢,打包几个平台的ANE,真心跪给移动了,希望得到解答
反编译添加activity之后,还需要对apk进行签名,优化等。@粒粒捷
@Rect
如何进行签名阿
@Rect
air的签名就是用那个p12的文件是吧,那个SDK的jar包到底用不用理阿,直接去bin目录拷jar包出来的话,就行了么;我之前打包都是把sdk的jar包跟自己的java代码合并成jar包的
APK反编译,修改,签名命令解析:https://gist.github.com/recter/8051740@粒粒捷
@Rect
Thanks!!!你的回答总是那么及时,有空我把我的ANE也提到platforms上面去。
@Rect
我还有个问题打包ANE的时候我们并没有把SDK打包到ANE,怎么能调用到呢”cn.cmgame.billing.ui.GameOpenActivity”
详细请查看我写的系列文章中的合并jar:传送门 ,PS:我遇到的所有问题我都在我的博客上记录下来了,如果还有疑问请翻看关于ANE的文章@粒粒捷
@Rect
那你做这个的时候有没有用到合并jar包
@粒粒捷
中国游戏基地的那个付费你有用到的合并jar包吗
ok成功打包你的文档你应该在ARM-Android/libs/那里做个重点提示;
仔细翻我的博客,我在很多个地方有指出的..@粒粒捷
jarsigner: 无法对 jar 进行签名: java.util.zip.ZipException: invalid entry comp
ressed size (expected 4473 but got 4577 bytes)
中国游戏基地计费,对apk进行签名时出现上面那个问题该如何解决阿
jarsigner: 无法对 jar 进行签名: java.util.zip.ZipException: invalid entry comp
ressed size (expected 4473 but got 4577 bytes)
现
中国游戏基地计费,对apk进行签名时出现,是什么原因阿
这个错误在于解压APK的时候没完全删除原签名文件.请删除整个签名文件夹@粒粒捷
我已经删除了META-INF文件,但是还是会有上面的错误;删除签名文件要注意什么呢
那就是签名命令错了,注意密匙签名规范.例如:https://gist.github.com/recter/8051740@粒粒捷
大神 报这错误怎么解决“An implementation for native extension ‘com.xiaomi.ane’ required by the application was not found for the target platform.”
@gg, ‘com.xiaomi.ane 这个ANE没有你打包的平台拓展,
在 项目右键-属性-Flex拓展 的地方 如果是打包APK就勾选android 如果是模拟器就去掉.
@Rect, 大神我用的是IntelliJ IDEA 12.1.2 这个工具生成的swf 和xml 工具里找不到你所以的“Flex拓展 ” 怎么搞
@Rect, 大神 你开发用的是什么工具
@gg, 我以前打包是用命令行…但是你这个报错应该是ANE没指定平台的拓展.
@Rect, 大神我的QQ 是394579050 求大神加我
@gg, 大神 你加我QQ好吗 394579050 拜托了
豌豆荚的ane里面似乎没有android的布局文件,最新版的SDK比你的这个旧版本多了好多东西,布局文件里面比如text标签后面直接写了字符串,编译APK不通过,请问你是怎么处理的布局文件?如果你能更新一下最新版的豌豆荚SDK就万分感激了
@bing*, 最简单的方式,修改ADT.jar 把 -z命令去掉.这个参数的意思是:强制文字国际化检查,麻烦一点的方式..把xml中的所有text直接写的改为@string/xxxx
大神 我用的flashbuidler的airSDK是15.0的版本,怎么打包的时候extension.xml配置只有3.1才可以打包成功。我用的flashbuidler路径的adt啊 。
1.检查你的SDK是否配置正确,2.extension.xml不是3.1的时候 console输出什么?