PS:最近由于工作原因,需要把现有的Android+IOS工程转成flash air可用的工程,简单来说就是把ios+android 转换成ane

欢迎各种转载,转载请注明出处

微信:coderbook  

gitHub:https://github.com/coderbook

blog:http://www.coderbook.net

开发环境:

  1、操作系统:Windows/MacOX/Linux 本文以MacOX10.9为例

  2、开发环境(IDE):Xcode6.1+FlashBuilder4.6

  3、SDK:IOS8.0以上,AdobeAirSDK16+

一、概述

  1)AdobeAirSDK安装

  2)使用FlashBuilder创建actionscript library项目(以TalkingData Adtracking项目为例)

  3)利用xcode创建actionscript调用ios代码的中间项目

  4)创建actionscript调用android代码的中间工程

  5)导出各项目,放在相应的目录中,并编写相应配置文件

  6)使用airsdk命令编译生成*.ane项目

  7)创建使用调用ane代码的demo

  8)编译android版本生成apk

  9)创建ios版本生成ipa

二、AdobeAirSDK安装

  1)下载之后开始安装,在mac ox的安装路径如下:~/AIRSDK_Compiler

  2)配置环境变量。vim ~/.bash_profile 添加如下内容:export PATH=$PATH:/Users/vernon/AIRSDK_Compiler/bin

  3)退出保存。

  4)打开Command(命令行工具),运行adt -version查看是否配置正确。

  

  5)安装完成

  6)QA

三、使用FlashBuilder创建actionscript library项目

  1)下载和安装FlashBuilder(我的版本是4.6)

  2)下载TalkingData SDK Tdtracking版本。ios版本 android版本

  3)打开FlashBuiler创建ActionScript library项目,packagename命名为com.talkingdata.sdk

    3.1 打开TalkingDataAdtracking SDK 查看可以使用的接口,以下方法都是我们要封装的接口

    

    3.2 创建TalkingDataAdTracking类。添加引用 import flash.external.ExtensionContext (actionScript就是通过这个类来实现与ios和android代码进行通信的)并且创建 extContext=ExtensionContext.createExtensionContext("com.talkingdata.sdk",null);

    

    

    

    3.3 对于extContext.call(functionName,TalkingDataAneFunction.AdTracking_init,...);方法的说明:extContext.call方法第一个参数是方法名,这里咱们之前定义的  

//函数名称,以后的调用都是过这个方法名来传递的
public static const functionName:String="TalkingDataFunctions";

    第二个参数用来标识,调用的是TalkingDataAdtracking的哪个方法,如上面init方法里的AdTracking_init方法;

    剩下的参数是调用TalkingData Adtracking SDK 所需要的参数。

    3.4 剩下的方法实现,可以参数源码 gitHub

四、利用xcode创建actionscript调用ios代码的中间项目

  1)从官网下载FlashRuntimeExtensions.h(也可以从我的github地址下载)文件,这是一个C写的与actionscript交互的代码

  2)创建一个名称为TalkingDataSDKIOSLib的ios library项目,并且添加对FlashRuntimeExtensions.h和TalkingData SDK的引用

  如图:

    

  3)创建名称为TalkingDataSDKIOSLib.h和TalkingDataSDKIOSLib.m的调用类,如上图所示。

  4)添加引用并且定义与actionscript中相同值的方法类型(int类型)

    

  5)添加Initializer和Finalizer方法(参数是固定格式)

void TalkingDataSDKContextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx, uint32_t* numFunctionsToTest, const FRENamedFunction** functionsToSet){*numFunctionsToTest=1;FRENamedFunction *func=(FRENamedFunction*)malloc(sizeof(FRENamedFunction) * 1);func[0].name=(const uint8_t*)"TalkingDataFunctions";func[0].functionData=NULL;func[0].function=&TalkingDataSDKFunctions;*functionsToSet=func;}void TalkingDataSDKContextFinalizer(FREContext ctx){}void TalkingDataSDKExtensionInitializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet, FREContextFinalizer* ctxFinalizerToSet){extDataToSet=NULL;*ctxInitializerToSet=&TalkingDataSDKContextInitializer;*ctxFinalizerToSet=&TalkingDataSDKContextFinalizer;
}

  6)如上面代码所示,最终的调用函数都指向了TalkingDataSDKFunctions这个方法(也是固定参数),所以添加方法

FREObject TalkingDataSDKFunctions(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]){...
}

  7)

 五、创建actionscript调用android代码的中间工程

  1)用FlashBuilder(用eclipse或者android studio都可以)创建名称为TalkingDataSDKJava项目,并且添加package:com.talkingdata.sdk.flashair。

  2)添加需要使用jar包

    2.1 添加talkingdata sdk和FlashRuntimeExtensions.jar(adobe 封装的jar包)的引用。

    2.2 添加android的依赖包(/Users/vernon/android-sdk-macosx/platforms/android-18/andorid.jar)(eclipse或者android studio 不需要添加这步)

  3)创建TalkingDataFunctions 继承FREFunction用来处理所有从actionscript传过来的方法。

public class TalkingDataFunctions implements FREFunction {TalkingDataSDKContext exContext=null;public TalkingDataFunctions(TalkingDataSDKContext exContext){this.exContext=exContext;}private String Tag="TalkingDataFunctions";@Overridepublic FREObject call(FREContext arg0, FREObject[] arg1) {FREObject obj=null;..........return obj;}
}        

  4)创建TalkingDataSDKContext类继承FREContext

public class TalkingDataSDKContext extends FREContext{@Overridepublic Map<String, FREFunction> getFunctions() {Map<String, FREFunction> functionMap = new HashMap<String, FREFunction>();functionMap.put("TalkingDataFunctions",new TalkingDataFunctions(this));return functionMap;}@Overridepublic void dispose() {}
}

  5)创建TalkingDataSDKExtension继承FREExtension类,并实现createContext方法:

@Overridepublic FREContext createContext(String arg0) {TalkingDataSDKContext talkingDataContext = new TalkingDataSDKContext();return talkingDataContext;}

  6)具体调用TalkingData SDK的方法可以参考TalkingDataFunctions类的方式。

六、导出各项目,放在相应的目录中,并编写相应配置文件 

  1)创建名为TalkingDataSDKbuild的文件夹,用来存放所有需要的文件,并且在该文件夹中分别创建名为Android-ARM、iPhone-ARM、default三个文件夹。

  2)导出并生成必须的文件

    2.1 以jar包的形式导出“第五步”中创建的代码。名字为:anejava.jar 。

    2.2 利用jar命令把刚刚导出的talkingdataanejava.jar和talkingdata Adtracking sdk的jar合并成为一个jar,即talkingdataane.jar。{

       mkdir tmp

       cd tmp

       jar -xvf  ../anejava.jar

       jar -xvf  ../talkingdata-sdk-xxx.jar

       jar -cvf  talkingdataane.jar .

      }

    2.3 导出在“第四步”中生成的.a库(xcode:先选择设备类型为IOS Device 然后再 command+B)在Products文件夹下libTalkingDataSDKIOSLib.a

    2.4 导出在“第三步”中生成的actionscript的库。在bin目录下的TalkingDataSDKAS.swc

   3)把相关的库放到对应的目录下面

    3.1 把talkingdataane.jar放在Android-ARM下面

    3.2 把libTalkingDataSDKIOSLib.a放在iPhone-ARM下面

    3.3 把TalingDataSDKAS.swc 放在TalkingDataSDKbuild文件夹下面。并且复制一份TalingDataSDKAS副本.swc把它修改成.zip,然后解压。

      打开解压后台的文件,把名字为library.swf的文件分别copy到Android-ARM、iPhone-ARM、default下面各一份。

      然后删除TalingDataSDKAS副本.zip和TalingDataSDKAS副本文件夹

   4)创建其它必要文件

    4.1 生成*.p12文件用于给ane签名

    4.2 创建extension.xml

<extension xmlns="http://ns.adobe.com/air/extension/16.0">
<!-- 这里与三-3.2中的字符串相同 --><id>com.talkingdata.sdk</id><versionNumber>1.0.0</versionNumber><platforms>
<!--   Android-ARM  相对android的文件夹--><platform name="Android-ARM"><applicationDeployment><nativeLibrary>talkingdataane.jar</nativeLibrary><!-- 这里是之前在android库中创建的类名 --><initializer>com.talkingdata.sdk.flashair.TalkingDataSDKExtension</initializer><finalizer>com.talkingdata.sdk.flashair.TalkingDataSDKExtension</finalizer></applicationDeployment></platform><platform name="iPhone-ARM"><applicationDeployment><nativeLibrary>libTalkingDataSDKIOSLib.a</nativeLibrary><!-- 对ios库中TalkingDataSDKIOSLib里方式的名称 --><initializer>TalkingDataSDKExtensionInitializer</initializer>        <finalizer>TalkingDataSDKContextFinalizer</finalizer>      </applicationDeployment>
    </platform><platform name="default"><applicationDeployment/></platform></platforms>
</extension>

    4.3 在iPhone-ARM下创建platform.xml的文件

<platform xmlns="http://ns.adobe.com/air/extension/16.0"><sdkVersion>8.0</sdkVersion><linkerOptions><option>-w</option><option>-ios_version_min 5.1.1</option>        <option>-framework AdSupport</option><option>-framework Security</option>        <option>-framework CoreTelephony</option><option>-lz</option></linkerOptions>
</platform>

七、打开命令行,进入到TalkingDataSDKbuild目录下 执行:

  adt -package -storetype pkcs12 -keystore a.p12 -storepass wangying -target ane com.talkingdata.adtracking.ane extension.xml -swc TalkingDataSDKAS.swc -platform Android-ARM -C Android-ARM . -platform iPhone-ARM -C iPhone-ARM . -platform default -C default .

  生成com.talkingdata.adtracking.ane。到这里,其实,编写工作已经完成。

八、创建使用调用ane代码的demo

  1)创建名TalkingDataSDKDemo的Flex mobile项目。

  2)引用我们刚刚创建好的com.talkingdata.adtracking.ane库。

 

  3)以生成的为ViewNavigatorApplication类型的application结构来说。打开TalkingDataSDKDemo.mxml。在application_completeHandler方法中进行初始化:

  

  4)在TalkingDataSDKDemoHomeView.mxml页面添加添加一个按钮事件,调用onCreateRole方法,如下:

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" title="HomeView"><fx:Script><![CDATA[import com.talkingdata.sdk.TalkingDataAdTracking;protected function oncreateButton_click(event:MouseEvent):void{TalkingDataAdTracking.onCreateRole("rolename_td");}]]></fx:Script><fx:Declarations><!-- Place non-visual elements (e.g., services, value objects) here --></fx:Declarations><s:Button x="122" y="87" label="Createrole" click="oncreateButton_click(event)"/>
</s:View>

  5)编辑TalkingDataSDKDemo-app.xml文件添加android必须的权限,并且修改TalkingDataSDKDemo-app.xml下面的命名空间为16.0

<android><colorDepth>16bit</colorDepth><manifestAdditions><![CDATA[<manifest android:installLocation="auto"><!--See the Adobe AIR documentation for more information about setting Google Android permissions--><!--Removing the permission android.permission.INTERNET will have the side effectof preventing you from debugging your application on your device--><uses-permission android:name="android.permission.INTERNET"/><!--<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>--><!--<uses-permission android:name="android.permission.READ_PHONE_STATE"/>--><!--<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>--><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/></manifest>]]></manifestAdditions></android>

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<application xmlns="http://ns.adobe.com/air/application/16.0">
.....
</application>

  6)保存,并且拷贝bin目录下面*.xml和*.swf到TalkingDataSDKbuild目录下面

  7)运行如下脚本(或者使用flashbuilder导出)生成android可运行的apk

adt -package -target apk -storetype PKCS12 -keystore a.p12 -storepass wangying talkingdata-android-adtracking.apk TalkingDataSDKDemo-app.xml TalkingDataSDKDemo.swf -extdir .

  8)编译ios版本

    8.1 修改TalkingDataSDKDemo-app.xml的<iPhone></iPhone>部分,添加bundleId

<iPhone><InfoAdditions><![CDATA[<key>com.talkingdata.sdk.aneDemo</key><array><string>1</string><string>2</string></array>]]></InfoAdditions><requestedDisplayResolution>high</requestedDisplayResolution></iPhone>

    8.2 在ios开发者后台创建bundleId为com.talkingdata.sdk.aneDemo的开发者证书,如,命名为:anetrackingadhoc.mobileprovision

    8.3 运行以下脚本,生成ipa包:

adt -package -target ipa-test -provisioning-profile anetrackingadhoc.mobileprovision -storetype PKCS12 -keystore a.p12 -storepass wangying talkingdata-adtracking.ipa TalkingDataSDKDemo-app.xml TalkingDataSDKDemo.swf -extdir . -platformsdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk

转载于:https://www.cnblogs.com/coderbook/p/4422430.html

ios/android代码生成FLASH可用的actionscript代码(*.ane)相关推荐

  1. iOS Android 上传代码库+持续集成+单元测试

    背景 本文将介绍如何把iOS & Android项目分别上传到CocoaPods和Jitpack,并用Travis CI做持续集成,codecov做代码单元测试覆盖率的报告展示. 上传代码 创 ...

  2. iOS开发中经常用的实用代码合集

    iOS开发中经常用的实用代码合集 本文整理了,在iOS开发中我们所遇到一些开发问题的技巧类的代码,让你在开发过程中避免了很多弯路,希望能给你的开发带来帮助和启发. 1.判断邮箱格式是否正确的代码: / ...

  3. 收集各种 iOS App 开发可以用到的代码示例

    code4app.com 这网站不错,收集各种 iOS App 开发可以用到的代码示例  cocoacontrols.com/ 英文版本的lib收集  objclibs.com/ 精品lib的收集网站 ...

  4. iOS开发中一些有用的小代码

    1.判断邮箱格式是否正确的代码: //利用正则表达式验证 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRegex = @&quo ...

  5. 浅谈 unix, linux, ios, android 区别和联系

    浅谈 unix, linux, ios, android 区别和联系 网上的答案并不是很好,便从网上整理的相对专业的问答. 1.UNIX 和 Linux UNIX 操作系统(尤尼斯), 是一个强大的多 ...

  6. iOS/Android开发地图SDK列表

    高德地图 进入官网 高德地图SDK是一套简单的地图应用开发调用接口,可支持地图显示与操作,兴趣点搜索,地理编码.离线地图等功能.开发者可以轻松地将其嵌入自己的应用程序,并使用相关的地图功能.地图显示与 ...

  7. 仿微信的IM聊天时间显示格式(含iOS/Android/Web实现)[图文+源码]

    本文为原创分享,转载请注明出处. 1.引言 即时通讯IM应用中的聊天消息时间显示是个再常见不过的需求,现在都讲究用户体验,所以时间显示再也不能像传统软件一样简单粗地暴显示成"年/月/日 时: ...

  8. LocalResizeIMG前端HTML5本地压缩图片上传,兼容移动设备IOS,android

    LocalResizeIMG前端HTML5本地压缩图片上传,兼容移动设备IOS,android jincon 发表于 2015-02-26 18:31:01 发表在: php开发 localresiz ...

  9. 微软云平台媒体服务实践系列 1- 使用静态封装为iOS, Android 设备实现点播(VoD)方案...

    微软的云平台媒体服务为流媒体服务提供了多种选择,在使用流媒体服务为企业做流媒体方案时,首先需要确认要流媒体接收目标,如针对广大iOS, Android移动设备,由于它们都支持HLS 格式的流媒体,基于 ...

最新文章

  1. sql截去最后一位_sql 取最后一条记录
  2. webService学习7:调用天气接口
  3. MongoDB的数据逻辑结构
  4. 扩大swap分区--Ubuntu手记之系统配置
  5. sql语句分析是否走索引_MySql 的SQL执行计划查看,判断是否走索引
  6. 外设驱动库开发笔记13:MLX90614红外温度传感器驱动
  7. php求北京时间方法,php怎么将获得的时间转换为北京时间
  8. c语言实验题——字符串排序,C语言中实现“三个数由小到大排序”的多种方法浅析...
  9. 风吹来_“秃如其来”的年轻人,如何才能让头发“春风吹又生”?
  10. OSPF特殊区域及LSA类型详解
  11. 【笔记】时间片轮转 RR 进程调度算法(Java 实现)
  12. 2019年消防工程师综合必看考点:建筑分类、高度、层数
  13. 字符串 hash 唯一数字_物联网安全:基于Hash的RFID安全认证协议
  14. 数字信号处理第二章:Z变换及离散时间系统系统分析
  15. 企业版php自动发卡平台,企业版PHP自动发卡平台源码V6.3版
  16. 【超图+CESIUM】【基础API使用示例】09、超图|CESIUM - 场景分屏设置
  17. 层次分析法(AHP)——MATLAB在数学建模中的应用(第2版)
  18. 荣耀magicbook15C语言,荣耀 MagicBook 15评测 聊聊目前性价比最高的大屏轻薄本
  19. 如何用计算机接收光纤无线电视,无线路由器怎么连接智能电视机攻略
  20. day04-硅谷课堂-前端基础知识(二)

热门文章

  1. Leetcode No.122
  2. django-5-自定义模板过滤器及标签
  3. 错误: 找不到或无法加载主类com.**.**
  4. 直观展示卷积核(转)
  5. sqlserver数据库创建表
  6. PHP易混淆函数的区分
  7. JS中全局对象的属性和方法
  8. lr参数化取值与连接数据库
  9. java Io流实现图片复制
  10. 从这3个方面,帮你大幅度提升用户的搜索体验