打开在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"); 那么它的工作文件。 但我想保留这些文件只在资产文件夹

您可以使用资产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。 我希望这对你有用,它帮助了我!