原文地址:http://bbs.9ria.com/index.php/topic/show/156257
以下教程是用在android手机上的:
1、flash cs6
2、flash builder 4.6(低版本的没用过,不是很清楚);
3、adt打包工具(回复本帖就能下载哟,亲);
4、数字证书(就是用来签证的玩意,可以向adobe申请,也可以自己用flashcs6创建);
OK,东西准备好了吧? let's go!
一、创建jar文件
1、先打开FB(就是flashbuilder,以后都叫它FB了)。建一个java项目。(文件-新建-其它-java项目|
然后,对着项目点右键(就是对着myExtensonJava点右键),点击属性,再选java构建路径,然后选库路径、再选添加外部jar,再找到flashcs6目录下AIR3.2\lib\android\的FlashRuntimeExtensions.jar文件(properties—java builtpath—library—Add External JARs——XXX目录下的FlashRuntimeExtensions.jar—打开—OK)
然后,在项目的src文件下建一个包,包名自定,我这用的是com.three,接着再在这个包下建3个java类。先看看项目结构
各JAVA代码如下:
1、Extension的代码
package com.three;
import com.adobe.fre.*;
//Extension这个类是AS与JAVA交互的最基础的入口,其实很简单,也就这么点东西
public class Extension implements FREExtension {
@Override
public FREContext createContext(String arg0) {
// new一个新的threeExtensionContext出来;
return new threeExtensionContext();
}
@Override
public void dispose() {
// 这个销毁资源的方法,暂时没有什么用,空着
}
@Override
public void initialize() {
// 初始化方法,暂时用不着,空着先
}
}
2、threeExtensionContext的代码:
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
public Map getFunctions() {
// 下面这个比较关键,它的作用是定义as与JAVA具体方法通信的重要接口
Map functionMap=new HashMap();
functionMap.put("test",new test());
return functionMap;
}
}
3,test的代码:
package com.three;
import com.adobe.fre.FREContext;
import com.adobe.fre.FREFunction;
import com.adobe.fre.FREInvalidObjectException;
import com.adobe.fre.FREObject;
import com.adobe.fre.FRETypeMismatchException;
import com.adobe.fre.FREWrongThreadException;
public class test implements FREFunction {
@Override
//这个类作用就是 AS调用CALL方法给java传一个FREObject的参数组,然后,java给as返回一个FREObject
public FREObject call(FREContext arg0, FREObject[] arg1) {
// 定义方法的具体内容
int a=0; //声明一个整形变量a
FREObject b = null; //声明一个FREObject对象b,待会返回用的;
try {
a=arg1[0].getAsInt();//读取as传过来的整理参数并赋值给a;
} catch (IllegalStateException e) {
//不知道是啥 ,FB自己添加的
e.printStackTrace();
} catch (FRETypeMismatchException e) {
//不知道是啥 ,FB自己添加的
e.printStackTrace();
} catch (FREInvalidObjectException e) {
//不知道是啥 ,FB自己添加的
e.printStackTrace();
} catch (FREWrongThreadException e) {
//不知道是啥 ,FB自己添加的
e.printStackTrace();
}
try {
b=FREObject.newObject(a*100);//调用FREObject的静态方法把a这个整型变量写到b里去;
} catch (FREWrongThreadException e) {
// //不知道是啥 ,FB自己添加的
e.printStackTrace();
}
//
return b;//再返回b;
}
}
最后,写完了,没有报错的话,就右键项目,点导出-java-jar文件。
二、创建SWC文件
1、用FB,新建一个flex库项目(flexlibrary)。就是
2、写代码:
package com.three
{
import flash.external.ExtensionContext;
public class callJava
{
var context:ExtensionContext;
public function callJava()
{
context=ExtensionContext.createExtensionContext("com.three.Extension","");
}
public function callJavaTest(value:int):int{
var a:int;
a=context.call("test",value) as int;
return a;
}
}
}
OK,看看项目结构:
看到myExtension.swc了木有?
然后,复制一个myExtension.swc的副本,把它改成myExtension.zip,并解压到当前目录;
二、extension.xml文件
extenstion.xml文件,上面定义了ane运行环境配置等乱七八遭的东西;
1、新建 一个文本文件,打开,粘入以下代码
com.three.Extension
myExtensionJava.jar
com.three.Extension
com.three.Extension
然后把这个文本文件改成extension.xml就行了,同样,把它跟jar 和swc放在一起。
四、签证文件(P12)
1、打开flash,新建一个air项目(air for desktop 或是air forandroid 还是air for ios 都可以);
2、文件—AIR 3.2 forXXX配置—签名—创建。。然后自己慢慢填吧,填好了保存出来,跟刚才创建的那一堆东西放在一起。
五、ADT打包
这工具回复贴子有下载,下载完后同样把它放到刚才那个文件目录下,现在目录应该是这样子:
然后,在这个文件夹下按着shift键点鼠标右键,在弹出的菜单里选 : 在此处打开命令窗口 。
然后就开始输入指令吧。这玩意是命令行工具,我就直接把命令粘下来了
java -jar adt.jar -package -tsa none -storetype pkcs12 -keystorea.p12 -storepass 123 -target ane m.aneextension.xml
这命令其实挺简单的,无非就是打个包嘛....
不过有几个地方要注意。一个
我现在是生成了一个叫m.ane的文件了,不知道你们生成没有
OK,现在可以写代码来测试了:
1、用flash cs6 新建一个air for android项目;
2、打开文件—actionScript设置—库路径—点击(浏览到本机扩展(ANE)文件)—找到我们生成的那个ANE文件
点确定。
3、在flash面板上,点击 窗口,然后 组件。打开组件面板,拖两个textArea和一个button 到舞台上。这两个textArea分别命名为txt1和txt2
如图:
4、按F9键打开动作面板 ,输入代码:
import com.three.callJava;
import flash.events.MouseEvent;
var con:callJava=new callJava();
btn.addEventListener(MouseEvent.CLICK,onClick);
function onClick(e){
var cj:callJava=new callJava();
var a:int=int(txt1.text);
var b:int=cj.callJavaTest(a);
txt2.text=b.toString();
}
想要看效果,在Windows下是不行的,必须要连上android手机,然后在AIR 3.2 for android 设置里部署面板上选上 发布以后在连接的android设置运行程序。当然,签名证书也要填上的哟。另外一点是,手机上要安装air。。如果手机不想装air,也可以,同样,在布署面板里 勾选将air运行时嵌入应用程序。
。
OK,最终运行结果呢,因为是在手机上,不好截图,就不展示了...
大概意思呢就是,屏幕上有两个文本框,在上面那个文本框里输入一个整数,然后点击按钮,下面那个文本框就会输出上面那个文本框的10倍的整数。