打开在JNI C代码获取失败的文件放置在Android应用程序的资产文件夹

我已经保存在Android应用程序的资产文件夹中的一些文件。

现在我编译该应用程序并获取apk。 [当我提取apk apk文件是在那里的资产文件夹]

现在我在移动设备上安装该apk

并在该应用程序有一些代码在c编程与JNI接口。

现在我的fopen()调用该文件的c编程失败。

 fopen("myfile","r"); 

我知道,同时安装apk Android复制资产文件到/data/data/com.packagename/something

那么有谁知道这条路,所以我可以在fopen()

或者有没有其他方法在C编程中打开该文件。


如果我将这些文件保存在SD卡文件夹中,并像fopen("/sdcard/myfile","r"); 那么它的工作文件。 但我想保留这些文件只在资产文件夹

  • 在Xamarin Android中启用Multi-Dex后出现错误
  • 如何使用c ++ 11支持为android作为共享库构建boost
  • Android中的OpenCV模板匹配示例
  • C#.NET中的MP3stream媒体4.5.1在三星6S上的MVC 5.2.2
  • 在最近的NDK更新之后,ndk-build无法构buildSuperpoweredaudio库
  • 如何确定wifi ap / network使用的wifi频道号码?
  • 如何编译和运行Android系统上的C / C ++程序
  • 在Go中将C.jstring转换为本地string
  • 您可以使用资产pipe理器以JNI代码访问资产。 这是NDK的一部分。

    http://developer.android.com/ndk/reference/group___asset.html

    就像是:

     EXPORT_API void LoadAsset(char* filename, jobject assetManager){ AAssetManager* mgr = AAssetManager_fromJava(env, assetManager); AAsset* asset = AAssetManager_open(mgr, filename, AASSET_MODE_BUFFER); AAsset_read(asset, ...); } 

    然后在Java中就像这样:

     LoadAsset("myfile", getContext().getAssetManager()); 

    我find的一种方法是在代码中编写一行testing代码,如下所示:

     System.out.println("Working Directory = " + System.getProperty("user.dir")); 

    现在,如果您知道Android资产的存储/data/data/com.packagename/assets/file.png ,例如/data/data/com.packagename/assets/file.png ,那么您将知道资产的相关path或绝对path。 我希望这对你有用,它帮助了我!