我们需要在Android上发布c ++预建库,如何组织我们的lib使用的资源?

时间:2016-06-06 11:03:31

标签: android android-ndk

我们在android上有一个c ++项目,它将内置到.a中,然后将.a发布给我们的用户。

问题是,我们有很多资源文件,而这些资源'路径是必要的,因为一些第三方库需要它们。

Android的限制是:如果我们想在Android APK中放置一个文件,我们必须将它打包在res或资产中,而不再是单个文件,那么我们如何组织我们的资源呢?

我们的计划是要求我们的用户将我们的资源打包到APK的资产中,然后我们可以将它们提取到其他文件夹,但它不是用户友好的,您有更好的想法吗?< / p>

感谢

2 个答案:

答案 0 :(得分:2)

C ++ android项目,听起来很奇怪,可能是,你想说你有c ++ arm交叉编译的静态库.a它可以在Android项目中加载。

我想你想共享一个使用很多资源的库,你需要优雅的分发方式。

尝试创建一个具有本机功能的.jar文件:

  • 首先创建核心类导出函数并定义你的 JNI的公共本地功能。

  • 如果您需要访问活动上下文,请不要使用活动 通过参数。

  • 如果您想使用资源,您的布局将无法使用 你父的android项目。

  • 您可以使用可绘制文件,并且可以以编程方式添加布局文件(使用活动上下文)。

  • 如果您要使用某些资源,例如xml配置文件,请执行 在res / raw文件夹或assets文件夹中。

如果您具备良好的Java和JNI技能,那么这项任务就不那么困难了。

希望这些建议可以帮到你。

干杯。

答案 1 :(得分:2)

我认为您需要开发 NativeActivity 。如果您按照proper documentation进行操作,则可以创建一个可以执行任何操作的应用程序。如果您想打开资产,处理,您可以执行此操作,并从另一个应用程序启动此应用程序。

如果您真的想要使用单个库,只需在c / cpp中执行,并使用提供资产路径和aassetmanager的JNI函数调用对其进行初始化,并使用本机中的AAssetManager object。您需要包含jni.h,当然您需要使用NDK工具链和gradle或cmake工具链脚本来交叉编译库。