美文网首页unity热更
【Unity 打包】Android App Bundle

【Unity 打包】Android App Bundle

作者: tangslover | 来源:发表于2022-04-04 20:02 被阅读0次

    简介

    从 2021 年 8 月起,新应用需要使用Android App Bundle才能在 Google Play 中发布。现在,Play Feature DeliveryPlay Asset Delivery支持大小超过 150 MB 的新应用

    Google Play 会使用您的 App Bundle 针对每种设备配置生成并提供经过优化的 APK,因此只会下载特定设备所需的代码和资源来运行您的应用。您不必再构建、签署和管理多个 APK 来优化对不同设备的支持,而用户也可以获得更小且更优化的下载文件包。

    使用环境

    Unity 版本:2018.4.36

    包体资源

    分发模式

    谷歌为开发者提供了三种分发模式:

    install-time:用户在 Google Play 平台上下载时包含的资源,应用启动后可以立即使用

    fast-follow:资源包会在用户安装应用后立即自动下载,不需要用户打开应用,但需要判断是否下载完成

    on-demand:资源包会在应用运行时下载

    资源设置

    针对 Unity 打包使用代码添加文件夹的方式进行设置

    var assetPackConfig = new AssetPackConfig();

    assetPackConfig.AddAssetsFolder("asset_base", "Assets/GoogleOutput", AssetPackDeliveryMode.InstallTime);

    打包

    针对 Unity 打包

    1.Unity 导入 Google 提供的插件,可根据自己项目需求选择下载适合的插件包,本文只涉及 App Bundle 的构建,将使用 com.google.android.appbundle 和 com.google.play.assetdelivery 插件包。

    适用于 Unity 的 Google Play 插件版本github.com/google/play-unity-plugins/releases

    2.编写打包脚本

    EditorUserBuildSettings.buildAppBundle = true;

    EditorUserBuildSettings.exportAsGoogleAndroidProject = false;

    var assetPackConfig = new AssetPackConfig();

    assetPackConfig.AddAssetsFolder("asset_base", "Assets/GoogleOutput", AssetPackDeliveryMode.InstallTime);

    Bundletool.BuildBundle(new BuildPlayerOptions() {

        target = BuildTarget.Android,

        targetGroup = BuildTargetGroup.Android,

        locationPathName = Path.Combine(Application.dataPath, "..", "Build/Android", "android-app-bundle.aab"),

            scenes = new[] {

                "Assets/Scenes/SampleScene.unity",

            },

        options = BuildOptions.None

    }, assetPackConfig);

    针对 Java 打包

    1.针对 Java 打包需要我们导出 Android 工程,并进行一定配置后,使用 Gradle 构建 app bundle

    2.编写打包脚本

    EditorUserBuildSettings.buildAppBundle = false;

    EditorUserBuildSettings.exportAsGoogleAndroidProject = true;

    BuildPipeline.BuildPlayer(new[] {

        "Assets/Scenes/SampleScene.unity",

    }, Path.Combine(Application.dataPath, "..", "Build/Android", "android-app-bundle"), BuildTarget.Android, BuildOptions.None);

    3.导出后的工程目录如图:

    Unity 导出 Android 工程目录

    4.由于构建 App Bundle 需要 Gradle 插件版本在 4.0.0 以上,如果你的版本不满足需要自己去更新 Gralde 插件,并且需要将 build.gradle 配置文件中的 com.android.tools.build:gradle:x.x.x 改为你所使用的版本。

    Android Gradle 插件版本说明 | Android 开发者 | Android Developersdeveloper.android.com/studio/releases/gradle-plugin?hl=zh-cn

    Gradle | Releasesgradle.org/releases/

    5.在根目录下创建文件夹来放你想要放进 aab 包体的资源,这里我们创建一个 asset_base 的文件夹

    6.在 asset_base 目录下创建 build.gradle 文件,并进行配置

    plugins {

      id 'com.android.asset-pack'

    }

    assetPack {

        packName = "asset_base" // Directory name for the asset pack

        dynamicDelivery {

            deliveryType = "install-time" //分发模式

        }

    }

    7.在根目录的 build.grade 文件中配置你的资源包名称

    // In the app build.gradle file:

    android {

        ...

        assetPacks = [":asset-pack-name", ":asset-pack2-name"]

    }

    8.在根目录的 settings.gradle 文件中,配置你的资源包名称

    include ':asset_base'

    9.在 asset_base 下创建 src/main/assets 目录,在该目录下放入你的资源目录

    10.在根目录下执行 gradle wrapper 命令,成功后可以在根目录下看到 gradle 文件夹

    11.在根目录下执行 .\gradlew bundleRelease 命令,成功后可以在根目录下看到 build 文件,aab 文件就在该目录下

    本地测试

    1.由于 Android 手机并不能直接安装 .aab 文件,为了更快的上手测试,我们还需要将 .aab 转成 apks,在通过 bundle-tool 工具安装到手机上,其中 bundle-tool 也需要自己准备好。

    Releases · google/bundletool (github.com)github.com/google/bundletool/releases

    2.aab 装成 apks 文件

    java -jar bundletool-all.jar build-apks --bundle=*.aab --output=*.apks

    3.apks 安装到手机

    java -jar bundletool-all-1.9.1.jar install-apks --apks=*.apks

    工程项目

    本文的项目工程已上传至 github,有需要的同学请自取。

    tangslover/google-aab (github.com)github.com/tangslover/google-aab

    参考文章

    About Android App Bundles | Android Developersdeveloper.android.com/guide/app-bundle

    相关文章

      网友评论

        本文标题:【Unity 打包】Android App Bundle

        本文链接:https://www.haomeiwen.com/subject/uzzcsrtx.html