下面是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。这可能是显示缓存目录到本机的名称更优雅的方式。 –