gpt4 book ai didi

android_app->activity->internalDataPath 在 2.3.8 NDK r8 中仍然为 NULL

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:06:04 24 4
gpt4 key购买 nike

为了说明我在哪里进行了测试,HTC Desire S、Android 2.3.5 和 ndk-r8。

我在 ndk-r7b 和 ndk-r8 使用 android_app->activity->internalDataPath 或 externalDataPath 访问本地读写目录时遇到问题,因为它们都是 NULL。我看到这已经发布在以前的版本中,并且更新将根据这篇文章解决这个问题:-

How do I write to the internal storage file system with NativeActivity?

现在也许这在 Ice Cream Sandwich 中得到修复,但这远非理想,因为我的工具链支持完美的向后兼容性以捕捉那些不更新的人。所以我的问题是是否有一个已知的修复程序,或者我是否必须手动添加目录结构,如“/data/data/com.example.mytest/files/somefile.dat”直到它被修复?

最佳答案

以下内容来自 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 在 2.3.8 NDK r8 中仍然为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10683119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com