我在我的引擎中使用纯C++在android中创建游戏引擎.没有单个java文件.基本上它是一个只应存储到外部存储器的游戏.当我通过adb手动将我的资产数据移动到我的外部SD卡时,游戏运行良好且稳定.
adb push ..\..\Bin\Data /sdcard/Android/data/com.fantasyhaze.%SMALL_PACKAGE_NAME%/files/Data/
Run Code Online (Sandbox Code Playgroud)
这不是一个好的解决方案,因为它无法交付.因此,我在Assets文件夹中的资产数据在构建过程中被移动到apk文件中,具有以下结构:
Assets/Data/MoreFolders/Withsubfolders Assets/Data/EngineData.zip Assets/Data/ScriptData.zip
但我不知道文件系统上的那些文件在c ++代码中访问它们的位置.
所以我试图获取文件目录的路径.由于本机活动状态中的错误,我必须以正常代码检索信息.
// bug in 2.3 internalDataPath / externalDataPath = null using jni code instead
//FHZ_PRINTF("INTERNAL inter PATH = %s\n", state->activity->internalDataPath);
//FHZ_PRINTF("EXTERNAL inter PATH = %s\n", state->activity->externalDataPath);
Run Code Online (Sandbox Code Playgroud)
相当于android.os.Environment.getFilesDir()和android.os.Environment.getExternalStorageState()等的c ++代码
// getPath() - java
JNIEnv *jni_env = Core::HAZEOS::GetJNIEnv();
jclass cls_Env = jni_env->FindClass("android/app/NativeActivity");
jmethodID mid_getExtStorage = jni_env->GetMethodID(cls_Env, "getFilesDir","()Ljava/io/File;");
jobject obj_File = jni_env->CallObjectMethod( gstate->activity->clazz, mid_getExtStorage);
jclass cls_File = jni_env->FindClass("java/io/File");
jmethodID mid_getPath = jni_env->GetMethodID(cls_File, "getPath","()Ljava/lang/String;");
jstring obj_Path = (jstring) jni_env->CallObjectMethod(obj_File, mid_getPath);
const char* path …
Run Code Online (Sandbox Code Playgroud)