主要問題是如果您製作純NDK解決方案,則缺失的活動對象通過主系統中的android_app結構提供給您。如果您只想創建一個可供Java開發人員使用的庫,則無法通過調用向您提供主要活動。或者,更確切地說,我沒有找到一種方法從我的C++代碼中獲取Java應用程序的主要活動。這讓我兩個選擇:
1)使用getFilesPath從Java調用,使其成爲c的方法調用++對象(也許是「初始化」)
2)給出的主要活動於C++的一部分代碼(也許在「init」中)。
我決定爲第二個。首先,我不想控制Java部分的程序員在哪裏放置什麼。其次,我覺得我會需要更多理由的活動。
void here_your_ndk_conform_name_init(JNIEnv* env,jobject mainactivity)
{
jclass cls = env->GetObjectClass(mainactivity);
jmethodID getFilesDir = env->GetMethodID(cls, "getFilesDir", "()Ljava/io/File;");
jobject dirobj = env->CallObjectMethod(mainactivity,getFilesDir);
jclass dir = env->GetObjectClass(dirobj);
jmethodID getStoragePath =
env->GetMethodID(dir, "getAbsolutePath", "()Ljava/lang/String;");
jstring path=(jstring)env->CallObjectMethod(dirobj, getStoragePath);
const char *pathstr=env->GetStringUTFChars(path, 0);
std::string strPath=pathstr;
env->ReleaseStringUTFChars(path, pathstr);
}
其中strPath的現在擁有的路徑,你可以自由地與輸入輸出流訪問內部存儲:
所以我從Jong Wook Kim剪斷一個代碼,我修改了我的需求而告終。