我想知道如何从本机代码(即C ++文件)直接访问图像,声音文件等资源。实际上我正在寻找任何可以帮助我使用asset_manager_jni.h方法的例子。
寻找建议。提前谢谢。
关心,
Atul Prakash Singh
答案 0 :(得分:7)
好吧,您可以访问stdio.h。因此,如果它位于已知位置(例如在SD卡上),您可以将其用作路径。网上有很多关于使用stdio(fopen,fclose等)的热门教程。
问题是你捆绑到apk本身的资源(在res / raw或资产中),在安装后留在apk里面。更糟糕的是,默认情况下,它们会被压缩,这使得阅读不可行。这可以避免,最简单的方法是将资产重命名为.mp3扩展名(或其他扩展名)。原因是因为默认情况下,.mp3不会被压缩,无论它是否真的是一个mp3文件)。如果您不喜欢在最后使用.mp3命名所有资产,还可以使用其他扩展程序以及告诉工具不压缩数据的方法。
所以,你有几个选择:
首次运行时从网上下载资源,将它们放在一个不显眼的地方(最好是在下载时从sdk获取该路径),并使用它。
< / LI>将您的资源存储在apk中(请记住属性文件夹中的.mp3扩展名)。在第一次运行时,将资产提取到您有权访问的文件夹(并且不会惹恼用户),并使用那里的资源。
(我的所作所为)将您的资源存储在apk(.mp3再次)中,并使用jni直接从apk中读取。是的,jni有点慢,但你不应该从文件系统读取这么多,当然也不是在性能关键点。 Nvidia有一些你可以使用的非常有用的代码,你可以找到它here,如果我记得那就在示例代码中。在libs文件夹中有一些很好的通用库,你可以使用它们匹配stdio,除了它还可以从apk本身读取。
希望它有所帮助。
答案 1 :(得分:1)
我曾经使用过这个技巧:
mv $file lib/lib%${file}.so