- 积分
- 136405
- 注册时间
- 2014-12-27
- 最后登录
- 2026-3-3
- 在线时间
- 606 小时
- 威望
- 562
- 贡献
- 29
- 金币
- 52905
- 钢镚
- 1422
- 交易凭证
- 1
- 分享
- 0
- 精华
- 33
- 帖子
- 2094
- 主题
- 1742
TA的每日心情 | 擦汗 2018-4-10 15:18 |
|---|
签到天数: 447 天 [LV.9]以坛为家II
超级版主
    
- 威望
- 562
- 贡献
- 29
- 金币
- 52905
- 钢镚
- 1422
 
|
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文件里了。命令如下:
- #!/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, int resultCode, 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();
- }
- }
- }
复制代码
本文来自:http://blog.chinaunix.net/uid-20593721-id-3789298.html
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|