工具:
1.flash builder
2.adt打包工具
3.数字证书
一. 创建 jar 文件
1. 打开flash builder, 新建一个java 项目。
2.点击项目属性,选择Java构建路径,选择库,然后添加外部JAR,选择路径,添加FlashRuntimeExtension.jar
3.在项目src文件下建一个包,包名自定,然后在这个包下建3个java类。
各java代码如下:
Extension.java类:
1 package com.three; 2 import com.adobe.fre.*; 3 4 //Extension这个类是AS与JAVA交互的最基础的入口 5 public class Extension implements FREExtension { 6 7 8 @Override 9 public FREContext createContext(String arg0) { 10 // new一个新的threeExtensionContext出来; 11 return new threeExtensionContext(); 12 } 13 14 @Override 15 public void dispose() { 16 // 这个销毁资源的方法,暂时没有什么用,空着 17 18 } 19 20 @Override 21 public void initialize() { 22 // 初始化方法,暂时用不着,空着先 23 24 } 25 26 }
test.java类:
1 package com.three; 2 3 import com.adobe.fre.FREContext; 4 import com.adobe.fre.FREFunction; 5 import com.adobe.fre.FREInvalidObjectException; 6 import com.adobe.fre.FREObject; 7 import com.adobe.fre.FRETypeMismatchException; 8 import com.adobe.fre.FREWrongThreadException; 9 10 public class test implements FREFunction { 11 12 @Override
//这个类作用就是 AS调用CALL方法给java传一个FREObject的参数组,然后,java给as返回一个FREObject
13 public FREObject call(FREContext arg0,FREObject[] arg1) 14 { 15 int a=0; 16 FREObject b = null; 17 try{ 18 a=arg1[0].getAsInt(); 19 20 }catch(IllegalStateException e) 21 { 22 e.printStackTrace(); 23 24 }catch(FRETypeMismatchException e) 25 { 26 e.printStackTrace(); 27 }catch(FREInvalidObjectException e) 28 { 29 e.printStackTrace(); 30 }catch(FREWrongThreadException e) 31 { 32 33 e.printStackTrace(); 34 } 35 36 try{ 37 b=FREObject.newObject(a*100);//调用FREObject的静态方法把a这个整型变量写到b里去; 38 39 }catch(FREWrongThreadException e) 40 { 41 e.printStackTrace(); 42 } 43 44 return b; 45 46 } 47 48 }
threeExtensionContext.java:
package com.three; import java.util.*; import com.adobe.fre.FREContext; import com.adobe.fre.FREFunction; public class threeExtensionContext extends FREContext{ public threeExtensionContext(){ } @Override public void dispose(){ } @Override
// 下面这个比较关键,它的作用是定义as与JAVA具体方法通信的重要接口
public Map<String,FREFunction> getFunctions(){ Map<String,FREFunction> functionMap = new HashMap<String,FREFunction>(); functionMap.put("test", new test()); return functionMap; } }
如果没有报错的话,右键->导出java-jar文件。
二.创建SWC文件
1.用flash builder新建一个flex库项目(flex library)。
注意:包括Adobe AIR库这个选项一定要选。
另外:附加的编译器参数要添加 -swf-version-13
再添加ActionScript类,代码如下:
1 package com.three 2 { 3 import flash.external.ExtensionContext; 4 5 public class callJava 6 { 7 var context:ExtensionContext; 8 public function callJava() 9 { 10 context=ExtensionContext.createExtensionContext("com.three.Extension",""); 11 } 12 13 public function callJavaTest(value:int):int{ 14 15 var a:int; 16 a=context.call("test",value) as int; 17 return a; 18 19 } 20 } 21 }
项目结构如图:
右键点击myExtension.swc,把它复制出来,和刚才那个jar文件放在一起。然后复制一个myExtension.swc的副本,并把它的后缀改为.zip,然后把它解压到当前目录中。
三.建立extension.xml文件
1 <extension xmlns="http://ns.adobe.com/air/extension/2.5"> 2 <id>com.three.Extension</id> 3 <versionNumber>1</versionNumber> 4 <platforms> 5 <platform name="Android-ARM"> 6 <applicationDeployment> 7 <nativeLibrary>TestAirJava01.jar</nativeLibrary> 8 <initializer>com.three.Extension</initializer> 9 <finalizer>com.three.Extension</finalizer> 10 </applicationDeployment> 11 </platform> 12 </platforms> 13 </extension>
四. 签证文件(p12)
可以用flash builder建一个。
五.打包
上述文件放到同一个文件夹中,命令行中输入 cd 文件夹路径
然后,
java -jar adt.jar -package -tsa none -storetype pkcs12 -keystore grq186key.p12 -storepass 125521 -target ane m.ane extension.xml -swc myExtensionAs.swc -platform Android-ARM library.swf TestAirJava01.jar
即可生成m.ane 文件。