适用于Android的AIR 3本机扩展-我可以/如何包括第三方库?

适用于Android的AIR 3本机扩展-我可以/如何包括第三方库?,android,air,flex-mobile,Android,Air,Flex Mobile,在AIR3中围绕本机扩展支持的所有新宣传中,我没有发现一件事证实或否认在本机Android实现中包含和使用外部JAR是可能的 所有的例子基本上都展示了钩住内置Android API的能力。但是,如果有人想使用数百个使之更容易的库中的一个呢?当然,这似乎是可能的。我将尝试概述我所做的工作,也许有人会发现一个缺陷: 使用从第三方Android库XYZ编译的导入成功创建了本机Android库 将Android项目导出为JAR文件。 注意:引用的第三方JAR位于JAR中的/lib中 已成功创建Actio

在AIR3中围绕本机扩展支持的所有新宣传中,我没有发现一件事证实或否认在本机Android实现中包含和使用外部JAR是可能的

所有的例子基本上都展示了钩住内置Android API的能力。但是,如果有人想使用数百个使之更容易的库中的一个呢?当然,这似乎是可能的。我将尝试概述我所做的工作,也许有人会发现一个缺陷:

  • 使用从第三方Android库XYZ编译的导入成功创建了本机Android库
  • 将Android项目导出为JAR文件。 注意:引用的第三方JAR位于JAR中的/lib中
  • 已成功创建ActionScript库(SWC)以与本机Android库接口
  • 从SWC、extension.xml、Android JAR和library.SWC(用于平台Android ARM,从SWC中提取)创建了一个电子包。
    注意:您也尝试过将第三方库置于此处概述的文件结构中:12ffea65006-8000.html#wsf26876665d7970d-6be13ace1308aaebeca-7fff。我认为这更适合于使用JNI或其他工具执行运行时类型,所以这篇文章让我有点困惑
  • 在Flex Mobile项目示例中使用了ANE
  • 在test DroidX设备上构建并安装APK文件
  • 可以在LogCat
    “ActivityManager:Displayed com.me.androidapp/.AppEntry”中成功查看AIR应用程序加载(和跟踪语句)
  • 可以成功地看到AIR应用程序通过运行时调用本机Android Java代码来实例化扩展和上下文<代码>“mye_native:MyExtension.initialize”,“mye_native:MyExtensionContext.createContext”
  • AIR应用程序尝试调用本机函数时,它立即崩溃,无法从第三方Android库中找到类:
    E dalvikvm:无法找到从方法com.me.nativeExtentions.MyExtensionFunction.call引用的类'com.thirdparty.SomeClass'
  • 有什么想法吗?看起来应该是这样的

    我注意到的一件事是,当我将APK和Dex从我的纯Java Android应用程序(也有第三方Android库)中分离出来时,它似乎包含了来自第三方的类(而不仅仅是jar引用)。 当我用我的Flex APK做同样的事情时,我发现只有我自己的Java类和Adobe类,而第三方类在我能看到的任何地方都找不到


    我在Adobe论坛上发布了这篇文章,但我想我应该试试这个智囊团。谢谢。

    你必须把所有的罐子合在一起。或者你自己的Ant脚本会有所帮助

    编辑以添加示例: 假设您的主扩展名jar文件是extension.jar,并且您正在external.jar中使用代码。然后可以使用Java jar工具将external.jar中的类放入extension.jar:

    jar-xf external.jar

    这将把.class文件解压缩到包文件夹中。如果顶级包是“com”,那么您可以使用以下方法将它们添加到extension.jar中:

    jar-uf extension.jar com


    (对外部jar中的每个顶级包重复第二个命令。)

    您还可以手动将库jar组合成zip文件(只需将它们重命名为.zip),然后将第三方库中的类复制到主库中,并将其重命名回.jar

    我也遇到了同样的问题,希望知道答案的人注意这个问题!我发现这也是事实。我不确定第三方JAR的EULA是否都支持这样做。组合JAR的另一个替代方法是在某个地方提取第三方JAR,然后在主Android项目中创建一个“类”文件夹引用。@DerekBromenshenkel您可以扩展该替代方法吗?我提取了jar,并将带有类的文件夹添加到ANE的本机项目(带有“addexternalclassfolder”),而不是jar文件本身;但是项目根本没有编译,它找不到类…………看起来这应该是可行的。我尝试了它,并制作了最终的flex apk,将两个jar合并到一个扩展jar文件中,但是我的应用程序崩溃了,因为它找不到第三方类。当我提取组合的JAR文件时,我看到第三方文件夹就是它应该在的地方。有没有关于我可能遗漏什么的想法?我的猜测是,这些类并没有以某种方式转换为dex代码。