[AIR接入Android 平台]打造登录付费ANE全教程

目前为止我为项目共接入了大概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端接口项目

详细教程和源码  更新时间 2013-5-12

第三步 打包处理多个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 .

说明:
D:\FB\Adobe Flash Builder 4.6\sdks\AIR3.5\bin\adt”   本机ADT路径
qlwx.p12 证书文件
1234 证书密码
com.feiliu.ane 生成的ANE文件名字
extension.xml 对接XML

*第六步 命令行打包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命令
a.p12”   证书文件
1234” 证书密码
xiaomi.apk” 要生成的最终APK名字
logInTest-app.xml ” AIR项目XML
logInTest.swf ”AIR项目SWF
MiGameCenterSDKService.apk” 打进APK去的APK
assets” 打进APK去的资源文件

最终 我所遇到的问题 和 解决方式(持续更新)

36 评论

  1. 看见RECK哥给我回复,莫名的有点感动,我还有一个问题,渠道太多,不好管理,每一个都有SDK,但是又不能相互关联,求给思路,我的想法是,每一个渠道都要新建立一个项目,去调用SDK,求RECK哥指教

  2. 如果是安卓项目,建议纯游戏逻辑和带有SDK的分开两个项目.这样就仅仅需要两个项目:A.游戏逻辑项目,只产出SWF供B项目加载显示,B.带有平台SDK的项目,根据不同的平台设置不同的启动类 不同的-app.xml 不同的ANE,甚至可以不同的图标,logo等.如果是IOS项目 除了主逻辑SWF需要打包进IPA之外 和安卓项目没区别.@91 ANE

  3. 嗯,谢谢,已经搞定了,当搞完移植以后,发现还有一个屏幕分辨率的问题,怎么能够自适应各个屏幕,想知道RECT哥是如何解决这类问题

  4. 大神,看到你这个文章,我突然觉得这个世界好温暖,我是新手。希望大神能够带我飞。

  5. 在buildAPK目录下编译的APK,反编译添加ACtivity后就是无法运行阿,还有SDK不用跟ANE打包到一起么,不然ANE的java代码怎么调用SDK的呢,这个地方是怎么做的呢,打包几个平台的ANE,真心跪给移动了,希望得到解答

  6. @Rect
    air的签名就是用那个p12的文件是吧,那个SDK的jar包到底用不用理阿,直接去bin目录拷jar包出来的话,就行了么;我之前打包都是把sdk的jar包跟自己的java代码合并成jar包的

  7. @Rect
    Thanks!!!你的回答总是那么及时,有空我把我的ANE也提到platforms上面去。

  8. @Rect
    我还有个问题打包ANE的时候我们并没有把SDK打包到ANE,怎么能调用到呢”cn.cmgame.billing.ui.GameOpenActivity”

  9. 详细请查看我写的系列文章中的合并jar:传送门 ,PS:我遇到的所有问题我都在我的博客上记录下来了,如果还有疑问请翻看关于ANE的文章@粒粒捷

  10. ok成功打包你的文档你应该在ARM-Android/libs/那里做个重点提示;

  11. jarsigner: 无法对 jar 进行签名: java.util.zip.ZipException: invalid entry comp
    ressed size (expected 4473 but got 4577 bytes)

    中国游戏基地计费,对apk进行签名时出现上面那个问题该如何解决阿

  12. jarsigner: 无法对 jar 进行签名: java.util.zip.ZipException: invalid entry comp
    ressed size (expected 4473 but got 4577 bytes)

    中国游戏基地计费,对apk进行签名时出现,是什么原因阿

  13. 我已经删除了META-INF文件,但是还是会有上面的错误;删除签名文件要注意什么呢

  14. 大神 报这错误怎么解决“An implementation for native extension ‘com.xiaomi.ane’ required by the application was not found for the target platform.”

    1. @gg, ‘com.xiaomi.ane 这个ANE没有你打包的平台拓展,
      在 项目右键-属性-Flex拓展 的地方 如果是打包APK就勾选android 如果是模拟器就去掉.

      1. @Rect, 大神我用的是IntelliJ IDEA 12.1.2 这个工具生成的swf 和xml 工具里找不到你所以的“Flex拓展 ” 怎么搞

        1. @gg, 我以前打包是用命令行…但是你这个报错应该是ANE没指定平台的拓展.

  15. 豌豆荚的ane里面似乎没有android的布局文件,最新版的SDK比你的这个旧版本多了好多东西,布局文件里面比如text标签后面直接写了字符串,编译APK不通过,请问你是怎么处理的布局文件?如果你能更新一下最新版的豌豆荚SDK就万分感激了

    1. @bing*, 最简单的方式,修改ADT.jar 把 -z命令去掉.这个参数的意思是:强制文字国际化检查,麻烦一点的方式..把xml中的所有text直接写的改为@string/xxxx

  16. 大神 我用的flashbuidler的airSDK是15.0的版本,怎么打包的时候extension.xml配置只有3.1才可以打包成功。我用的flashbuidler路径的adt啊 。

    1. 1.检查你的SDK是否配置正确,2.extension.xml不是3.1的时候 console输出什么?

发表评论

电子邮件地址不会被公开。 必填项已用*标注