ios/android代码生成FLASH可用的actionscript代码(*.ane)
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)相关推荐
- iOS Android 上传代码库+持续集成+单元测试
背景 本文将介绍如何把iOS & Android项目分别上传到CocoaPods和Jitpack,并用Travis CI做持续集成,codecov做代码单元测试覆盖率的报告展示. 上传代码 创 ...
- iOS开发中经常用的实用代码合集
iOS开发中经常用的实用代码合集 本文整理了,在iOS开发中我们所遇到一些开发问题的技巧类的代码,让你在开发过程中避免了很多弯路,希望能给你的开发带来帮助和启发. 1.判断邮箱格式是否正确的代码: / ...
- 收集各种 iOS App 开发可以用到的代码示例
code4app.com 这网站不错,收集各种 iOS App 开发可以用到的代码示例 cocoacontrols.com/ 英文版本的lib收集 objclibs.com/ 精品lib的收集网站 ...
- iOS开发中一些有用的小代码
1.判断邮箱格式是否正确的代码: //利用正则表达式验证 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRegex = @&quo ...
- 浅谈 unix, linux, ios, android 区别和联系
浅谈 unix, linux, ios, android 区别和联系 网上的答案并不是很好,便从网上整理的相对专业的问答. 1.UNIX 和 Linux UNIX 操作系统(尤尼斯), 是一个强大的多 ...
- iOS/Android开发地图SDK列表
高德地图 进入官网 高德地图SDK是一套简单的地图应用开发调用接口,可支持地图显示与操作,兴趣点搜索,地理编码.离线地图等功能.开发者可以轻松地将其嵌入自己的应用程序,并使用相关的地图功能.地图显示与 ...
- 仿微信的IM聊天时间显示格式(含iOS/Android/Web实现)[图文+源码]
本文为原创分享,转载请注明出处. 1.引言 即时通讯IM应用中的聊天消息时间显示是个再常见不过的需求,现在都讲究用户体验,所以时间显示再也不能像传统软件一样简单粗地暴显示成"年/月/日 时: ...
- LocalResizeIMG前端HTML5本地压缩图片上传,兼容移动设备IOS,android
LocalResizeIMG前端HTML5本地压缩图片上传,兼容移动设备IOS,android jincon 发表于 2015-02-26 18:31:01 发表在: php开发 localresiz ...
- 微软云平台媒体服务实践系列 1- 使用静态封装为iOS, Android 设备实现点播(VoD)方案...
微软的云平台媒体服务为流媒体服务提供了多种选择,在使用流媒体服务为企业做流媒体方案时,首先需要确认要流媒体接收目标,如针对广大iOS, Android移动设备,由于它们都支持HLS 格式的流媒体,基于 ...
最新文章
- sql截去最后一位_sql 取最后一条记录
- webService学习7:调用天气接口
- MongoDB的数据逻辑结构
- 扩大swap分区--Ubuntu手记之系统配置
- sql语句分析是否走索引_MySql 的SQL执行计划查看,判断是否走索引
- 外设驱动库开发笔记13:MLX90614红外温度传感器驱动
- php求北京时间方法,php怎么将获得的时间转换为北京时间
- c语言实验题——字符串排序,C语言中实现“三个数由小到大排序”的多种方法浅析...
- 风吹来_“秃如其来”的年轻人,如何才能让头发“春风吹又生”?
- OSPF特殊区域及LSA类型详解
- 【笔记】时间片轮转 RR 进程调度算法(Java 实现)
- 2019年消防工程师综合必看考点:建筑分类、高度、层数
- 字符串 hash 唯一数字_物联网安全:基于Hash的RFID安全认证协议
- 数字信号处理第二章:Z变换及离散时间系统系统分析
- 企业版php自动发卡平台,企业版PHP自动发卡平台源码V6.3版
- 【超图+CESIUM】【基础API使用示例】09、超图|CESIUM - 场景分屏设置
- 层次分析法(AHP)——MATLAB在数学建模中的应用(第2版)
- 荣耀magicbook15C语言,荣耀 MagicBook 15评测 聊聊目前性价比最高的大屏轻薄本
- 如何用计算机接收光纤无线电视,无线路由器怎么连接智能电视机攻略
- day04-硅谷课堂-前端基础知识(二)