Adobe 本机扩展:如何将第三方库 (.jar) 打包到我的 Flex 应用程序的 Android 本机扩展中?
Adobe Native Extensions: How do I package third party libraries (.jar) in a Android Native Extension for my Flex App?
这不是一个重复的问题,我将post链接到'accepted'答案对我不起作用的问题。
几周来,我一直在尝试为我的 flex android 应用程序集成 第三方库,但没有成功。不幸的是,没有可靠的端到端文档。 little Adobe 关于该主题的记录至少可以说是不够的。
我使用的工具:
- ADT 从命令行打包 ANE Windows 7.
- Flash Builder 打包最终的 APK(ANE 与 flash 部分)
我的 ANE 目录结构:
我正在使用的ADT命令:
<Adt path>\adt -package -storetype PKCS12 -keystore ./cert.p12 -storepass <password> -target ane myane.ane ./build/ane/extension.xml -swc ./build/ane/*.swc -platform Android-ARM -platformoptions platform.xml -C ./build/ane/Android-ARM/ . -platform Android-x86 \ -C ./build/ane/Android-ARM/ .
以下是我参考过但对我不起作用的关于 Stack Overflow 的几个问题:
Question#1:可接受的答案是使用 java 中的 JAR 工具简单地组合两个 JAR 文件。它对我不起作用,我在尝试访问 ThirdPartyJar.jar 内的任何 class 时收到 NoClassDefFound 错误。我像这样从 Eclipse 中导出我的 Native Jar:
我的疑问是,在组合这两个 JAR 时 我在哪里定义依赖关系?JAR 的简单组合如何为接受答案的其他人工作?
Question#2 :此处接受的答案讨论了创建平台选项 XML,它定义了上述 'packaged dependency'。似乎更符合逻辑。我尝试创建它,如上面的文件夹结构和我正在使用的 adt 命令所示。 'platform.xml' 的外观如下:
<platform xmlns="http://ns.adobe.com/air/extension/4.0">
<packagedDependencies>
<packagedDependency>ThirdPartyJar.jar</packagedDependency>
</packagedDependencies>
<packagedResources>
</packagedResources>
</platform>
起初,我在尝试构建 ANE 时遇到 'Namespace should be same as extension.xml' 错误,但在我将它们都更改为“...../4.0”后,我可以构建 ANE 而不会出现任何错误.但是,当我在我的 Flex 项目中包含 ANE 并尝试 运行 As > Mobile Application 时,它会给我这个错误:
然后我会在我的 Android 本机项目中重命名 strings.xml 文件,重新构建 ANE,得到这个错误:
如何让它工作?在这两种解决方案之间,我尝试了无数种方法将两个 JAR 打包在一起,但就是行不通!
使用平台选项方法的第二种方法是可用的最佳方法。
Android 和 AIR 的打包依赖项问题几乎总是由 AIR SDK 中的构建工具引起。旧版 SDK 中包含的版本不够新,无法使用 Google Play 库中的最新功能,也无法使用一些较新的 SDK。
如果您安装了 Android SDK 构建工具,那么您可以将 dx.jar 文件从 build-tools/x.x.x/lib/dx.jar 复制到同一文件中您的 AIR SDK 位于此处:
AIRSDK/lib/android/bin/dx.jar
您必须将 AIR SDK 中的那个替换为 Android 构建工具中的那个,而不是相反。
我也强烈建议您此时更新 adb
。更新 adb
可以解决很多连接和调试问题。
您不应使用版本 > 20.0 的 Android 构建工具。任何高于 20.0 的版本目前都存在 AIR 打包程序问题。
如果您使用 AIR 18+,构建工具已更新到 v20.0.0,您不必更新构建工具,除非您使用更现代的功能(例如 android 支持v13 库)。
这不是一个重复的问题,我将post链接到'accepted'答案对我不起作用的问题。
几周来,我一直在尝试为我的 flex android 应用程序集成 第三方库,但没有成功。不幸的是,没有可靠的端到端文档。 little Adobe 关于该主题的记录至少可以说是不够的。
我使用的工具:
- ADT 从命令行打包 ANE Windows 7.
- Flash Builder 打包最终的 APK(ANE 与 flash 部分)
我的 ANE 目录结构:
我正在使用的ADT命令:
<Adt path>\adt -package -storetype PKCS12 -keystore ./cert.p12 -storepass <password> -target ane myane.ane ./build/ane/extension.xml -swc ./build/ane/*.swc -platform Android-ARM -platformoptions platform.xml -C ./build/ane/Android-ARM/ . -platform Android-x86 \ -C ./build/ane/Android-ARM/ .
以下是我参考过但对我不起作用的关于 Stack Overflow 的几个问题:
Question#1:可接受的答案是使用 java 中的 JAR 工具简单地组合两个 JAR 文件。它对我不起作用,我在尝试访问 ThirdPartyJar.jar 内的任何 class 时收到 NoClassDefFound 错误。我像这样从 Eclipse 中导出我的 Native Jar:
我的疑问是,在组合这两个 JAR 时 我在哪里定义依赖关系?JAR 的简单组合如何为接受答案的其他人工作?
Question#2 :此处接受的答案讨论了创建平台选项 XML,它定义了上述 'packaged dependency'。似乎更符合逻辑。我尝试创建它,如上面的文件夹结构和我正在使用的 adt 命令所示。 'platform.xml' 的外观如下:
<platform xmlns="http://ns.adobe.com/air/extension/4.0">
<packagedDependencies>
<packagedDependency>ThirdPartyJar.jar</packagedDependency>
</packagedDependencies>
<packagedResources>
</packagedResources>
</platform>
起初,我在尝试构建 ANE 时遇到 'Namespace should be same as extension.xml' 错误,但在我将它们都更改为“...../4.0”后,我可以构建 ANE 而不会出现任何错误.但是,当我在我的 Flex 项目中包含 ANE 并尝试 运行 As > Mobile Application 时,它会给我这个错误:
然后我会在我的 Android 本机项目中重命名 strings.xml 文件,重新构建 ANE,得到这个错误:
如何让它工作?在这两种解决方案之间,我尝试了无数种方法将两个 JAR 打包在一起,但就是行不通!
使用平台选项方法的第二种方法是可用的最佳方法。
Android 和 AIR 的打包依赖项问题几乎总是由 AIR SDK 中的构建工具引起。旧版 SDK 中包含的版本不够新,无法使用 Google Play 库中的最新功能,也无法使用一些较新的 SDK。
如果您安装了 Android SDK 构建工具,那么您可以将 dx.jar 文件从 build-tools/x.x.x/lib/dx.jar 复制到同一文件中您的 AIR SDK 位于此处:
AIRSDK/lib/android/bin/dx.jar
您必须将 AIR SDK 中的那个替换为 Android 构建工具中的那个,而不是相反。
我也强烈建议您此时更新 adb
。更新 adb
可以解决很多连接和调试问题。
您不应使用版本 > 20.0 的 Android 构建工具。任何高于 20.0 的版本目前都存在 AIR 打包程序问题。
如果您使用 AIR 18+,构建工具已更新到 v20.0.0,您不必更新构建工具,除非您使用更现代的功能(例如 android 支持v13 库)。