`

[ANE for Android]Java接口部分引用第三方JAR的解决办法

ane 
阅读更多

来自:http://bbs.9ria.com/thread-160445-1-1.html

 

前几天在做Android AIR 游戏时,集成国外支付平台的接口时候遇到了这样的问题。

详细描述:
平台的支付SDK已经打好了Jar包,直接面向原生Java开发者提供接口。结果我们的游戏需要在AIR内嵌入这个接口,肯定需要ANE的支持,写一个ANE实际上很简单,但是问题是在Debug的时候各种报错找不到SDK的类。

  1. 11-14 09:55:48.360: I/dalvikvm(7296): Failed resolving Lcom/chocobots/QiipIAB/QiipIABListener; interface 80 'Lcom/qiip/iab/IABListener;'
  2. 11-14 09:55:48.360: W/dalvikvm(7296): Link of class 'Lcom/chocobots/QiipIAB/QiipIABListener;' failed
  3. 11-14 09:55:48.360: E/dalvikvm(7296): Could not find class 'com.chocobots.QiipIAB.QiipIABListener', referenced from method com.chocobots.QiipIAB.QiipIABContext.initIAB
  4. 11-14 09:55:48.360: W/dalvikvm(7296): VFY: unable to resolve new-instance 72 (Lcom/chocobots/QiipIAB/QiipIABListener;) in Lcom/chocobots/QiipIAB/QiipIABContext;
复制代码


苦苦调试之后才发现无论怎样Import那个SDK都是无济于事的。虽然有幸搜索到了天地会某位大哥的帖子,但是那只是针对ANE调用外部一些资源的解决方式,对于第三方JAR包的调用一直没有很好的答案,最后在国外的帖子里面找到了答案:

ANE 不支持多个JAR包的调用,只有你自己导出的JAR包可以被编译到项目内,其他的JAR包如果以引用的方式被调用,最终是不会导入到APK内的。

解决方案:

将你的Java接口生成的Jar包与你调用的第三方Jar包合并。


合并的方式实际上非常的简单。


1.用 jar -xf 命令解压第三方Jar包
2.用 jar -uf 命令合并第三方Jar包
3.注意,在合并的时候实际上是有命令参数的。鉴于我对于jar命令不怎么熟悉,为了让最终的Jar包比较干净,我用比较笨的方法一个个顶级包进行合并。也就是说如果你要引用的第三方包只有com这个顶级包,那只要一条语句就搞定了。


对于和我同样不熟悉这个命令朋友,我做了一个简单的BAT脚本,你只要:


1.新建一个不包含中文的路径的文件夹
2.将你已经导出的主JAR包和需要扩展的第三方JAR包粘进去
3.在这个文件夹内新建一个txt文件将下面的命令粘进去

  1. @echo off
  2. ::转到当前盘符
  3. %~d0
  4. ::打开当前目录
  5. cd %~dp0
  6. ::你做的主JAR包的路径
  7. set MainJar=MYANEJavaLib.jar
  8. ::第三方JAR包的路径
  9. set ExternalJar=3rdApiLib.jar
  10. ::第三方JAR包顶级包名称
  11. set packageName=com
  12. echo =========== start combin ==============
  13. ::解压第三方包
  14. jar -xf %ExternalJar%
  15. ::合并主JAR包
  16. jar -uf %MainJar% %packageName%
  17. ::如果还有别的顶级包可以接着合并,例如:
  18. ::jar -uf %MainJar% %packageName2%
  19. ::jar -uf %MainJar% org
  20. ::jar -uf %MainJar% cn
  21. echo =========== over ==============
  22. echo 再点一下就结束了--小Q
  23. pause
复制代码

4.修改参数MainJar等号后面的内容为你自己导出的JAR包
5.修改参数ExternalJar等号后面的内容为第三方JAR包
6.修改参数packageName等号后面的内容你要合并的包名
7.如果还需要合并其他的顶级包,可以修改我下面的注释(只要去掉::就可以了)
8.将这个txt改名为bat,并运行它。


如果不放心结果,合并结束后观察一下包的大小,或者将包改名为ZIP,并解压,看看里面是不是所有类都齐全了。
基本上就是这样了,不知道遇到和我一样问题的人多不多。希望可以给大家有帮助,有问题可以随时联系我,大家一起探讨。
写好的BAT文件
<IGNORE_JS_OP>jarcombine.zip (632 Bytes, 下载次数: 98)




==========================以下是一些附加问题的汇总===========================

1. 有很多朋友提到,第三方工具除了包含JAR包外,还包含一些图片或者layout配置的“内部资源”。这些资源文件常见于项目res等文件夹下。经常出现的问题就是当我们将第三方JAR包同自己的JAR包合并后,运行的时候往往因为找不到上述的一些“内部资源”而出现报错和崩溃。

解决方法:

如果是FB项目的话,最简单的方法就是将这些文件及文件夹拷贝到你的应用项目(注意,不是你的ANE项目)内的src目录下,这样,在你的应用打包的过程中自然会将这些文件一同打包到APK文件内,ANE在调用的时候就可以当便的找到它们了。

如果是FD项目,需要修改打包脚本,找到bat/Packager.bat, 找到“:start”标签,将下面的命令改为:

  1. call adt -package -target %TYPE%%TARGET% %OPTIONS% %SIGNING_OPTIONS% "%OUTPUT%" "%APP_XML%" %FILE_OR_DIR% -extdir {额外的资源文件夹}
复制代码

{额外的资源文件夹}替换为资源文件的路径即可。


2.  如何定位一些诸如崩溃,找不到对象,对象为空的问题。这个嘛,作为Android应用开发者应该都要了解,实际上如果你借助Eclipse开发Android应用,理论上应该安装了ADT插件了。如果没有的话可以参照这个文章:
http://blog.csdn.net/greenappple/article/details/6170478

假设你已经成功的安装了ADT,并且你的android-sdk也更新到了相应的版本(注意,ADT和SDK的版本必须是一致的,否则打开Android的设置会报错,提醒你更新其中之一)。切换到Debug模式,将会有一个logCat窗口,这个窗口将会实时打印所有的系统log。将你的设备USBDebug模式打开,链接设备和电脑,正常的状况就会看到log源源不断的刷出来。

小提示:由于logCat默认是将所有的信息打印出来,不方便我们有针对性的调试,所以最好使用过滤的方式监视特定的标签或者pid的log。你可以在左侧栏内使用“+”建立自定义的过滤器。另外在你编写java代码的时候,调用Log.d方法时,也同样可以添加一个自定的Tag。

分享到:
评论

相关推荐

    ANE——Android本地编写

    2. **编写Java代码**:在Android项目中,你需要编写Java类来实现ANE的接口。这些类会作为原生接口,暴露给Flash应用程序。例如,你可以创建一个显示Toast消息的ANE,那么就需要实现一个显示Toast的Java方法。 3. **...

    Android代码-安卓ane模板

    - Adobe提供adt工具(Adobe AIR Developer Tool)来创建和管理ANE,但也可以使用第三方工具如ANEBuilder或自定义脚本来自动化打包过程。 5. **使用这个模板**: - 开发者可以下载这个“android-ane-master”...

    ANE——Flash与Android的交互

    ANE由三部分组成:ActionScript接口(在Flash或Flex项目中)、 native library(针对特定平台,如Android的Java库)和一个描述文件(XML)。ActionScript接口定义了ANE在Flash中的使用方式,native library实现了与...

    Flex for Android第一个ANE(ActionScript Native Extensions)

    ANE由三部分组成:ActionScript接口、本地库(Android或iOS)和一个描述文件。ActionScript接口定义了ANE在Flex或AIR应用中的API,本地库实现这些API的功能,描述文件则用来绑定ActionScript和本地库。 二、开发...

    AIR、ANE与Android详解

    AIR、ANE与Android开发详例,从头到尾的介绍

    ane制作打包例子

    通过深入理解这些步骤和组件,开发者可以自定义ANE以满足各种需求,比如访问设备硬件、利用系统API或者集成第三方库,从而丰富Flash和AIR应用的功能。这个例子提供了一条实践ANE开发的清晰路径,对于初学者来说是一...

    友盟统计ANE,android and ios

    ANE(Air Native Extension)是Adobe Air框架的一部分,允许开发者将原生的移动平台功能(如iOS或Android的API)引入到Adobe Air应用程序中。这样,使用ActionScript或Flex的开发者可以利用这些原生功能,而无需深入...

    Android新浪微博和QQ登录ANE

    ANE由三部分组成:ActionScript接口(ANEInterface)、本地库(如Java或Objective-C)、以及描述文件。ActionScript接口定义了在Air应用中调用的API,本地库负责实现这些API,而描述文件则描述了ANE的结构和依赖关系...

    友盟社会化分享ANE android/IOS版(v3.3.5)

    友盟社会化分享ANE,全称为Adobe Native Extension,是一种跨平台的解决方案,允许开发者在Adobe Air应用中集成原生功能,例如Android和iOS上的社交分享。在这个特定的版本v3.3.5中,友盟ANE针对Android和iOS平台...

    微派ane安卓版

    这个功能对于移动应用,尤其是游戏或电商类应用来说,是非常重要的,因为它使得用户可以直接在应用内完成支付流程,无需跳出应用到第三方支付平台,提高了用户体验。 首先,让我们深入了解Adobe Air。Adobe Air是一...

    ane打包规范及开发技巧

    - 使用AIR打包工具adt或第三方工具(如Flash Builder)将所有组件打包成单一的ANE文件。 - 确保所有平台的库文件都包含在内,并正确配置对应平台的XML描述文件。 4. **跨平台兼容性**: - 对于Android和iOS,...

    admob ane android ios 稳定附例子详细教程

    【标题】"admob ane android ios 稳定附例子详细教程"涉及的主要知识点是Adobe Air应用开发中集成Google AdMob广告网络的过程,适用于Android和iOS平台。AdMob ANE(Adobe Native Extension)是一种扩展,它允许Air...

    Android代码-魅族安卓平台ANE

    ANE由三部分组成:Native Library(原生库)、ActionScript接口(AS Interface)和ANE描述文件(ANE Descriptor)。原生库是用Java或C++编写的,实现了与Android系统交互的底层功能;ActionScript接口是AIR应用与ANE...

    ANE打包AIR扩展示例

    ANE由三部分组成:ActionScript接口(定义了在AS3中可调用的方法和属性)、原生库(实现这些方法的本地代码)和一个描述文件(XML,定义了ANE的结构和依赖关系)。 打包ANE的过程如下: 1. **编写原生代码**:根据...

    百度和谷歌广告的ane

    2. **下载ANE**:从官方渠道或者第三方资源获取百度广告ANE的最新版本。 3. **添加ANE到项目**:将下载的ANE文件添加到Adobe Air项目的library path中。 4. **配置ANE**:在项目配置文件(XML或JSON)中声明ANE依赖...

    移动MM ane 附源码

    开发者可以直接在Flash项目中引用这个ANE,以实现Android设备上的支付流程,例如内购、充值等。 5. MMPayAne.zip、MmPayChargeAne.zip: 这两个文件可能是ANE的源代码或者不同版本的编译结果。MMPayAne.zip可能包含...

    ane打包范例及注意事项

    4. **ANE发布**:在ANE开发完成后,将其上传到自建服务器或第三方库平台,供其他开发者下载使用。记得提供详细的使用文档,包括安装步骤、API示例和注意事项。 最后,关于ANE开发的一些个人经验分享: 1. **版本...

    ANE调用原生对话框

    7. **注意事项**:可能包含一些常见问题、兼容性问题以及解决办法,比如不同平台的API差异,或者ANE版本与AIR SDK版本的匹配。 由于没有具体的博客内容,以上内容是根据通常的ANE教程结构推测的。如果要深入了解这...

    银联ANE

    在压缩包中,"代码"部分通常包含ANE的Java或Objective-C实现,这些代码与Android和iOS的银联SDK对接,处理支付流程中的加密、验证等关键步骤。开发者可以查看和学习这部分代码,以理解ANE的工作原理,并根据需要进行...

    Android代码-安卓豌豆荚平台ANE

    wandoujiaANE 安卓豌豆荚平台ANE 编写ANE过程 .../jar/ (Android Project) /build/ (ant project to build ane file.) /ANETestApp/ (ActionScript Mobile Project)-Demo used ane4wdj If any doub

Global site tag (gtag.js) - Google Analytics