基础打包需要知识:
安装包大小不要超过2G,AB包数量过多会影响加载和构建,多次IO,用Gradle打包,要支持64位系统,不同的渠道包:让做sdk的人支持,提供渠道包的打包工具
配置系统环境变量,可快速执行某个exe bat命令
删除模型默认材质(因为用的是ab的,所以没用,默认的没用)
设置图集Tag
静态资源只被一个资源依赖不给ab包名(例如材质和贴图,材质生成,但是贴图不生成资源索引)
生成xlua,如果有用到lua
收集shader变体
打ab的策略:
1.先根据配置确定动态资源分包,然后根据以下原则,循环确定静态资源分包
2.只被一个(动态/静态)包依赖的资源,打进同一包
3.被多个(动态/静态)包依赖的资源,单独分一个包
4.纹理和fbx的模型,一般不生成,不给包名
打包时候下载ab资源的时候使用的unitywebrequest
ab下载的路径在Application.persistentDataPath可读可写,被称为外包路径,window在appdata/用户名下面
版本号,本次版本修改的ab文件相对于上一次和ab文件的差异的ab会记录在csv表格中
gradle工程是一个在IL2CPP文件夹下的工程
同一个游戏不同unity工程的资源的guid不能不一样,否则别人提交会有问题,资源管理的基础,图片的guid被prefab依赖
游戏运行时候是先从persistentDataPath加载ab,找不到再到内包上找
启用ab的Disable Write TypeTree,可以提高打包速度
Unity3D项目Plugins目录组织
https://blog.csdn.net/linxinfa/article/details/102978005
IPreprocessBuild
继承提供打包前,打包后接口
BuildAssetBundles
UnityWebRequest’s DownloadHandlerAssetBundle / LoadFromFile / LoadFromMemoryAsync
数据完整性校验方式
AndroidManfiest对象获得依赖
替代ab的addressable
https://blog.csdn.net/u012338130/article/details/104135468
https://blog.csdn.net/linxinfa/article/details/122390621
要注意addressable热更新之后没有删除的重复缓存问题,
下载的时候这个mergenode要选择none,某教程教我们写union,就是同个key保留了
AssetStudio 对没有加密的ab包进行逆向
Host的作用
https://blog.csdn.net/qq_35246620/article/details/66970211,一般谁做服务器谁提供一个端口给外面客户端连接,有开放端口了要配置一个Host
HybridClr
https://blog.csdn.net/u013774978/article/details/131565741
Gradle
https://linxinfa.blog.csdn.net/article/details/118553713
Jenkins
https://blog.csdn.net/linxinfa/article/details/118816132
https://www.jenkins-zh.cn/tutorial/management/mirror/ 中文社区,上面有镜像源,下载出问题先设置
jenkins的归档路径,密码,端口配置相关基本都在配置文件上
jenkins restart
unity 插件直接使用unity命令
-quit -batchmode -projectPath “C:\D\UnityProject\BuildApkAndHotUpdate” -executeMethod BuildTool.BuildApk productName=&productName -logFile C:\D\UnityProject\apk\output.log"
Bat文件
打包中常用Bat命令:
svn:
1.svn update %WorkPath% --username 用户名 --password 密码
2.svn clearup
3.svn revert * 更新之前应该先还原
4.Unity.exe -projectpath unity工程路径 -quit -batchmode -executeMethod 类名.方法名 -logFile log文件路径
5.Winrar.exe -a -r -ep1 文件夹路径 归档路径
jenkins和unity中传参,通过文件传参
6,java 安卓生成密钥
用一样的密码,密码要在打包代码里面用代码输入
打包相关参数:
EditorUserBuildSettings.development=true;
EditorUserBuildSettings.connectProfiler=true; 这个开启profiler
projectNama和版本号:
分别会显示在你手机这个app的应用信息里面
安卓需要 密钥 keystore
ios需要开发者账号和开发者证书(调试版和发布版),先注册账号进入账号界面操作,ipa跟apk一样是ios的包代表
打包常用API相关
1.String:StartWith用于判断是否是某个目录下的资源,根据路径。
2.string[] guids = AssetDatabase.FindAssets(null, SearchFolder.ToArray()); 从路径集合下搜索所有的文件返回guid列表
3.string path = AssetDatabase.GUIDToAssetPath(guids[i]);
4.AssetDatabase.GetAssetDependencyHash(path).ToString();用来生成文件的hash,增加比较效率
5.string[] dps = AssetDatabase.GetDependencies(path, false);获得path这个文件的依赖资源路径列表
6.String:SubString()例如截取到相对于Asset的路径
7.ath.GetFileNameWithoutExtension(assetPath);直接获取文件名称
8.EditorUtility.DisplayCancelableProgressBar($“动态资源:生成资源包名映射:({i}/{assetCount})”, assetPath, i * 1.0f / assetCount);进度相关显示进度条
9.EditorUtility.ClearProgressBar();清除进度条
10.HashSet 经常使用可以去重
11. var manifest = BuildPipeline.BuildAssetBundles(path:string, buildList:List, option:BuildAssetBundleOptions, buildPlatform); 用这个接口,就不用调用那个设置prefab ab包名的接口了,直接把包名和对应的assetname名传进去。相对于asset的路径。AssetBundleBuild,所有对应的文件对应一个包名
12. //设置签名
PlayerSettings.Android.keystoreName = _buildApkConfig[BuildKeystoreNameKey];
PlayerSettings.Android.keystorePass = _buildApkConfig[BuildKeystorePassKey];
PlayerSettings.Android.keyaliasName = _buildApkConfig[BuildKeyaliasNameKey];
PlayerSettings.Android.keyaliasPass = _buildApkConfig[BuildKeyaliasPassKey];
13. CSObjectWrapEditor.Generator.ClearAll();
CSObjectWrapEditor.Generator.GenAll(); XLUA的
14. Directory.GetDirectories
15. option |= BuildAssetBundleOptions.ForceRebuildAssetBundle; BuildAssetBundles的时候加上这个标签,会强制从0开始ab,否则会比对目录下只打增量修改的ab
16. Application.version可以用来判断是不是第一次安装包,热更了资源的包的这个字段还是不变
17.
VersionCode可以用来表示是不是新的版本的包
打包常见报错:
1.gradle没找到,配置一下国内镜像在settingTemplate文件里面
https://blog.csdn.net/RabbitLikeCitrus/article/details/107022571
华佗热更DLL
华佗热更dll就是用华佗把dll变成byte打进某个ab里面去,然后更新ab,下下来,从ab里面读取字节流加载成dll
Assembly.Load(dllByte.bytes)