来自: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)

2012-11-19 13:45:14 上传

下载次数: 98
下载积分: 银子 -1 两

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

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 for Android]Java接口部分引用第三方JAR的解决办法相关推荐

  1. Android Studio 在项目中引用第三方jar包

    在Android Studio项目中引用第三方jar包的方法: 步骤: 1.在build.gradle文件中添加如下代码: 备注:要添加在Android作用域下 sourceSets {main {j ...

  2. Android Proguard 不混淆所有第三方jar(忽略配置设置)

    今天给大家分享一个只混淆自己的项目代码而不混淆所有第三方jar的方法(没错,是所有的第三方都不进行混淆,无论来什么第三方,都不需要动混淆配置) 不混淆所有第三方重大突破 今天又被同事逼迫看了一下Pro ...

  3. mapreduce引用第三方jar

    要想让mapreduce程序引用第三方jar文件, 可以采用如下方式: 通过命令行参数传递jar文件, 如-libjars等; 直接在conf中设置, 如conf.set("tmpjars& ...

  4. maven引用第三方jar包的解决方法

    目录 一.指定路径引用 二.先安装再引用 maven有两种引用第三方jar包的形式:一种是scope为system,直接指定jar路径引用:另一种是先安装到本地仓库再引用. 一.指定路径引用 要想直接 ...

  5. Android Studio的使用导入第三方Jar包

    目录 Android Studio的使用导入第三方Jar包 Android Studio的使用导入第三方Jar包 sourceSets {main {jniLibs.srcDirs = ['libs' ...

  6. android service常驻通知栏,android实现常驻通知栏遇到的问题及解决办法

    实现常驻通知栏时遇到的问题: 无论如何就是不显示通知,查看日志发现貌似报错了: 2020-06-28 14:11:34.923 6387-6387/xxx E/CrashReport: android ...

  7. Android studio 实验过程中遇到的问题之android.support.v7.app.AppCompatActivity不能使用的解决办法

    android.support.v7.app.AppCompatActivity不能使用的解决办法 在构建项目时使用 android.support.v7.XX android.support.v4. ...

  8. 关于eclipse的Java文件前面有红色感叹号的解决办法

    关于eclipse的Java文件前面有红色感叹号的解决办法 出现红色感叹号的情况是你的builderpath里面出现了一些双重的jar结构 解决的方法就是在你的Java文件上面右键buildpath ...

  9. android studio 无法搜索插件、下载插件解决办法

    android studio 无法搜索插件.下载插件解决办法 解决无法搜索问题 解决无法安装的问题 在 windows 系统上使用 android studio 3.2版本无法搜索下载插件,但是2.3 ...

最新文章

  1. ESP8266 问题
  2. 转载:python pyppeteer手动、离线安装 chromium
  3. 利用shell脚本统计代码行数
  4. 关于0基础磁盘管理(gpt UEFI...)最好的一篇文章(来自gentoo linux)
  5. VC++动态库封装及调用
  6. GS3D An Efficient 3D Object Detection Framework for Autonomous Driving算法解析
  7. (博主可帮找错)Servlet.service() for servlet [dispatcherServlet] path [] threw exception feign.Feig,可截图私聊博主
  8. SQL语句——查询语句
  9. 图像的灰度化、二值化
  10. HTML项目答辩演讲稿,办公楼毕业设计答辩演讲稿(答辩自述)
  11. 课程表里的表表机器人_机器人课程表
  12. 自由度+凝固度+统计的新词发现
  13. AVI音视频封装格式学习(四)——linux系统C语言AVI格式音视频封装应用
  14. 爬虫python下载网站所有图片_爬取某图片网站多页图片的python爬虫
  15. UltraEdit最新版v27软件下载 程序员必用高级文本编辑器
  16. CC00047.bdpositions——|Hadoop实时数仓.V27|——|项目.v27|需求三:数据处理增量统计广告.V1|——|需求分析|
  17. 亮紫色晶体meso四(4-氨基苯基)卟啉TAPP/TAPPPt/TAPPCo/TAPPCd/TAPPZn/TAPPPd/TAPPCu/TAPPNi/TAPPFe/TAPPMn金属配合物-齐岳供应
  18. 考研调剂信息2020计算机专业,30所院校2020考研调剂信息汇总!马上收藏备用!...
  19. wordPress 安装
  20. 网络管理技术的亮点以及下一步发展趋势

热门文章

  1. 测试中如何管理外包质量_【项目管理】资深游戏测试总监详解质量管理工作的9个步骤...
  2. opc读取ab的plc数据_使用OPC的模式去连接PLC进行AB SLC-5_04数据的采集
  3. 3D旋转(CSS3)
  4. PCL之求点云的BoundingBox
  5. left join 最后一条_一条Mysql查询语句的西天取经之路,你真的了解吗?
  6. Leetcode 17 - Letter Combinations of a Phone Number
  7. 工作问题总结-----付款
  8. Ethernet、VLAN、QinQ
  9. Django 1.10中文文档-聚合
  10. 2021-03-14Java大数据Week2