相关疑难解决方法(0)

直接在c ++中访问Android APK资产数据,无需Asset Manager和复制

我在我的引擎中使用纯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)

c++ android native apk native-activity

11
推荐指数
1
解决办法
1万
查看次数

标签 统计

android ×1

apk ×1

c++ ×1

native ×1

native-activity ×1