8 #include "build-info.hh" 25 static JavaVM* jniVM =
nullptr;
29 std::string AndroidApiWrapper::getStorageDirectory()
31 JNIEnv* jniEnv =
nullptr;
32 jniVM->AttachCurrentThread(&jniEnv,
nullptr);
34 throw JniException(
"Java VM AttachCurrentThread() failed");
36 jclass cls = jniEnv->FindClass(
"android/os/Environment");
38 throw JniException(
"Cant find class android/os/Environment");
40 jmethodID mid = jniEnv->GetStaticMethodID(cls,
"getExternalStorageDirectory",
"()Ljava/io/File;");
42 throw JniException(
"Cant find getExternalStorageDirectory method");
44 jobject storageDirectory = jniEnv->CallStaticObjectMethod(cls, mid);
45 if (storageDirectory == 0) {
46 throw JniException(
"Cant get storageDirectory");
48 cls = jniEnv->GetObjectClass(storageDirectory);
50 throw JniException(
"Cant find class for storageDirectory object");
52 mid = jniEnv->GetMethodID(cls,
"getAbsolutePath",
"()Ljava/lang/String;");
54 throw JniException(
"Cant find getAbsolutePath method");
56 jstring storageDirectoryName =
static_cast<jstring
>(jniEnv->CallObjectMethod(storageDirectory, mid));
57 if (storageDirectoryName == 0) {
58 throw JniException(
"Cant get storageDirectoryName");
60 const char* str = jniEnv->GetStringUTFChars(storageDirectoryName,
nullptr);
62 throw JniException(
"Cant convert storageDirectoryName to C format");
64 std::string rslt(str);
65 jniEnv->ReleaseStringUTFChars(storageDirectoryName, str);
71 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm,
void* )
75 return JNI_VERSION_1_2;
78 JNIEXPORT
void JNICALL JNI_OnUnload(JavaVM* ,
void* )
Thanks to enen for testing this on a real cartridge: