JNI C 代码中的 fopen 对于放置在 android 应用程序资产文件夹中的文件失败
fopen in JNI C code get failed for file placed in assets folder in android application
我在 android 应用程序的资产文件夹中保留了一些文件。
现在我编译该应用程序并获得 apk。 [当我提取该 apk 时,我的文件在资产文件夹中]
现在我在移动设备上安装那个 apk
并且在该应用程序中有一些使用 JNI 接口的 C 编程代码。
现在我的 fopen()
对该文件的 c 编程调用失败了。
fopen("myfile","r");
我在安装 apk 时知道 android 将资产文件复制到 /data/data/com.packagename/something
有人知道那条路所以我可以在 fopen()
中给出
或者是否有任何其他方法可以在 C 编程中打开该文件。
如果我将这些文件保存在 sdcard 文件夹中并像 fopen("/sdcard/myfile","r");
一样访问,那么它就可以工作。但我只想将这些文件保留在资产文件夹中
您可以使用资产管理器访问 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());
我发现的一种方法是在代码中编写测试行,例如:
System.out.println("Working Directory = " +
System.getProperty("user.dir"));
现在,如果您知道 Android、/data/data/com.packagename/assets/file.png
存储您的资产的位置,那么您将知道资产的相对或绝对路径。我希望这对你有用,对我有帮助!
我在 android 应用程序的资产文件夹中保留了一些文件。
现在我编译该应用程序并获得 apk。 [当我提取该 apk 时,我的文件在资产文件夹中]
现在我在移动设备上安装那个 apk
并且在该应用程序中有一些使用 JNI 接口的 C 编程代码。
现在我的 fopen()
对该文件的 c 编程调用失败了。
fopen("myfile","r");
我在安装 apk 时知道 android 将资产文件复制到 /data/data/com.packagename/something
有人知道那条路所以我可以在 fopen()
或者是否有任何其他方法可以在 C 编程中打开该文件。
如果我将这些文件保存在 sdcard 文件夹中并像 fopen("/sdcard/myfile","r");
一样访问,那么它就可以工作。但我只想将这些文件保留在资产文件夹中
您可以使用资产管理器访问 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());
我发现的一种方法是在代码中编写测试行,例如:
System.out.println("Working Directory = " +
System.getProperty("user.dir"));
现在,如果您知道 Android、/data/data/com.packagename/assets/file.png
存储您的资产的位置,那么您将知道资产的相对或绝对路径。我希望这对你有用,对我有帮助!