Android 使用 unity 导出obb包

1.通过unity 导出 包含obb的工程。

在这里插入图片描述

2.按照google 官方给定的obb命名方式,已经存放路径进行操作

Obb命名方式

命名方式:[main | patch]。<扩展版本>。<程序包名称> .obb

eg:main.314159.com.example.app.obb

2.1存放路径

Sd\Android\obb\package name\ main.versoncode.packagename.obb

3.使用jobb 脚本进行自行编译 【未测试通过】

脚本位置D:\normalsoft\sdk\tools\bin\jobb.bat

D:\normalsoft\sdk\tools\bin\jobb.bat -d E:\reWorldGame\unity\src\main\assets\ -o E:\reWorldGame\unity\src\main\out.obb -pn
com.codereview.reworldhaiwai -pv 10000

4.在本地测试obb包并尝试合并

在这里插入图片描述
如图放到指定的路径下

4.1 方法二 Android 文件系统,默认会创建一个Android/obb文件,直接拖进去即可。sdcard下的obb其实就是映射到了系统文件下的Android/obb

5.在显示Unity场景之前,挂载Obb文件。

本例在Application中调用该方法。进行untiy挂载

eg:
    public void mountExpansion() {
        Logger.d("开始挂载obb 文件");
        storageManager = (StorageManager) getContext()
                .getSystemService(Context.STORAGE_SERVICE);
        String packageName = getPackageName();
        String filePath = Environment.getExternalStorageDirectory()
                + "/Android/obb/" + packageName + "/" + "main."
                + AppConfig.VERSION_CODE + "." + packageName + ".obb";
        Logger.d("开始 obb path=" + filePath);
        final File mainFile = new File(filePath);
        if (mainFile.exists()) {
            Logger.d("STORAGE", "FILE: " + filePath + " Exists");
        } else {
            Logger.d("STORAGE", "FILE: " + filePath + " DOESNT EXIST");
        }
        String key = "thisIsMyPassword";
        if (!storageManager.isObbMounted(mainFile.getAbsolutePath())) {
            if (mainFile.exists()) {
                if (storageManager.mountObb(mainFile.getAbsolutePath(), null, onObbStateChange)) {
                    Logger.d("STORAGE_MNT", "SUCCESSFULLY QUEUED");
                } else {
                    Logger.d("STORAGE_MNT", "FAILED");
                }
            } else {
                Logger.d("STORAGE", "Patch file not found");
            }
        }

    }

    OnObbStateChangeListener onObbStateChange = new OnObbStateChangeListener() {
        @Override
        public void onObbStateChange(String path, int state) {
            super.onObbStateChange(path, state);
            Logger.d("开始 PATH = "+ path);
            Logger.d("开始 STATE = "+state + "");
            if (state == OnObbStateChangeListener.MOUNTED) {
                expansionFilePath = storageManager.getMountedObbPath(path);
                Logger.d("开始 STORAGE-->MOUNTED" + expansionFilePath);
            } else {
                Logger.d("开始 Path: " + path + "; state: " + state);
            }
        }
    };

输出内容如下:

Google obb监听回调

20 = ERROR_INTERNAL ,内部错误

obb包无法自动合并问题,最终追踪问题在于,obb包中的0kb文件的值与清单文件中build-id的值不一致导致

   <meta-data android:name="unity.build-id"
        android:value="505147e1-23d4-4086-ae96-fa8a68e8ef86"/>

    <meta-data
        android:name="unity.splash-mode"
        android:value="2" />
    <meta-data
        android:name="unity.splash-enable"
        android:value="true" />

如图

obb包中0kb文件,必须与清单文件build-id的值一致

在这里插入图片描述

感觉有问题的地方:

1.unity 导出obb包本身存在问题
2.Android 集成方式问题,排查未发现明显问题

结论

1.更改包名applicationid不影响obb合并
2.签名不一致不会受到影响
3.360加固之后,obb合并不受影响
4.不需要使用AssertManager 进行obb挂载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灯塔@kuaidao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值