Android资产,C,JNI

SK9*_*SK9 8 c java-native-interface android assets

如何使用JNI从C访问Android资产,例如.txt文件?

我正在尝试"file:///android_asset/myFile.txt",并在本地"myFile.txt"中使用带有C实现文件的jni文件夹中的myFile.txt副本.

oli*_*erg 11

有资产的东西是你不能直接作为文件访问它们.这是因为资产是直接从APK读取的.安装时,它们不会解压缩到给定的文件夹.

从Android 2.3开始,有一个用于访问资产的C API.看看<android/asset_manager.h>assetManager领域<android/native_activity.h>.我从来没有使用过这个,如果你不依赖本机活动,我不确定你是否可以使用这个资产管理器API.无论如何,这不适用于Android 2.2及更低版本.

所以我看到三个选择:

  • 您可以将资产提取到某个目录中,但这会占用额外的空间
  • 你可以(bunlde和)使用像libzip这样的东西从纯粹的C.中读取APK中的资产.
  • 或者,为了避免捆绑额外的库,我个人的偏好是使用JNI从InputStream返回的Java 对象中读取C中的数据AssetManager.open().它需要一些代码,但效果很好.

  • @olivierg有一个关于如何使用JNI从AssetManager使用Inputstream的例子吗? (2认同)