zoukankan      html  css  js  c++  java
  • 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是资产包的路径

        

  • 相关阅读:
    BF算法和KMP算法
    Python课程笔记 (五)
    0268. Missing Number (E)
    0009. Palindrome Number (E)
    0008. String to Integer (atoi) (M)
    0213. House Robber II (M)
    0198. House Robber (E)
    0187. Repeated DNA Sequences (M)
    0007. Reverse Integer (E)
    0006. ZigZag Conversion (M)
  • 原文地址:https://www.cnblogs.com/wangle/p/15440176.html
Copyright © 2011-2022 走看看