fnn在JNI C代码中获取失败的文件放在android应用程序的资源文件夹中

时间:2016-03-23 12:42:33

标签: java android c android-assets

我在android应用程序的assets文件夹中保留了一些文件。

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

现在我在移动设备中安装apk

并且该应用程序在使用JNI接口进行c编程时有一些代码。

现在我在该程序的c编程中fopen("myfile","r"); 调用失败。

/data/data/com.packagename/something

我知道安装apk安卓副本资产文件到fopen()

所以有人知道这条路,所以我可以在fopen("/sdcard/myfile","r");

中提供

或者是否有其他方法可以在C编程中打开该文件。

如果我将这些文件保存在sdcard文件夹中并访问Regex.IsMatch,那么它可以正常工作。但我想将这些文件仅保留在资源文件夹中

2 个答案:

答案 0 :(得分:6)

您可以使用资产管理器访问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());

答案 1 :(得分:0)

我发现的一种方法是在代码中编写测试行,例如:

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

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