ANE打包

哈哈,曾经梦寐以求的ANE终于弄成功了一个。说实话,学java和Android就是为了写ANE!好啦,今天把我体会到的记录一下:

网上其实打包ANE的教程好多,我也找了好多好多。但是好多我自己试了还是没有弄成功,可能是我智商有问题。

我使用的工具:

Eclipse-ADT

flashBuilder

flash cs6

flex中创建项目:

As源码:

package randy.util.log
{
    import flash.external.ExtensionContext;
    
    public class LogUtil
    {
            private static var _extensionContext:ExtensionContext=null;
            private static const EXTENSION_ID:String="randyUtilLog";
            private static const LOG_FUNCTION:String="fn_log";
            
            public static const DEBUG:String="debug";
            public static const VERBOSE:String="verbose";
            public static const INFO:String="info";
            public static const WARN:String="warn";
            public static const ERROR:String="error";
            
            public static function log(msg:String,level:String=LogUtil.INFO,tag:String="非若"):void
            {
                if(!_extensionContext)
                {
                    _extensionContext=ExtensionContext.createExtensionContext(EXTENSION_ID,null);
                }
                _extensionContext.call(LOG_FUNCTION,msg,level,tag);
            }
        }
}

 

拿出我们需要的swc文件ANE_log.swc !

然后在Eclipse-ADT中创建android项目:

 

然后给项目添加 FlashRuntimeExtensions.jar

Jar文件在flashBuilder安装文件下sdks/4.6.0/lib/android目录下面;我的是D盘,4.6.0版本;

 

可以直接ctrl+C、ctrl+V到android项目文件里面的lib文件夹路径就OK啦

 

然后就开始java类编辑:

 

Java源码:

package randy.util.log;

 

 

import java.util.Map;

import java.util.HashMap;

 

import com.adobe.fre.FREContext;

import com.adobe.fre.FREFunction;

 

public class LogContext extends FREContext {

    private static Map<String,FREFunction> functions=null;

         @Override

         public void dispose() {

                   // TODO Auto-generated method stub

 

         }

         @Override

         public Map<String, FREFunction> getFunctions() {

                   if(functions==null){

                            functions=new HashMap<String,FREFunction>();

                            functions.put(LogFunction.FUNCTION_KEY, new LogFunction());

                   }

                   return functions;

         }

 

}

 

/*****************************************************************************/

package randy.util.log;

 

import com.adobe.fre.FREContext;

import com.adobe.fre.FREExtension;

 

public class LogExtension implements FREExtension {

    private LogContext logExtension=null;

         @Override

         public FREContext createContext(String arg0) {

                   if(logExtension==null){

                            logExtension=new LogContext();

                   }

                   return logExtension;

         }

 

         @Override

         public void dispose() {

                   // TODO Auto-generated method stub

 

         }

 

         @Override

         public void initialize() {

                   // TODO Auto-generated method stub

 

         }

 

}

 

/************************************************************************/

package randy.util.log;

 

import android.util.Log;

 

import com.adobe.fre.FREContext;

import com.adobe.fre.FREFunction;

import com.adobe.fre.FREObject;

 

public class LogFunction implements FREFunction {

    public static final String FUNCTION_KEY="fn_log";

         @Override

         public FREObject call(FREContext arg0, FREObject[] arg1) {

                   try{

                            String msg=arg1[0].getAsString();

                            String level=arg1[1].getAsString();

                            String tag=arg1[2].getAsString();

                           

                            if("debug".equals(level)){

                                     Log.d(tag, msg);

                            }else if("verbose".equals(level)){

                                     Log.v(tag, msg);

                            }else if("info".equals(level)){

                                     Log.i(tag, msg);

                            }else if("warn".equals(level)){

                                     Log.w(tag, msg);

                            }else if("error".equals(level)){

                                     Log.e(tag, msg);}

                            }catch(Exception e){}

                   return null;

         }

 

}

 

到此,就OK了第二步!

 

然后点击java文件包右击到处我们要用到的jar文件:

 

 

点击finish完成!

然后让我们来创建数字证书:

打开flashcs6:

创建一个AIR for Android项目

 

 

然后点击确定,证书就创建好在桌面了

然后新建一个文件夹在桌面,比如log

 

Adt.jar在flashbuilder安装目录lib下可以复制粘贴过来

 

 

然后复制swc文件,并将扩展名改为zip,双击进去

把里面的文件解压出来

然后就差一个描述文件咯

新建记事本

 

输入:

<extension xmlns="http://ns.adobe.com/air/extension/3.1">

  <id>randyUtilLog</id>

  <versionNumber>1</versionNumber>

  <platforms>

    <platform name="Android-ARM">

      <applicationDeployment>

        <nativeLibrary>aneLog.jar</nativeLibrary>

        <initializer>randy.util.log.LogExtension</initializer>

        <finalizer>randy.util.log.LogExtension</finalizer>

      </applicationDeployment>

    </platform>

  </platforms>

</extension>

 

Txt改为xml

就像这样

 

然后桌面键+R,输入cmd,确定:

 

进入adt.jar所在文件路径:

Cd  C:\Users\feiruo\Desktop\log

 

 

 

 

然后输入打包命令行:

java -jar adt.jar -package -tsa none -storetype pkcs12 -keystore feiruo.p12 -storepass 123456 -target ane ExtensionLog.ane extension.xml -swc ANE_log.swc -platform Android-ARM library.swf aneLog.jar

 

-keystore feiruo.p12:数字证书的名字

-storepass 123456:数字证书密码

-target ane ExtensionLog.ane:要打包ANE的名字

extension.xml:描述文件

-swc ANE_log.swc:swc库文件

然后log文件夹下会生成一个ExtensionLog.ane文件

 

 

posted @ 2015-08-15 17:50  非若  阅读(389)  评论(0编辑  收藏  举报