下面是Ertebolle指的GetMethodID/CallObjectMethod過程是在NDK可用。如果您正在使用純原生應用程序(如由Visual Studio 2015構建)並且無法使用Java代碼,則這是必需的。
std::string android_temp_folder(struct android_app *app) {
JNIEnv* env;
app->activity->vm->AttachCurrentThread(&env, NULL);
jclass activityClass = env->FindClass("android/app/NativeActivity");
jmethodID getCacheDir = env->GetMethodID(activityClass, "getCacheDir", "()Ljava/io/File;");
jobject cache_dir = env->CallObjectMethod(app->activity->clazz, getCacheDir);
jclass fileClass = env->FindClass("java/io/File");
jmethodID getPath = env->GetMethodID(fileClass, "getPath", "()Ljava/lang/String;");
jstring path_string = (jstring)env->CallObjectMethod(cache_dir, getPath);
const char *path_chars = env->GetStringUTFChars(path_string, NULL);
std::string temp_folder(path_chars);
env->ReleaseStringUTFChars(path_string, path_chars);
app->activity->vm->DetachCurrentThread();
return temp_folder;
}
可以使用'libcore'來調用'setenv()',參見http://stackoverflow.com/a/22315463/192373。這可能是顯示緩存目錄到本機的名稱更優雅的方式。 –