4

我想知道如何从本机代码(即 C++ 文件)直接访问图像、声音文件等资源。实际上,我正在寻找任何可以帮助我使用asset_manager_jni.h 方法的示例。

寻找建议。提前致谢。

带着敬意,

阿图尔·普拉卡什·辛格

4

2 回答 2

7

好吧,您可以访问 stdio.h。因此,如果它位于已知位置(例如在 SD 卡上),您可以将其用作路径。网上有很多关于热使用 stdio(fopen、fclose 等)的教程。

问题是您捆绑到 apk 本身的资源(在 res/raw 或资产中)在安装后仍留在 apk 中。更糟糕的是,默认情况下,它们将被压缩,这使得读取它不可行。这可以避免,最简单的方法是将资产重命名为具有 .mp3 扩展名(或有其他扩展名)。这样做的原因是因为默认情况下,.mp3 不被压缩,无论它是否实际上是一个 mp3 文件)。如果您不喜欢以 .mp3 结尾的所有资产命名,您还可以使用其他扩展,以及告诉工具不要压缩数据的方法。

所以,你在这里有几个选择:

  1. 第一次运行时从网上下载资源,将它们放在不显眼的地方(最好在下载时从 sdk 获取该路径),然后使用它。

  2. 将您的资源存储在 apk 中(记住 .mp3 扩展名,在 assets 文件夹中)。在您第一次运行时,将资产提取到您有权访问的文件夹(并且不会惹恼用户),然后使用那里的资源。

  3. (我所做的)将您的资源存储在 apk 中(再次为 .mp3),并使用 jni 直接从 apk 中读取。是的,jni 有点慢,但是无论如何您都不应该从文件系统中读取那么多内容,当然也不应该处于性能临界点。Nvidia 有一些非常有用的代码可以使用,你可以在这里找到,如果我记得的话,它在示例代码中。在 libs 文件夹中,您可以使用一些与 stdio 匹配的优秀通用库,但它也从 apk 本身读取。

希望能帮助到你。

于 2011-07-19T05:25:21.293 回答
1

我曾经使用过这个技巧:

mv $file lib/lib%${file}.so
于 2011-07-20T15:49:21.070 回答