ANE接入平台心得记录(安卓)
开发环境:FlashBuilder4.7 AIR13.0 Eclipse
由于我懒得陪安卓的开发环境所以我下载了包含安卓SDK Manager的Eclipse,其实直接用FlashBuilder开发ANE也是可以的,由于后面需要进行调试,个人认为使用Eclipse和FlashBuilder协作调试还是较为方便的。
首先不得不说ANE的制作对于技术的要求远不如对打包流程的细心要求高,写这篇博客的时候我刚刚完成《百万手办王》项目接入TrueChina平台的ANE制作,耗时2天,基本上遇到了大大小小无数的坑,本篇文章主要记录的开发ANE过程中需要注意的事情和怎么利用Eclipse和FlashBuilder一起来调试安卓ANE原生代码。
由于Adobe的AIR13.0对ANE的打包进行了不错的优化,不需要手动的合并JAR文件,并且可以支持R*模式取得资源,这对ANE的开发者来说是个福音。
本文不介绍ANE的一些基础编程,这里备注一个Adobe的官方教程
http://www.adobe.com/cn/devnet/air/articles/ane-android-devices.html
上面的这个教程还是写的比较详细的,但是有些细节没有仔细说明,本文是对他的描述作补充。
下面是ANE打包可能出错的地方。
extension.xml中![ANE接入平台心得记录(安卓) - tmtbe - °无量](http://img2.ph.126.net/XvCu0RROE1G3hYmNWOnyCQ==/1317302891023943993.png)
![ANE接入平台心得记录(安卓) - tmtbe - °无量](http://img2.ph.126.net/XvCu0RROE1G3hYmNWOnyCQ==/1317302891023943993.png)
GameMain-app.xml中
![ANE接入平台心得记录(安卓) - tmtbe - °无量](http://img1.ph.126.net/dDCB22b_tJMEVj0waFpONQ==/41658296571344935.png)
![ANE接入平台心得记录(安卓) - tmtbe - °无量](http://img2.ph.126.net/W_IaFgFUOLUbcN-e_E1byQ==/6597824031635125247.png)
下面是JAR文件的打包需要注意的事项:
![ANE接入平台心得记录(安卓) - tmtbe - °无量](http://img0.ph.126.net/ywgdb4zdp6xaKhBELreaJQ==/3784994011928569821.png)
上面标注的地方要注意,首先得是一个库文件,然后导入sdk的库。
AS库所注意的问题,他得是个flex库(as库不知道行不行,反正flex库是一定可以的)确保勾选包含ADOBE AIR库!
下面是打包ANE所需要的准备
这里同样提供Adobe官方的文档
http://help.adobe.com/en_US/air/extensions/WSf268776665d7970d-2e74ffb4130044f3619-7ff8.html#WSA61FD03D-6F46-4ff9-A77A-9D47C47501F3
这是E文的,中文版的缺少以下的描述
![ANE接入平台心得记录(安卓) - tmtbe - °无量](http://img0.ph.126.net/o4WG2wLkIGyTE9l2rIoD1A==/3671841071290776987.png)
AIR4.0开始ANE对安卓的R*机制提供了支持,从根本上解决了资源ID不正确,第三方包没法读取资源的问题。而且你不再需要对jar包进行手动的合并了:如下图
![ANE接入平台心得记录(安卓) - tmtbe - °无量](http://img2.ph.126.net/1gzLr-Ij-HU2oZ1Z3_PRcQ==/6597310559704808351.png)
把你需要的所有jar除了FlashRuntimeExtensions.jar,(这个ANE打包过程中会自动添加)放在同一个文件夹中就可以了。
下面是我的打包命令
@echo off
::转到当前盘符
%~d0
::打开当前目录
cd %~dp0
set FLEX_SDK="D:\Program Files (x86)\FlashDevelop\Tools\flexsdk\bin\adt.bat"
%FLEX_SDK% -package -target ane com.tmtbe.truechina.ane extension.xml -swc TrueChinaANEAS.swc -platform Android-ARM -platformoptions platform-android.xml -C android . -platform default -C default .
可以从打包命令中发现多了一个叫 -platformoptions的参数和一个对应的platform-android.xml。下面详细介绍platform-android.xml的结构。先贴出一个范例
<platform xmlns="http://ns.adobe.com/air/extension/13.0">
<description>An optional description.</description>
<copyright>2011 (optional)</copyright>
<packagedDependencies>
<packagedDependency>alipay.jar</packagedDependency>
<packagedDependency>android-support-v4.jar</packagedDependency>
<packagedDependency>true_sdk_lib.jar</packagedDependency>
</packagedDependencies>
<packagedResources>
<packagedResource>
<packageName>com.alipay.android.app.sdk</packageName>
<folderName>true-res</folderName>
</packagedResource>
</packagedResources>
</platform>
<packagedDependencies>标签对应的是所有的依赖库,就是放置jar文件夹中除了充当AS和Java桥梁作用的我们自己写的那个JAR除外的所有的JAR。(这就是为什么你需要手动打包JAR的原因了)
<packagedResource>标签描述的是哪个包对应什么资源。这个很重要填写了这个就可以支持R*模式获取资源了。
<packageName>对应一个包名称,ADT会在这个包中生成一个额外的R.java。这样第三方包就可以通过R*获取资源了
<folderName>对应一个文件夹名称,(名称不限制可自定义)这个文件夹包含<packageName>这个包所需的所有资源。
<packageName>中包名的快速的定位:
![ANE接入平台心得记录(安卓) - tmtbe - °无量](http://img0.ph.126.net/qgRhiKURdsLm47vjv-S7XA==/828099381583179339.png)
我们反编译一下apk可以发现设置了-platformoptions 后ADT会在我们定义的<packageName>下生成一个额外的R,这样我们的第三方库就可以得到资源了。
这是AIR的R
![ANE接入平台心得记录(安卓) - tmtbe - °无量](http://img2.ph.126.net/yWe9QqwaQLuCVGYZ4iFPYw==/1257630196043393057.jpg)
![ANE接入平台心得记录(安卓) - tmtbe - °无量](http://img2.ph.126.net/pyHnTg51W3Agqy1uIAy8MQ==/6608269392097336007.jpg)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
2010-06-23 Adobe Flash gets its full launch on Android