开发环境: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. 如何用JavaScript探测CSS动画是否已经完成

    不啰嗦上代码: WN:(function(){ var el = $('<fakeelement>'), transition="transition", transi ...

  2. iOS 3DES加密解密(一行代码搞定)

    3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称.它相当于是对每个数据块应用三次DES加密算法.由于计 ...

  3. word第一讲(0723)

    工作区导航 F6键:从程序窗口中的一个任务窗格移动到另一个任务窗格.(在菜单栏.工作区.状态栏切换) alt键选中选项卡.左右键切换选项卡.下光标切换到选项卡里具体内容. 设置版面 页面布局-> ...

  4. Android Handler机制(一)---Message源码分析

    Message: 定义: public final class Message implements Parcelable Message类是个final类,就是说不能被继承,同时Message类实现 ...

  5. 【C语言】C语言常量和变量

    目录: [常量]   · 定义   · 分类   · 特殊字符型常量 [变量]   · 定义   · 定义变量   · 变量的使用   · 变量使用注意   · 变量常见问题 1.常量 · 定义 常量 ...

  6. MVC的优点及不足之处

    1. MVC的优点 (1) 可以为一个模型在运行时同时建立和使用多个视图.变化-传播机制可以确保所有相关的视图及时得到模型数据变化,从而使所有关联的视图和控制器做到行为同步. (2) 视图与控制器的可 ...

  7. iOS 边框显示不完全

    设置边框为1以上就可以了,如果不觉得宽的话!

  8. iOS学习路线

    这个学习路线必须发布到首页候选区.这个学习路线必须发布到首页候选区.这个学习路线必须发布到首页候选区.这个学习路线必须发布到首页候选区.这个学习路线必须发布到首页候选区.这个学习路线必须发布到首页候选 ...

  9. android 转化json日期

    /Date(1448356081207)/ public static String changeDate(String time){ String newStr = time.substring(t ...

  10. 学习 HTML5-页面结构(1)

    缘起 2014年10月29日,万维网联盟宣布,经过几乎8年的艰辛努力,HTML5标准规范终于最终制定完成了,并已公开发布. 而HTML5的草稿版本在13年就已经放出.作为一个有追求的程序猿这次想赶一次 ...