首页 > 其他分享 >Android 使用 unity 导出obb包

Android 使用 unity 导出obb包

时间:2022-11-04 12:04:02浏览次数:81  
标签:obb STORAGE state unity Android Logger


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

Android 使用 unity 导出obb包_android

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包并尝试合并

Android 使用 unity 导出obb包_android_02


如图放到指定的路径下

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的值一致

Android 使用 unity 导出obb包_android_03

感觉有问题的地方:

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

结论

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


标签:obb,STORAGE,state,unity,Android,Logger
From: https://blog.51cto.com/u_15861646/5823437

相关文章

  • Android LocalBroadcastManager 使用
    前言LocalBroadcastManager简单使用。1.注册【添加IntentFilter】2.反注册3.发广播publicclassMain2ActivityextendsAppCompatActivity{@Overrideprotect......
  • Android 英文数字混排导致提前换行完美解决
    前言数字加英文混排造成,段落提前换行异常。网上可找到处理方式较多。处理方式:1.自定义TextView,测量文字宽度与父窗体宽度自行进行人为换行占主流。2.全角半角进行统一,将字......
  • android studio 4.1变更
    前言这两天被androidstudio4.1升级后遇到的问题折腾的头大。虽然自己遇到的问题和网友遇到的问题不一样。总结一句话。升级需谨慎问题归问题,这次更新还是有很多亮点。官......
  • Android 基础 MaterialButton
    项目中经常会使用到,给按钮添加边框,点击效果,圆角,icon+文字圆角。发现系统就有提供好的组件,除了CardView可以设置。androidmaterialdesign支持库中各种可以直接拿来用的组......
  • android 手机 apk安装失败对应码
    下面是从网上找到的几种常见的错误及解决方法:1、INSTALL_FAILED_INVALID_APK:无效的安装包,安装包已损坏请检查安装包是否完整。如果是xpk包,可以通过手动安装xpk来检测一......
  • Unity 常用功能代码工具集
    Unity常用功能整理安卓摄像头的调用请求与拍摄、截图//////————————SakuraNeko————————//////博客园:https://www.cnblogs.com/sakuraneko//......
  • Android 共享内存(ashmem)持续更新
    Android共享内存(ashmem)前言项目中接入讯飞语音合成,在sdk中看到MemoryFile,了解下用法发现,看到的只是冰山一角。官方介绍:SharedMemoryenablesthecreation,mapping,and......
  • Android kotlin泛型知识点梳理
    前言学习知识需要提前设立目标,带着问题学习才能有的放矢。无论是java的泛型还是kotlin语言的泛型均是写框架,写通用工具类神器。如果不熟悉泛型语法,开发过程中将会遇到很多奇......
  • Android kotlin 类委托 by,by lazy关键
    前言接触kotlin语言也有几年时间了。日常开发工作中也推荐使用kotlin,但是对于一些kotlin语言语法的细节没有进行系统学习。碎片的知识点让工作中屡屡碰壁,前些天开始学习comp......
  • 【AGC】SDK未经用户同意获取AndroidID问题
     1.AGC-接入agc的sdk检测到未经用户同意获取AndroidId的问题。问题背景:开发者接入华为性能管理、崩溃服务、华为分析等SDK后上架小米应用商店被拒,称检测到未经用户同意获取......