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是资产包的路径

        

  • 相关阅读:
    iOS开发工具
    Runtime 自动化归档
    iOS事件拦截及应用
    NoSuchFieldError
    微信开放平台创建android应用时怎么获取应用签名
    高德地图添加marker及反地理编码获取POI
    快速创建导航栏
    Android Studio 工具栏添加常用按钮
    undefined is not an object (evaluating 'RNFetchBlob.DocumentDir')
    React-Native集成到已有项目中的总结
  • 原文地址:https://www.cnblogs.com/wangle/p/15440176.html
Copyright © 2011-2022 走看看