Unity 生成 Android App Bundle(aab) (二)

目前知道的生成aab的方式有:

一、使用Unity3d自带的方式

  PS:小于150MB小游戏使用。超出150MB的aab无法上架google

二、使用google插件中Separate Base APK Asset(类似APK+OBB)

  插件下载地址:https://github.com/google/play-unity-plugins/releases

  这个是最方便的方式,类似unity提供的apk+obb方式,和obb一样把打好的asset bundle包放到StreamingAssets目录,勾选Separate Base APK Asset然后打包就行,不需要考虑超出150MB的问题。

  步骤:

  1、下载并导入插件com.google.android.appbundle

  2、打开Asset Delivery Settings面板并勾选Separate Base APK Asset

  3、点击Google--Build Android App Bundle/Build and Run

  

  PS:我遇到的报错:您的 Android App Bundle 包含的 BundleConfig.pb 文件无效

  错误原因:我们工程的asset bundle的粒度最小文件过多,导致打出的包上传google报错,经过几次删asset bundle包测试,发现aab文件里的BundleConfig.pb文件过大就会报错(测试是超过1MB都会报错),不得不放弃这种简单快捷的方式改用第三种方式种方式

  BundleConfig.pb里包含了所有ab包信息

 三、使用google插件中Play Asset Delivery Unity API

  Play Asset Delivery Unity API有两种方式:  使用插件界面创建资源包  使用 API创建资源包  

  注意:这种方式asset bundle文件都不能放到了StreamingAssets目录了

  官方提供的示例:https://developer.android.com/codelabs/unity-gamepad#0

  区别:

  使用插件界面创建资产包只能配置assetbundle,使用API创建资源包有个AssetPack的概念,里面也可以不包含assetbundle

  使用插件界面创建资产包:

   这种方式不推荐

  1、asset bundle文件数量不能超过50

  2、对于名称的要求:资产包名称必须以字母开头,并且只能包含字母、数字和下划线

  我们的项目不符合这两个条件,所以最终使用API创建资源包

 

  API创建资源包

  官方给的示例demo,或者资源包打包配置说明获取资源包接口说明很详细了

  修改如下:

  1、下载并导入插件

  2、原本的StreamingAssets的资源拿出来单独放个文件夹,如果超过1g则分成两个文件夹,根据资源包打包配置说明设置1g的为InstallTime,其他为FastFollow(大小不能超过512)

  资产包配置方式

  ps:

    1、简单直接分成两个资产包Aseet Pack是因为:上线项目,obb方式、所有都在StreamingAssets里、大小目前1.1g,所以也没考虑OnDemand

    2、StreamingAssets里的资源原本是有文件夹目录的,分放到两个资产包文件夹里不能有相同路径,否则报错。比如:assetPack1/asset/a.ab、assetPack2/asset/b.ab

  3、因为有OnDemand资产包,所以启动的时候检测下载、下载包体大小、下载进度、下载等,接口说明

  4、修改assetbundle获取方式。接口说明

  ps:

    1、我们有很多上千lua文件和几千ab包,加载走的路径加载。按照给的接口方式加载会很慢,加载很耗时。后来改为还是按照路径走,路径根据资产包类型有些变化

  www方式 非www方式
原本的StreamingAssets string.Format("jar:file://{0}!/assets/a.ab", Application.dataPath); string.Format("{0}!assets/a.ab", Application.dataPath);
InstallTime string.Format("jar:file://{0}!/assets/{1}/a.ab", Application.dataPath,"assetpack"); string.Format("jar:file://{0}!assets/{1}/a.ab", Application.dataPath,"assetpack");
OnDemand/FastFollow string.Format("file://{0}/a.ab", assetPackFilePath); string.Format("{0}/a.ab", assetPackFilePath);

    assetPackFilePath:这个路径会变,所以我在资源包下载完毕后,根据资产包里肯定会存在的一个资产调用PlayAssetPackRequest.GetAssetLocation() 获取 AssetLocation 对象,AssetLocation.Path是资产包的路径

    

原文地址:https://www.cnblogs.com/wangle/p/15440176.html