守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 990|回复: 0

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

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    51757
    钢镚
    1422

    开源英雄守望者

    发表于 2015-7-15 10:11:29 | 显示全部楼层 |阅读模式
    Flash Air Native Extension 开发中遇到的问题整理(安卓版)

    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文件里了。命令如下:
    1. #!/bin/bash

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

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

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

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


    15. "${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)来接收和发送消息:


    1. import android.content.BroadcastReceiver;
    2. import android.content.Context;
    3. import android.content.Intent;

    4. import com.adobe.fre.FREContext;

    5. public class AcctountReceiver extends BroadcastReceiver {

    6.     private FREContext context;
    7.    
    8.     public static final String ACCOUNT_RECEIVER_ACTION = "com.**.**.acctountReceiver";

    9.     public AcctountReceiver(FREContext context){

    10.           this.context = context;

    11.     }
    12.    
    13.     @Override
    14.     public void onReceive(Context arg0, Intent arg1) {
    15.         // TODO Auto-generated method stub
    16.         String data = arg1.getExtras().getString("data");
    17.         //Log.e("adlatte", "AcctountReceiver receiver get :" + data);
    18.         this.context.dispatchStatusEventAsync("getAccountSuccess", data);
    19.     }

    20. }
    复制代码
    在前文中提到的Activity里的 onActivityResult函数中sendBroadcast
    1. public void onActivityResult(int requestCode, int resultCode, Intent data) {
    2.         Log.e("adlatte", "onActivityResult");
    3.      if (requestCode == PICK_ACCOUNT_REQUEST) {
    4.          //Log.e("adlatte", "-----get Account call back");
    5.      if (resultCode == Activity.RESULT_OK) {
    6.          String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
    7.          //Log.e("adlatte", "get Account success:" + accountName);
    8.          
    9.          Intent intent = new Intent(AcctountReceiver.ACCOUNT_RECEIVER_ACTION);
    10.           intent.putExtra("data",accountName);
    11.          this.sendBroadcast(intent);
    12.          this.finish();
    13.        }
    14.      }
    15. }
    复制代码



    本文来自:http://blog.chinaunix.net/uid-20593721-id-3789298.html

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    
    关闭

    站长推荐上一条 /4 下一条

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2019-10-23 20:45 , Processed in 0.047551 second(s), 35 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

    快速回复 返回顶部 返回列表