加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flash Air Native Extension 开发中遇到的问题整理(安卓版)

发布时间:2020-12-15 17:55:29 所属栏目:百科 来源:网络整理
导读:http://blog.chinaunix.net/uid-20593721-id-3789298.html ? ANE调试困难 解决办法: 1 利用java的 Log.e或Log.i(tag,message)打日志,用LogCat工具查看。 2可利用FREContex抛出Status事件到flash中输出信息来进行调试: FREContex.dispatchStatusEventAsync(t

http://blog.chinaunix.net/uid-20593721-id-3789298.html

?

ANE调试困难
解决办法:
1 利用java的 Log.e或Log.i(tag,message)打日志,用LogCat工具查看。
2可利用FREContex抛出Status事件到flash中输出信息来进行调试:
FREContex.dispatchStatusEventAsync(tag,message
);

调用库时Unable to instantiate activity ComponentInfo
解决办法:
在工程上右键->属性[或者 alter+Enter],进入Java Build Path ,order and export,勾选刚刚引入的jar包,确定,然后clear,重新运行工程,问题解决。

导出jar包
解决办法:
Eclipse的export功能也可以用,不过通常都使用build fat jar插件进行jar包导出,在导出选项中尽量只选择需要的文件,减少生成的文件体积,如只选择Extension、Context、function文件以及需要的第三方库,至于manifest、R文件以及一些项目配置文件都不需要。


打包ane
解决办法:
新建一个目录专门用于打包,目录如下


library存放本地扩展库项目生成的swc文件及扩展描述文件extension.xml,extension.xml的内容可以查阅相关资料。
native目录下放置安卓项目导出的扩展jar包。library.swf文件是从swc文件解压出来的。我把解压、移动以及打包的命令都写在package.sh文件里了。命令如下:
#!/bin/bash

adt_directory="/Applications/Adobe Flash Builder 4.6/sdks/4.6.0/bin" 
root_directory=/Users/mac/Documents/cashslideAne 
library_directory=${root_directory}/library
native_directory=native
swc_name=cashslideAPI

signing_options="-storetype pkcs12 -keystore ${root_directory}/testkey.p12 -storepass 123456" dest_ANE=CashSlideAPI.ane 
extension_XML=${library_directory}/extension.xml 
library_SWC=${library_directory}/${swc_name}.swc

cp ${library_SWC} ${library_directory}/${swc_name}.zip

unzip -o ${library_directory}/${swc_name}.zip
rm ${library_directory}/${swc_name}.zip
rm catalog.xml
mv library.swf ${native_directory}/library.swf

"${adt_directory}"/adt -package ${signing_options} -target ane "${dest_ANE}" "${extension_XML}" -swc "${library_SWC}" -platform Android-ARM -C "${native_directory}" . -platform default -C "${native_directory}" library.swf 

在android项目的FREFunction中使用startActivityForResult启动对话框时onActivityResult(int requestCode,int resultCode,Intent data) 无法收到返回
解决办法:
在FREFunction中启动一个Activity,在这个activity中定义onActivityResult函数接收数据,这里可能会遇到一个问题,在这个函数里想使用FREContex.dispatchStatusEventAsync(tag,message)抛出事件给flash会失败,查看Logcat会发现有deliver错误的相关消息。这里可以这样解决,利用Receiver和sendBroadcast(intent)来接收和发送消息:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import com.adobe.fre.FREContext;

public class AcctountReceiver extends BroadcastReceiver {
    private FREContext context;

    public static final String ACCOUNT_RECEIVER_ACTION = "com.**.**.acctountReceiver";

    public AcctountReceiver(FREContext context){
          this.context = context;
    }

    @Override
    public void onReceive(Context arg0,Intent arg1) {
        // TODO Auto-generated method stub
        String data = arg1.getExtras().getString("data");
        //Log.e("adlatte","AcctountReceiver receiver get :" + data);
        this.context.dispatchStatusEventAsync("getAccountSuccess",data);
    }
} 
在前文中提到的Activity里的 onActivityResult函数中sendBroadcast
public void onActivityResult(int requestCode,Intent data) {
        Log.e("adlatte","onActivityResult");
     if (requestCode == PICK_ACCOUNT_REQUEST) {
         //Log.e("adlatte","-----get Account call back");
     if (resultCode == Activity.RESULT_OK) {
         String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
         //Log.e("adlatte","get Account success:" + accountName);

         Intent intent = new Intent(AcctountReceiver.ACCOUNT_RECEIVER_ACTION);
          intent.putExtra("data",accountName);
         this.sendBroadcast(intent);
         this.finish();
       }
     }
} 

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读