开发环境: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中

GameMain-app.xml中

ExtensionContext.as中

一定要确保上面标注的ID要保持一致。如果不一致当然编译不会报错,但是你的ANE肯定是运行不起来了。

 

请务必确定在GameMain-app.xml中加入了权限和activity 的描述,一定要确保和SDK提供的保持一致,如果出错和漏填会导致程序的奔溃或者ANE没反应之类的问题。

 
下面是JAR文件的打包需要注意的事项:
上面标注的地方要注意,首先得是一个库文件,然后导入sdk的库。
 

编写好代码取bin目录下的*.jar,这里面的JAR文件最为干净。

 
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文的,中文版的缺少以下的描述

真的真的是说的太简单了,害的我尝试了好多次。下面是详细说明

AIR4.0开始ANE对安卓的R*机制提供了支持,从根本上解决了资源ID不正确,第三方包没法读取资源的问题。而且你不再需要对jar包进行手动的合并了:如下图
把你需要的所有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>中包名的快速的定位:

第三方库中/gen中可以很快看出这个R.java的位置。所以我的<packageName>中填写了com.alipay.android.app.sdk。

 
我们反编译一下apk可以发现设置了-platformoptions 后ADT会在我们定义的<packageName>下生成一个额外的R,这样我们的第三方库就可以得到资源了。
这是AIR的R

这是根据xml生成的额外的R

 

本篇就到这了~下篇介绍原生代码的调试。

ANE接入平台心得记录(安卓)的更多相关文章

  1. Mesos+Zookeeper+Marathon的Docker管理平台部署记录(2)- 负载均衡marathon-lb

    之前介绍了Mesos+Zookeeper+Marathon的Docker管理平台部署记录(1)的操作,多余的废话不说了,下面接着说下在该集群环境下的负载均衡marathon-lb的部署过程: 默认情况 ...

  2. mytest3.py-api接入平台获取数据

    mytest3.py-api接入平台获取数据 import base64 import datetime import hashlib import urllib import urllib.pars ...

  3. Mesos, Marathon, Docker 平台部署记录

    Mesos, Marathon, Docker 平台部署记录 所有组件部署基于Ubuntu 14.04 x64 主机 IP 角色 master 192.168.1.3 Mesos Master, Ma ...

  4. 桥接模式(Bridge、Implementor)(具体不同平台日志记录,抽象与实现分离)

    桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化.它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式 ...

  5. KubeSphere单节点(all-in-one)平台搭建记录

    KubeSphere单节点(all-in-one)平台搭建记录 目录 KubeSphere单节点(all-in-one)平台搭建记录 一.主机准备 1.1 主机配置 1.2 环境准备 二.下载kube ...

  6. OpenHarmony3.0如何轻松连接华为云IoT设备接入平台?

    摘要:本文主要介绍基于OpenHarmony 3.0版本来对接华为云IoT设备接入IoTDA,以小熊派BearPi-HM_Nano开发板为例,使用huaweicloud_iot_link SDK对接华 ...

  7. Android游戏之平台接入的一点记录

    最近手头有需要接入多个渠道的工作,我负责的是Android方面的接入,一般来说,渠道是非常多的,每一个渠道调用的接口都不一致,如果每一个渠道都要自己去弄回非常的耗时,所以网上会有一些接入的中间件提供商 ...

  8. Mesos+Zookeeper+Marathon的Docker管理平台部署记录(1)

    随着"互联网+"时代的业务增长.变化速度及大规模计算的需求,廉价的.高可扩展的分布式x86集群已成为标准解决方案,如Google已经在几千万台服务器上部署分布式系统.Docker及 ...

  9. Unity3d与iOS交互开发——接入平台SDK必备技能

    原地址:http://www.2cto.com/kf/201401/273337.html# 前言废话:开发手机游戏都知道,你要接入各种平台的SDK.那就需要Unity3d与iOS中Objective ...

随机推荐

  1. ie8不兼容rgba的解决

    借鉴................. 在调试ie8兼容性的问题时,发现ie8不支持rgba. 关于rgba(),即为颜色设置的方法函数,rgb代表颜色,a代表透明度. 如rgba(0,0,0,0.1 ...

  2. GDAL关于读写图像的简明总结

    读写影像可以说是图像处理最基础的一步.关于使用GDAL读写影像,平时也在网上查了很多资料,就想结合自己的使用心得,做做简单的总结. 在这里写一个例子:裁剪lena图像的某部分内容,将其放入到新创建的. ...

  3. 如何找回Oracle中system,sys用户的密码[转]

    Oracle中如果不知道system,sys用户的密码后可用如下方法找回: 首先以一个普通用户等入数据库: 在SQL*Plus中执行如下命令: SQL>connect/as sysdba (也可 ...

  4. xmpp整理笔记:用户网络连接及好友的管理

    xmpp中的用户连接模块包括用户的上线与下线信息展现,用户登录,用户的注册: 好友模块包括好友的添加,好友的删除,好友列表的展示. 在xmpp中 负责数据传输的类是xmppStream,开发的过程中, ...

  5. YYText-显示富文本

    github地址: https://github.com/ibireme/YYText CocoaPods安装: pod 'YYText' 1.YYLabel使用注意 private lazy var ...

  6. Android-Universal-Image-Loader 框架使用

    1.Android-Universal-Image-Loader   github下载地址    https://github.com/nostra13/Android-Universal-Image ...

  7. linux 系统权限 数字含义

    摘抄: sudo chmod XXX dir_name XXX是你要设置的权限代号,第一位代表Owner,第二位代表Group,第三位代表Others XXX中0代表什么都不可以,1代表可执行,2代表 ...

  8. iOS拨打电话的三种方式

    iOS拨打电话的三种方式 1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示 1 2 var string = "tel:" + "1 ...

  9. [读书笔记] CSS权威指南2: 结构和层叠

    层叠样式表中最基本的一个方面可能就是层叠——冲突的声明要通过这个层叠过程排序,并由此确定最终的文档表示.这个过程的核心是选择器及其相关声明的特殊性,以及继承机制. 特殊性 对于每个规则,用户代理会计算 ...

  10. iOS-工作经验+资料分享(长期更新)

    在此记录工作中的一些经验和技术资料 长期更新 欢迎各位业内朋友指正.交流技术上的问题 0.苹果开发联盟电话 4006 701855 1.轻易不用使用tableViewController,因为改变他自 ...