/// <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); }
/// <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); }
/// <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); }
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"); } }
/// <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); }