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();
-
}
-
}
-
}
阅读(4932) | 评论(0) | 转发(0) |