Chinaunix首页 | 论坛 | 博客
  • 博客访问: 284725
  • 博文数量: 64
  • 博客积分: 3099
  • 博客等级: 中校
  • 技术积分: 615
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-29 19:38
文章分类

全部博文(64)

文章存档

2015年(1)

2014年(7)

2013年(6)

2012年(3)

2010年(11)

2009年(3)

2008年(19)

2007年(14)

我的朋友

分类: Android平台

2013-07-05 14:48:45

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. }




阅读(4932) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~