在 AIR 3 中围绕原生扩展支持的所有新炒作中,我还没有发现任何东西可以确认或否认可以在原生 Android 实现中包含和使用外部 JAR。
所有示例基本上都展示了与内置 Android API 挂钩的能力。但是,如果有人想使用数百个使其更容易的库之一怎么办?当然,这似乎应该是可能的。我将尝试概述我所做的事情,也许有人会发现一个缺陷:
- 使用来自第 3 方 Android 库 XYZ 的编译导入成功创建了原生 Android 库。
- 将 Android 项目导出为 JAR 文件。 注意:引用的第 3 方 JAR 位于 jar 内的 /lib 中。
- 成功创建 ActionScript 库 (SWC) 以与原生 Android 库交互。
- 从 SWC、extension.xml、Android JAR 和 library.swc(对于平台 Android-ARM,从 SWC 中提取)创建了 ANE 包。
注意:还尝试将第 3 方库放入此处概述的文件结构中:http: //help.adobe.com/en_US/air/extensions/WSf268776665d7970d-24823354 12ffea65006-8000.html#WSf268776665d7970d-6be13ace1308aaebeca-7fff。我认为这更适合使用 JNI 或其他方式执行运行时类型,所以那篇文章让我有些困惑。 - 在示例 Flex Mobile 项目中使用了 ANE。
- 在测试 DroidX 设备上构建并安装 APK 文件。
- 可以在 LogCat 中成功查看 AIR 应用程序加载(和跟踪语句)
"ActivityManager: Displayed com.me.androidapp/.AppEntry"
- 可以成功地看到 AIR 应用程序通过运行时调用本机 Android Java 代码来实例化扩展和上下文。
"mye_native: MyExtension.initialize", "mye_native: MyExtensionContext.createContext"
- 一旦 AIR 应用程序尝试调用本机函数,它就会崩溃,无法从 3rd 方 Android 库中找到类:
E dalvikvm: Could not find class 'com.thirdparty.SomeClass', referenced from method com.me.nativeExtentions.MyExtensionFunction.call
有任何想法吗?似乎它应该以这种方式工作。
我注意到的一件事是,当我将 APK 和 Dex 从我的纯 Java Android 应用程序(也有第 3 方 android 库)中分离出来时,似乎第 3 方的类已包含在其中(不仅仅是jar 参考)。当我用我的 Flex APK 做同样的事情时,我发现只有我自己的 Java 类和 Adobe 的类,并且找不到我可以看到的第 3 方类。
我在 Adobe 论坛上发布了这个,但我想我会尝试一下 SO 智囊团。谢谢你。