android_app->活动 - > internalDataPath在2.3.8 N

2019-07-29 11:39发布

为了让在哪里我测试了这个,HTC Desire S的,安卓2.3.5和NDK-R8规范。

我有在NDK,经R 7b和NDK-R8访问使用android_app->活动 - > internalDataPath或externalDataPath,因为它们都是空的地方读写的目录问题。 我看到,这已经张贴在以前的版本和更新正想这个根据这个帖子来解决: -

我怎样写与NativeActivity的内部存储文件系统?

现在,也许这被固定在冰淇淋三明治但理想是:就我的工具链完美支持向后兼容性,以便对付那些谁不更新。 所以我的问题是有没有一个已知的修复或我必须手动添加,如“/data/data/com.example.mytest/files/somefile.dat”的目录结构,直到它固定的吗?

Answer 1:

从NDK下面的作品,而不使用Java:

const char* path = app->activity->internalDataPath;
if (!path) {
    JNIEnv* jni;
    app->activity->vm->AttachCurrentThread(&jni, NULL);

    jclass activityClass = jni->GetObjectClass(app->activity->clazz);
    jmethodID getFilesDir = jni->GetMethodID(activityClass, "getFilesDir", "()Ljava/io/File;");
    jobject fileObject = jni->CallObjectMethod(app->activity->clazz, getFilesDir);
    jclass fileClass = jni->GetObjectClass(fileObject);
    jmethodID getAbsolutePath = jni->GetMethodID(fileClass, "getAbsolutePath", "()Ljava/lang/String;");
    jobject pathObject = jni->CallObjectMethod(fileObject, getAbsolutePath);
    path = jni->GetStringUTFChars((jstring)pathObject, NULL);

    jni->DeleteLocalRef(pathObject);
    jni->DeleteLocalRef(fileClass);
    jni->DeleteLocalRef(fileObject);
    jni->DeleteLocalRef(activityClass);

    app->activity->vm->DetachCurrentThread();
}


文章来源: android_app->activity->internalDataPath still NULL in 2.3.8 NDK r8