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)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1. 初探MongoDB —— 介绍、安
- 下一篇: strncmp实现方式之一