public virtual bool Initialize(BuildToolLogger buildToolLogger) { if (!_androidSdk.Initialize(buildToolLogger)) { return(false); } string ignoredPath; var newestVersion = GetNewestVersionAndPath(out ignoredPath); if (newestVersion == null) { // Being unable to find any existing SDK may indicate a config issue, so don't try to install a new SDK. buildToolLogger.DisplayErrorDialog( "Failed to locate any Android SDK Platform version. Check that the Android SDK specified " + "through Preferences -> External Tools has at least one Android SDK Platform installed."); return(false); } if (newestVersion < MinimumVersion) { var installedVersionMessage = string.Format( "The highest installed Android API Level is {0}, however version {1} is the minimum " + "required to build for Google Play.\n\nClick \"OK\" to install Android API Level {2}.", newestVersion, MinimumVersion, LatestVersion); if (buildToolLogger.DisplayActionableErrorDialog(installedVersionMessage)) { // Note: this install can be slow, but it's not clear that it's any slower through Unity. AndroidSdkPackageInstaller.InstallPackage( string.Format("platforms;android-{0}", LatestVersion), string.Format("Android SDK Platform {0}", LatestVersion), _androidSdk.RootPath); } return(false); } var targetSdkVersion = PlayerSettings.Android.targetSdkVersion; if (targetSdkVersion == AndroidSdkVersions.AndroidApiLevelAuto || (int)targetSdkVersion >= MinimumVersion) { return(true); } var selectedVersionMessage = string.Format( "The currently selected Android Target API Level is {0}, however version {1} is the minimum " + "required to build for Google Play.\n\nClick \"OK\" to change the Target API Level to " + "\"Automatic (highest installed)\", which is currently {2}.", (int)targetSdkVersion, MinimumVersion, newestVersion); if (buildToolLogger.DisplayActionableErrorDialog(selectedVersionMessage)) { PlayerSettings.Android.targetSdkVersion = AndroidSdkVersions.AndroidApiLevelAuto; } return(false); }
public virtual bool Initialize(BuildToolLogger buildToolLogger) { _buildToolLogger = buildToolLogger; if (EditorUserBuildSettings.androidBuildSystem != AndroidBuildSystem.Gradle) { // We require Gradle builds for APK Signature Scheme V2, which is required for Play Instant on Unity 2017+. const string message = "This build requires the Gradle Build System.\n\n" + "Click \"OK\" to change the Android Build System to Gradle."; if (buildToolLogger.DisplayActionableErrorDialog(message)) { EditorUserBuildSettings.androidBuildSystem = AndroidBuildSystem.Gradle; } return(false); } // TODO(b/154937088): remove this check if we add support for exporting a Gradle project. if (EditorUserBuildSettings.exportAsGoogleAndroidProject) { const string message = "This build doesn't support exporting to Android Studio.\n\n" + "Click \"OK\" to disable exporting a Gradle project."; if (buildToolLogger.DisplayActionableErrorDialog(message)) { EditorUserBuildSettings.exportAsGoogleAndroidProject = false; } return(false); } if (PlayerSettings.Android.useAPKExpansionFiles) { var message = string.Format( "This build doesn't support APK Expansion (OBB) files.\n\nLarge games can instead use the " + "\"{0}\" option available through the \"Google > Android App Bundle > Asset Delivery " + "Settings\" menu or the AssetPackConfig API's SplitBaseModuleAssets field.\n\n" + "Click \"OK\" to disable the \"Split Application Binary\" setting.", AssetDeliveryWindow.SeparateAssetsLabel); if (buildToolLogger.DisplayActionableErrorDialog(message)) { PlayerSettings.Android.useAPKExpansionFiles = false; } return(false); } return(_androidSdkPlatform.Initialize(buildToolLogger)); }
public virtual bool Initialize(BuildToolLogger buildToolLogger) { #if !UNITY_2019_3_OR_NEWER return(SetSdkRoot(buildToolLogger, EditorPrefs.GetString(AndroidSdkRootEditorPrefsKey))); #elif UNITY_ANDROID // Guard with #if UNITY_ANDROID since UnityEditor.Android.Extensions.dll might be unavailable, // e.g. on a build machine without the Android platform installed. return(SetSdkRoot(buildToolLogger, UnityEditor.Android.AndroidExternalToolsSettings.sdkRootPath)); #else // This would be an unexpected and hopefully transient error. if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android) { buildToolLogger.DisplayErrorDialog("ActiveBuildTarget disagrees with #if UNITY_ANDROID."); return(false); } // Handle the case where the UnityEditor.Android.Extensions.dll file may not be available by requiring that // Android be the selected platform on 2019.3+. const string message = "The Build Settings > Platform must be set to Android." + "\n\nClick \"OK\" to switch the active platform to Android."; if (buildToolLogger.DisplayActionableErrorDialog(message)) { EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.Android, BuildTarget.Android); } return(false); #endif }
public virtual bool Initialize(BuildToolLogger buildToolLogger) { if (!_androidBuildTools.Initialize(buildToolLogger) || !_androidSdkPlatform.Initialize(buildToolLogger)) { return(false); } var newestBuildToolsVersion = _androidBuildTools.GetNewestBuildToolsVersion(); if (newestBuildToolsVersion == null) { buildToolLogger.DisplayErrorDialog(string.Format("Failed to locate {0}", BuildToolsDisplayName)); return(false); } if (AndroidBuildTools.IsBuildToolsVersionAtLeast(newestBuildToolsVersion, BuildToolsMinimumVersion)) { return(true); } var message = string.Format( "App Bundle creation requires {0} version {1} or later.\n\nClick \"OK\" to install {0} version {2}.", BuildToolsDisplayName, BuildToolsMinimumVersion, BuildToolsLatestVersion); if (buildToolLogger.DisplayActionableErrorDialog(message)) { AndroidSdkPackageInstaller.InstallPackage(BuildToolsPackageName, BuildToolsDisplayName); } return(false); }
// TODO(b/130759565): add check for PlayerSettings.productName public virtual bool Initialize(BuildToolLogger buildToolLogger) { // See https://android-developers.googleblog.com/2019/01/get-your-apps-ready-for-64-bit.html if (!AndroidArchitectureHelper.UnityVersionSupported) { buildToolLogger.DisplayErrorDialog( "This version of Unity doesn't support 64 bit libraries, which are required by Google Play." + " Please upgrade Unity to version 2017.4.16 or later."); return(false); } // Try to determine whether this is intended to be a release build. if (_apkSigner.UseDebugKeystore() || EditorUserBuildSettings.development) { // Seems like a debug build, so no need to do release build checks. return(true); } if (!HasIconForTargetGroup(BuildTargetGroup.Unknown) && !HasIconForTargetGroup(BuildTargetGroup.Android)) { buildToolLogger.DisplayErrorDialog( "Failed to locate a Default Icon or an Android Icon for this project. " + "Check Player Settings to set an icon"); return(false); } string message; switch (AndroidArchitectureHelper.ArchitectureStatus) { case AndroidArchitectureHelper.Status.Ok: return(true); case AndroidArchitectureHelper.Status.ArmV7Disabled: message = "ARMv7 and " + Arm64RequiredDescription + Il2CppRequiredDescription; break; case AndroidArchitectureHelper.Status.Il2CppDisabled: message = Arm64RequiredDescription + Il2CppRequiredDescription; break; case AndroidArchitectureHelper.Status.Arm64Disabled: message = Arm64RequiredDescription; break; default: throw new ArgumentOutOfRangeException(); } message += "\n\nClick \"OK\" to enable an IL2CPP build for ARMv7 and ARM64 architectures."; if (buildToolLogger.DisplayActionableErrorDialog(message)) { AndroidArchitectureHelper.FixTargetArchitectures(); } return(false); }
// TODO(b/130759565): add check for PlayerSettings.productName public virtual bool Initialize(BuildToolLogger buildToolLogger) { // Try to determine whether this is intended to be a release build. if (!_jarSigner.UseCustomKeystore || EditorUserBuildSettings.development) { // Seems like a debug build, so no need to do release build checks. return(true); } if (!HasIconForTargetGroup(BuildTargetGroup.Unknown) && !HasIconForTargetGroup(BuildTargetGroup.Android)) { buildToolLogger.DisplayErrorDialog( "Failed to locate a Default Icon or an Android Icon for this project. " + "Check Player Settings to set an icon"); return(false); } string message; switch (AndroidArchitectureHelper.ArchitectureStatus) { case AndroidArchitectureHelper.Status.Ok: return(true); case AndroidArchitectureHelper.Status.ArmV7Disabled: message = "ARMv7 and " + Arm64RequiredDescription + Il2CppRequiredDescription; break; case AndroidArchitectureHelper.Status.Il2CppDisabled: message = Arm64RequiredDescription + Il2CppRequiredDescription; break; case AndroidArchitectureHelper.Status.Arm64Disabled: message = Arm64RequiredDescription; break; default: throw new ArgumentOutOfRangeException(); } message += "\n\nClick \"OK\" to enable an IL2CPP build for ARMv7 and ARM64 architectures."; if (buildToolLogger.DisplayActionableErrorDialog(message)) { AndroidArchitectureHelper.FixTargetArchitectures(); } return(false); }