/// <summary>
        /// Builds an Android App Bundle at a location specified in a file save dialog.
        /// The AAB will include asset packs configured in Asset Delivery Settings.
        /// </summary>
        public static void Build()
        {
            // Check that we're ready to build before displaying the file save dialog.
            var appBundleBuilder = CreateAppBundleBuilder();

            if (!appBundleBuilder.Initialize(new BuildToolLogger()))
            {
                return;
            }

            var aabFilePath = EditorUtility.SaveFilePanel("Create Android App Bundle", null, null, "aab");

            if (string.IsNullOrEmpty(aabFilePath))
            {
                // Assume cancelled.
                return;
            }

            var buildSettings = new AppBundleBuildSettings
            {
                buildPlayerOptions = AndroidBuildHelper.CreateBuildPlayerOptions(aabFilePath),
                assetPackConfig    = AssetPackConfigSerializer.LoadConfig()
            };

            Build(appBundleBuilder, buildSettings);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Emulates Unity's File -> Build And Run menu option.
        /// </summary>
        private static void EmulateUnityBuildAndRun()
        {
            var androidSdk         = new AndroidSdk();
            var androidSdkPlatform = new AndroidSdkPlatform(androidSdk);
            var androidBuildTools  = new AndroidBuildTools(androidSdk);
            var javaUtils          = new JavaUtils();
            var apkSigner          = new ApkSigner(androidBuildTools, javaUtils);
            var androidBuilder     = new AndroidBuilder(androidSdkPlatform, apkSigner);
            var buildToolLogger    = new BuildToolLogger();

            if (!androidBuilder.Initialize(buildToolLogger))
            {
                return;
            }

            if (EditorUserBuildSettings.androidBuildSystem == AndroidBuildSystem.Gradle)
            {
                EditorUserBuildSettings.exportAsGoogleAndroidProject = false;
            }

            var artifactName       = AndroidAppBundle.IsNativeBuildEnabled() ? "temp.aab" : "temp.apk";
            var artifactPath       = Path.Combine(Path.GetTempPath(), artifactName);
            var buildPlayerOptions = AndroidBuildHelper.CreateBuildPlayerOptions(artifactPath);

            buildPlayerOptions.options |= BuildOptions.AutoRunPlayer;
            androidBuilder.Build(buildPlayerOptions);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Builds an Android App Bundle to a temp directory and then runs it on device.
        /// </summary>
        public static void BuildAndRun()
        {
            var buildSettings = new AppBundleBuildSettings
            {
                requirePrerequisiteChecks = true,
                runOnDevice = true
            };

            var appBundleBuilder   = CreateAppBundleBuilder();
            var tempOutputFilePath = Path.Combine(appBundleBuilder.WorkingDirectoryPath, "temp.aab");
            var buildPlayerOptions = AndroidBuildHelper.CreateBuildPlayerOptions(tempOutputFilePath);
            var assetPackConfig    = AssetPackConfigSerializer.LoadConfig();

            Build(appBundleBuilder, buildPlayerOptions, assetPackConfig, buildSettings);
        }
Ejemplo n.º 4
0
        public static void Build()
        {
            if (!DisplayDeletionWarning("Build Asset Delivery Demo"))
            {
                return;
            }

            var assetPackConfig    = CreateAssetPackConfig();
            var buildPlayerOptions = AndroidBuildHelper.CreateBuildPlayerOptions(AabFilePath);

            buildPlayerOptions.scenes = new[] { AssetDatabase.GUIDToAssetPath(DemoSceneGuid) };
            if (!Bundletool.BuildBundle(buildPlayerOptions, assetPackConfig))
            {
                throw new Exception("Asset Delivery Demo build failed");
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Emulates Unity's File -> Build And Run menu option.
        /// </summary>
        private static void EmulateUnityBuildAndRun()
        {
            var androidSdk         = new AndroidSdk();
            var androidSdkPlatform = new AndroidSdkPlatform(androidSdk);
            var androidBuilder     = new AndroidBuilder(androidSdkPlatform);
            var buildToolLogger    = new BuildToolLogger();

            if (!androidBuilder.Initialize(buildToolLogger))
            {
                return;
            }

            var artifactName       = EditorUserBuildSettings.buildAppBundle ? "temp.aab" : "temp.apk";
            var artifactPath       = Path.Combine(Path.GetTempPath(), artifactName);
            var buildPlayerOptions = AndroidBuildHelper.CreateBuildPlayerOptions(artifactPath);

            buildPlayerOptions.options |= BuildOptions.AutoRunPlayer;
            androidBuilder.Build(buildPlayerOptions);
        }
        /// <summary>
        /// Builds an Android App Bundle to a temp directory and then runs it on device.
        /// The AAB will include asset packs configured in Asset Delivery Settings.
        /// </summary>
        public static void BuildAndRun()
        {
            var appBundleBuilder = CreateAppBundleBuilder();

            if (!appBundleBuilder.Initialize(new BuildToolLogger()))
            {
                return;
            }

            var tempOutputFilePath = Path.Combine(appBundleBuilder.WorkingDirectoryPath, "temp.aab");
            var buildSettings      = new AppBundleBuildSettings
            {
                buildPlayerOptions = AndroidBuildHelper.CreateBuildPlayerOptions(tempOutputFilePath),
                assetPackConfig    = AssetPackConfigSerializer.LoadConfig(),
                runOnDevice        = true
            };

            Build(appBundleBuilder, buildSettings);
        }
        /// <summary>
        /// Builds an APK to a temporary location, then installs and runs it using ia.jar
        /// </summary>
        private static void BuildAndRunApk(BuildToolLogger buildToolLogger)
        {
            var androidSdk             = new AndroidSdk();
            var androidSdkPlatform     = new AndroidSdkPlatform(androidSdk);
            var androidBuildTools      = new AndroidBuildTools(androidSdk);
            var javaUtils              = new JavaUtils();
            var apkSigner              = new ApkSigner(androidBuildTools, javaUtils);
            var androidBuilder         = new AndroidBuilder(androidSdkPlatform, apkSigner);
            var playInstantBuildHelper = new PlayInstantBuildHelper(isInstantRequired: true);

            if (!androidBuilder.Initialize(buildToolLogger) ||
                !playInstantBuildHelper.Initialize(buildToolLogger) ||
                !javaUtils.Initialize(buildToolLogger))
            {
                return;
            }

            var jarPath = IaJarPath;

            if (jarPath == null)
            {
                buildToolLogger.DisplayErrorDialog("Build and Run failed to locate ia.jar file");
                return;
            }

            AndroidAppBundle.DisableNativeBuild();

            var apkPath = Path.Combine(Path.GetTempPath(), "temp.apk");

            Debug.LogFormat("Build and Run package location: {0}", apkPath);

            var buildPlayerOptions = AndroidBuildHelper.CreateBuildPlayerOptions(apkPath);

            if (!androidBuilder.BuildAndSign(buildPlayerOptions))
            {
                // Do not log here. The method we called was responsible for logging.
                return;
            }

            InstallInstantApp(jarPath, apkPath, androidSdk, javaUtils);
        }