Exemplo n.º 1
0
        private void UploadAPK(bool retryUpload)
        {
            if (this.OnProgress != null)
            {
                this.OnProgress(this, "Copying APK package to device " + this._device.Describe());
            }
            string str = this._device.Install(this._installPath, null);

            if (!retryUpload && (str.Contains("[INSTALL_FAILED_UPDATE_INCOMPATIBLE]") || str.Contains("[INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]")))
            {
                Debug.LogWarning("Application update incompatible (signed with different keys?); removing previous installation (PlayerPrefs will be lost)...\n");
                if (this.OnProgress != null)
                {
                    this.OnProgress(this, "Removing " + this._packageName + " from device " + this._device.Describe());
                }
                this._device.Uninstall(this._packageName, null);
                this.UploadAPK(true);
            }
            else
            {
                if (((str.Contains("protocol failure") || str.Contains("No space left on device")) || (str.Contains("[INSTALL_FAILED_INSUFFICIENT_STORAGE]") || str.Contains("[INSTALL_FAILED_UPDATE_INCOMPATIBLE]"))) || ((str.Contains("[INSTALL_FAILED_MEDIA_UNAVAILABLE]") || str.Contains("[INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]")) || str.Contains("Failure [")))
                {
                    Debug.LogError("Installation failed with the following output:\n" + str);
                    CancelPostProcess.AbortBuildPointToConsole("Unable to install APK!", "Installation failed.");
                }
                bool flag = this._developmentPlayer || Unsupported.IsDeveloperBuild();
                if (this.OnProgress != null)
                {
                    this.OnProgress(this, "Setting device property CheckJNI to " + flag);
                }
                this._device.SetProperty("debug.checkjni", !flag ? "0" : "1", null);
            }
        }
Exemplo n.º 2
0
 private void Clean()
 {
     if (Directory.Exists(this._installPath))
     {
         try
         {
             Directory.Delete(this._installPath);
         }
         catch (IOException)
         {
             CancelPostProcess.AbortBuild("Unable to create new apk!", $"Unable to write target apk because {this._installPath} is a non-empty directory", null);
         }
     }
     else
     {
         if (File.Exists(this._installPath))
         {
             File.Delete(this._installPath);
         }
         if (File.Exists(this._installPath))
         {
             CancelPostProcess.AbortBuild("Unable to delete old apk!", $"Target apk could not be overwritten: {this._installPath}", null);
         }
     }
     if (!Directory.Exists(this._installDirectory))
     {
         Directory.CreateDirectory(this._installDirectory);
     }
 }
        private void CheckUnityLibraryForArchitecture(PostProcessorContext context, string arch)
        {
            string[] components = new string[] { TasksCommon.GetVariationsDirectory(context), "Libs", arch, "libunity.so" };
            string   path       = Paths.Combine(components);

            if (!File.Exists(path))
            {
                CancelPostProcess.AbortBuild("Unable to package apk", "Unity library missing for the selected architecture '" + arch + " (" + path + ") !", null);
            }
        }
Exemplo n.º 4
0
        private void UploadOBB()
        {
            string str  = $"{Path.GetFileNameWithoutExtension(this._installPath)}.main.obb";
            string path = Path.Combine(Path.GetDirectoryName(this._installPath), str);

            if (File.Exists(path))
            {
                if (this.OnProgress != null)
                {
                    this.OnProgress(this, "Copying APK Expansion file to device " + this._device.Describe());
                }
                int       bundleVersionCode = PlayerSettings.Android.bundleVersionCode;
                string[]  strArray          = new string[] { "/mnt/shell/emulated", "/mnt/shell/emulated/0/Android", this._device.ExternalStorageRoot + "/Android" };
                bool      flag      = false;
                Exception exception = null;
                string    str3      = $"main.{bundleVersionCode.ToString()}.{this._packageName}.obb";
                foreach (string str4 in strArray)
                {
                    try
                    {
                        string str5 = $"{str4}/{"obb"}/{this._packageName}/{str3}";
                        this._device.Push(path, str5, null);
                        flag = true;
                        break;
                    }
                    catch (Exception exception2)
                    {
                        exception = exception2;
                    }
                }
                string dst = $"{this._device.ExternalStorageRoot}/{str3}";
                if (!flag)
                {
                    try
                    {
                        this._device.Push(path, dst, null);
                        string str7        = $"{this._device.ExternalStorageRoot}/{"Android"}/{"obb"}/{this._packageName}";
                        string destination = $"{str7}/{str3}";
                        this._device.MakePath(str7, null);
                        this._device.Move(dst, destination, null);
                        flag = true;
                    }
                    catch (Exception exception3)
                    {
                        exception = exception3;
                    }
                }
                if (!flag)
                {
                    this.TryCleanupTemporaryOBB(dst);
                    Debug.LogException(exception);
                    CancelPostProcess.AbortBuildPointToConsole("Unable to deploy OBB to device", "Failed pushing OBB file to the device.");
                }
            }
        }
 public void Execute(PostProcessorContext context)
 {
     if (this.OnProgress != null)
     {
         this.OnProgress(this, "Starting Android build");
     }
     this.EnsureUnityLibrariesAreAvailable(context);
     if (!context.Get <bool>("ExportAndroidProject") && !this.ArePasswordsProvided())
     {
         CancelPostProcess.AbortBuild("Can not sign application", "Unable to sign application; please provide passwords!", null);
     }
 }
        internal static void Launch(BuildTarget target, string installPath)
        {
            if (target != BuildTarget.Android)
            {
                CancelPostProcess.AbortBuild("Build failure", "Internal error: Target platform mismatch", null);
            }
            PostProcessRunner runner = new PostProcessRunner();

            _context.Set <string>("InstallPath", installPath);
            runner.AddNextTask(new PublishPackage());
            runner.RunAllTasks(_context);
        }
Exemplo n.º 7
0
        public void Execute(PostProcessorContext context)
        {
            string str = context.Get <string>("StagingArea");

            if (this.OnProgress != null)
            {
                this.OnProgress(this, "Preparing and unpacking AAR plugins");
            }
            string str2 = Path.Combine(str, "aar");
            string path = Path.Combine(str, "android-libraries");

            Directory.CreateDirectory(path);
            string[] strArray = AndroidFileLocator.Find(Path.Combine(str2, "*.aar"));
            foreach (string str4 in strArray)
            {
                string fileName = Path.GetFileName(str4);
                string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(str4);
                string str7 = Path.Combine(path, fileNameWithoutExtension);
                if (Directory.Exists(str7))
                {
                    CancelPostProcess.AbortBuild("Build failure", "Plugin conflict detected for file " + fileName, null);
                }
                Directory.CreateDirectory(str7);
                TasksCommon.Exec(AndroidJavaTools.jarPath, "xf \"" + str4 + "\"", str7, "Error unpacking file " + fileName, 0);
                string str8 = Path.Combine(str7, "libs");
                Directory.CreateDirectory(str8);
                FileUtil.MoveFileOrDirectory(Path.Combine(str7, "classes.jar"), Path.Combine(str8, "classes.jar"));
                string str9 = Path.Combine(str7, "jni");
                if (Directory.Exists(str9))
                {
                    string str10 = Path.Combine(str7, "libs");
                    foreach (string str11 in Directory.GetDirectories(str9, "*"))
                    {
                        string to = Path.Combine(str10, FileUtil.RemovePathPrefix(str11, str9));
                        FileUtil.MoveFileOrDirectory(str11, to);
                    }
                }
                string str13 = Path.Combine(str7, "src");
                if (!Directory.Exists(str13))
                {
                    Directory.CreateDirectory(str13);
                }
                if (!File.Exists(Path.Combine(str7, AndroidLibraries.ProjectPropertiesFileName)))
                {
                    int num3 = context.Get <int>("TargetSDKVersion");
                    File.WriteAllText(Path.Combine(str7, AndroidLibraries.ProjectPropertiesFileName), $"android.library=true

target=android-{num3}");
                }
            }
        }
Exemplo n.º 8
0
        private void AlignPackage(PostProcessorContext context)
        {
            AndroidSDKTools tools    = context.Get <AndroidSDKTools>("SDKTools");
            string          errorMsg = "Failed to align APK package.";
            string          str2     = Path.Combine(Environment.CurrentDirectory, this._stagingArea);
            string          args     = string.Format("4 \"{0}/Package_unaligned.apk\" \"{0}/Package.apk\"", str2);
            string          message  = TasksCommon.Exec(tools.ZIPALIGN, args, this._stagingArea, errorMsg, 0);

            if ((message.Contains("zipalign") || message.Contains("Warning")) || !File.Exists(Path.Combine(str2, "Package.apk")))
            {
                Debug.LogError(message);
                CancelPostProcess.AbortBuildPointToConsole("APK Aligning Failed!", errorMsg);
            }
        }
Exemplo n.º 9
0
 private void ThrowIfInvalid(string packageName)
 {
     if (!this.IsValidAndroidBundleIdentifier(packageName))
     {
         string message = "Please set the Bundle Identifier in the Player Settings.";
         message = (message + " The value must follow the convention 'com.YourCompanyName.YourProductName'") + " and can contain alphanumeric characters and underscore." + "\nEach segment must not start with a numeric character or underscore.";
         Selection.activeObject = Unsupported.GetSerializedAssetInterfaceSingleton("PlayerSettings");
         CancelPostProcess.AbortBuild("Bundle Identifier has not been set up correctly", message, null);
     }
     if (!this.IsValidJavaPackageName(packageName))
     {
         Debug.LogWarning((("As of Unity 4.2 the restrictions on the Bundle Identifier has been updated " + " to include those for java package names. Specifically the" + " restrictions have been updated regarding reserved java keywords.") + "\n" + "\nhttp://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html") + "\nhttp://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.9" + "\n");
     }
 }
Exemplo n.º 10
0
        public void Execute(PostProcessorContext context)
        {
            if (this.OnProgress != null)
            {
                this.OnProgress(this, "Building");
            }
            string str    = context.Get <string>("StagingArea");
            int    system = context.Get <int>("ProjectType");

            if (system != 1)
            {
                throw new UnityException("Illegal project type: " + system);
            }
            AndroidProjectExport.Create(system).Export(context, null);
            bool   flag           = PlayerSettings.Android.keyaliasName.Length != 0;
            bool   flag2          = context.Get <bool>("DevelopmentPlayer");
            string sourceFileName = "";
            string task           = "";

            string[] components = new string[] { "Temp", "gradleOut" };
            string   workingdir = Paths.Combine(components);

            if (flag2 || Unsupported.IsDeveloperBuild())
            {
                task = "assembleDebug";
                string[] textArray2 = new string[] { workingdir, "build", "outputs", "apk", "gradleOut-debug.apk" };
                sourceFileName = Paths.Combine(textArray2);
            }
            else
            {
                if (!flag)
                {
                    CancelPostProcess.AbortBuild("Build Failure", "Release builds have to be signed when using Gradle", null);
                    return;
                }
                task = "assembleRelease";
                string[] textArray3 = new string[] { workingdir, "build", "outputs", "apk", "gradleOut-release.apk" };
                sourceFileName = Paths.Combine(textArray3);
            }
            GradleWrapper.Run(workingdir, task, delegate(string task) {
                if (((this.OnProgress != null) && (task != "")) && (task[0] == ':'))
                {
                    this.OnProgress(this, "Task " + task.Substring(1));
                }
            });
            string[] textArray4 = new string[] { str, "Package.apk" };
            File.Move(sourceFileName, Paths.Combine(textArray4));
        }
Exemplo n.º 11
0
        private void Move(PostProcessorContext context)
        {
            string str  = context.Get <string>("StagingArea");
            bool   flag = context.Get <bool>("UseObb");

            FileUtil.MoveFileOrDirectory(Path.Combine(str, "Package.apk"), this._installPath);
            if (!File.Exists(this._installPath))
            {
                CancelPostProcess.AbortBuild("Unable to create new apk!", $"Unable to move file '{Path.Combine(str, "Package.apk")}' -> '{this._installPath}", null);
            }
            if (flag && File.Exists(Path.Combine(str, "main.obb")))
            {
                string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(this._installPath);
                string path = Path.Combine(this._installDirectory, $"{fileNameWithoutExtension}.main.obb");
                FileUtil.DeleteFileOrDirectory(path);
                FileUtil.MoveFileOrDirectory(Path.Combine(str, "main.obb"), path);
            }
        }
 internal static string PrepareForBuild(BuildOptions options, BuildTarget target)
 {
     if (target != BuildTarget.Android)
     {
         CancelPostProcess.AbortBuild("Build failure", "Internal error: Target platform mismatch", null);
     }
     if ((options & BuildOptions.BuildAdditionalStreamedScenes) == BuildOptions.CompressTextures)
     {
         _context = new PostProcessorContext();
         SetupContextForPreBuild(_context, options, target);
         PostProcessRunner runner = new PostProcessRunner();
         runner.AddNextTask(new CheckPrerequisites());
         runner.AddNextTask(new CheckAndroidSdk());
         runner.AddNextTask(new CheckDevice());
         runner.RunAllTasks(_context);
     }
     return("");
 }
Exemplo n.º 13
0
        private void BuildApk(PostProcessorContext context)
        {
            bool             flag      = context.Get <bool>("DevelopmentPlayer");
            AndroidLibraries libraries = context.Get <AndroidLibraries>("AndroidLibraries");
            bool             flag2     = PlayerSettings.Android.keyaliasName.Length != 0;
            string           str       = Path.Combine(Environment.CurrentDirectory, this._stagingArea);

            string[] first = new string[] { "apk", $"{str}/Package_unaligned.apk", "-z", $"{str}/assets.ap_", "-z", $"{str}/bin/resources.ap_", "-nf", $"{str}/libs", "-f", $"{str}/bin/classes.dex", "-v" };
            foreach (string str2 in libraries.GetLibraryDirectories())
            {
                string[] second = new string[] { "-nf", str2 };
                first = first.Concat <string>(second).ToArray <string>();
            }
            foreach (string str3 in libraries.GetAssetsDirectories())
            {
                string[] textArray3 = new string[] { "-A", str3 };
                first = first.Concat <string>(textArray3).ToArray <string>();
            }
            if (flag2)
            {
                string   str4       = !Path.IsPathRooted(PlayerSettings.Android.keystoreName) ? Path.Combine(Directory.GetCurrentDirectory(), PlayerSettings.Android.keystoreName) : PlayerSettings.Android.keystoreName;
                string[] textArray4 = new string[] { "-k", str4, "-kp", PlayerSettings.Android.keystorePass, "-kk", PlayerSettings.Android.keyaliasName, "-kkp", PlayerSettings.Android.keyaliasPass };
                first = first.Concat <string>(textArray4).ToArray <string>();
            }
            if (flag || Unsupported.IsDeveloperBuild())
            {
                string[] textArray5 = new string[] { "-d" };
                first = first.Concat <string>(textArray5).ToArray <string>();
            }
            if (File.Exists(Path.Combine(this._stagingArea, "raw.ap_")))
            {
                string[] textArray6 = new string[] { "-z", $"{str}/raw.ap_" };
                first = first.Concat <string>(textArray6).ToArray <string>();
            }
            string   message  = TasksCommon.SDKTool(context, first, this._stagingArea, "Failed to build apk.");
            string   fileName = Path.Combine(this._stagingArea, "Package_unaligned.apk");
            FileInfo info     = new FileInfo(fileName);

            if (!File.Exists(fileName) || (info.Length == 0L))
            {
                Debug.LogError(message);
                CancelPostProcess.AbortBuildPointToConsole("APK Builder Failed!", "Failed to build APK package.");
            }
        }
Exemplo n.º 14
0
        private void CompileResources(PostProcessorContext context)
        {
            AndroidLibraries libraries = context.Get <AndroidLibraries>("AndroidLibraries");
            string           str       = context.Get <string>("AndroidJarPath");
            AndroidSDKTools  tools     = context.Get <AndroidSDKTools>("SDKTools");
            string           str2      = "gen";
            string           fullName  = Directory.CreateDirectory(Path.Combine(this._stagingArea, str2)).FullName;
            string           args      = $"package --auto-add-overlay -v -f -m -J " { str2 } " -M " { "AndroidManifest.xml" } " -S " { "res" } " -I " { str } " -F {" bin / resources.ap_ "}";

            if (libraries.Count > 0)
            {
                args = args + $" --extra-packages {string.Join(":", libraries.GetPackageNames())}";
                foreach (string str5 in libraries.GetResourceDirectories())
                {
                    args = args + $" -S " { str5 } "";
                }
            }
            string errorMsg = "Failed to re-package resources.";
            string str7     = TasksCommon.Exec(tools.AAPT, args, this._stagingArea, errorMsg, 3);

            if (!str7.Contains("Done!") || !File.Exists(Path.Combine(this._stagingArea, "bin/resources.ap_")))
            {
                Debug.LogError("Failed to re-package resources with the following parameters:\n" + args + "\n" + str7);
                CancelPostProcess.AbortBuildPointToConsole("Resource re-package failed!", errorMsg);
            }
            if (libraries.Count > 0)
            {
                List <string> list = new List <string>();
                foreach (string str8 in Directory.GetFiles(fullName, "*.java", SearchOption.AllDirectories))
                {
                    list.Add(str8.Substring(fullName.Length + 1));
                }
                string str9  = Directory.CreateDirectory(Path.Combine(this._stagingArea, "bin/classes")).FullName;
                string str10 = $"-bootclasspath " { str } " -d " { str9 } " -source 1.6 -target 1.6 -encoding UTF-8 " { string.Join("\" \"", list.ToArray()) } "";
                string str11 = "Failed to recompile android resource files.";
                string str12 = TasksCommon.Exec(AndroidJavaTools.javacPath, str10, fullName, str11, 0);
                if (str12.Trim().Length > 0)
                {
                    Debug.LogError("Failed to compile resources with the following parameters:\n" + str10 + "\n" + str12);
                    CancelPostProcess.AbortBuildPointToConsole("Resource compilation failed!", str11);
                }
            }
        }
Exemplo n.º 15
0
        private void AAPTPack(PostProcessorContext context, string apkName, string directory, bool compress)
        {
            AndroidSDKTools tools = context.Get <AndroidSDKTools>("SDKTools");
            string          str   = "";

            if (!compress)
            {
                str = " -0 \"\"";
            }
            string str2 = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~";
            string args = $"package -v -f -F {apkName} -A {directory}{str} --ignore-assets " { str2 } "";
            string str4 = TasksCommon.Exec(tools.AAPT, args, this._stagingArea, "Android Asset Packaging Tool failed.", 3);

            if (!str4.Contains("Found 0 custom asset files") && (!str4.Contains("Done!") || !File.Exists(Path.Combine(this._stagingArea, apkName))))
            {
                Debug.LogError($"Android Asset Packaging Tool failed: {tools.AAPT} {args} 
 {str4}");
                CancelPostProcess.AbortBuildPointToConsole("AAPT Failed!", "Android Asset Packaging Tool failed.");
            }
        }
Exemplo n.º 16
0
        private void BuildObb(PostProcessorContext context)
        {
            bool flag  = File.Exists(Path.Combine(this._stagingArea, "obb.ap_"));
            bool flag2 = File.Exists(Path.Combine(this._stagingArea, "rawobb.ap_"));

            if (flag || flag2)
            {
                string   str   = Path.Combine(Environment.CurrentDirectory, this._stagingArea);
                string[] first = new string[] { "apk", $"{str}/main.obb", "-u" };
                if (flag)
                {
                    string[] second = new string[] { "-z", $"{str}/obb.ap_" };
                    first = first.Concat <string>(second).ToArray <string>();
                }
                if (flag2)
                {
                    string[] textArray3 = new string[] { "-z", $"{str}/rawobb.ap_" };
                    first = first.Concat <string>(textArray3).ToArray <string>();
                }
                string   message  = TasksCommon.SDKTool(context, first, this._stagingArea, "Failed to build OBB.");
                string   fileName = Path.Combine(this._stagingArea, "main.obb");
                FileInfo info     = new FileInfo(fileName);
                if (!File.Exists(fileName) || (info.Length == 0L))
                {
                    Debug.LogError(message);
                    CancelPostProcess.AbortBuildPointToConsole("OBB Builder Failed!", "Failed to build OBB package.");
                }
                if (info.Length >= 0x80000000L)
                {
                    Debug.LogError(message);
                    CancelPostProcess.AbortBuildPointToConsole("OBB Builder Failed!", "OBB file too big for Android Market (max 2GB).");
                }
                AndroidXmlDocument document = context.Get <AndroidXmlDocument>("SettingsXml");
                document.PatchStringRes("bool", TasksCommon.GetMD5HashOfEOCD(fileName), true.ToString());
                document.Save();
            }
        }
Exemplo n.º 17
0
        public void Execute(PostProcessorContext context)
        {
            if (this.OnProgress != null)
            {
                this.OnProgress(this, "Checking Android SDK and components");
            }
            this._sdkTools = AndroidSDKTools.GetInstance();
            if (this._sdkTools == null)
            {
                CancelPostProcess.AbortBuild("Build failure!", "Unable to locate Android SDK", null);
            }
            context.Set <AndroidSDKTools>("SDKTools", this._sdkTools);
            this.EnsureSDKComponentVersion(0x18, new SDKToolsDetector(this));
            this.EnsureSDKComponentVersion(0x17, new SDKBuildToolsDetector(this));
            this.EnsureSDKComponentVersion(0x17, new SDKPlatformToolsDetector(this));
            int num = this.EnsureSDKPlatformAPI("Android 6.0", 0x17);

            context.Set <int>("PlatformApiLevel", num);
            int num2 = Math.Max((int)PlayerSettings.Android.minSdkVersion, num);

            context.Set <int>("TargetSDKVersion", num2);
            this._sdkTools.UpdateToolsDirectories();
            this._sdkTools.DumpDiagnostics();
            AndroidJavaTools.DumpDiagnostics();
            string str = "android.jar";
            string androidPlatformPath = this._sdkTools.GetAndroidPlatformPath(num);

            if (androidPlatformPath.Length == 0)
            {
                EditorPrefs.SetString("AndroidSdkRoot", "");
                string message = "Android SDK does not include any platforms! Did you run Android SDK setup to install the platform(s)?\nMinimum platform required for build is Android 5.0 (API level 21)\n";
                CancelPostProcess.AbortBuild("No platforms found", message, null);
            }
            str = Path.Combine(androidPlatformPath, str);
            context.Set <string>("AndroidJarPath", str);
        }
Exemplo n.º 18
0
        private void StartApplication(PostProcessorContext context)
        {
            string path = context.Get <string>("ManifestName");

            if (this._developmentPlayer)
            {
                if (this.OnProgress != null)
                {
                    this.OnProgress(this, "Setting up profiler tunnel");
                }
                this._device.Forward($"tcp:{ProfilerDriver.directConnectionPort}", "localabstract:Unity-" + this._packageName, null);
            }
            string activityWithLaunchIntent = new AndroidManifest(path).GetActivityWithLaunchIntent();

            if (activityWithLaunchIntent.Length == 0)
            {
                CancelPostProcess.AbortBuild("Unable to start activity!", "No activity in the manifest with action MAIN and category LAUNCHER. Try launching the application manually on the device.", null);
            }
            if (this.OnProgress != null)
            {
                this.OnProgress(this, "Attempting to start Unity Player on device " + this._device.Describe());
            }
            this._device.Launch(this._packageName, activityWithLaunchIntent, null);
        }
Exemplo n.º 19
0
        private void CreatePackagesWithFastzip(PostProcessorContext context)
        {
            string             str5;
            string             str6;
            string             str7;
            FileInfo           info;
            string             workingdir = context.Get <string>("StagingArea");
            bool               flag       = context.Get <bool>("UseObb");
            AndroidLibraries   libraries  = context.Get <AndroidLibraries>("AndroidLibraries");
            AndroidXmlDocument document   = context.Get <AndroidXmlDocument>("SettingsXml");
            string             command    = context.Get <string>("FastzipExe");
            string             str3       = "Package.apk";
            string             errorMsg   = "Fastzip failed.";
            string             str8       = " -j --seq -5";

            if (flag)
            {
                if (this.OnProgress != null)
                {
                    this.OnProgress(this, "Using fastzip to build expansion package (OBB)");
                }
                str6 = ("main.obb" + str8 + " obbassets=assets") + " rawobb=assets";
                str5 = TasksCommon.Exec(command, str6, workingdir, errorMsg, 0);
                str7 = Path.Combine(workingdir, "main.obb");
                info = new FileInfo(str7);
                if (!File.Exists(str7) || (info.Length == 0L))
                {
                    Debug.LogError(str5);
                    CancelPostProcess.AbortBuildPointToConsole("OBB Builder Failed!", "Failed to build OBB package.");
                }
                if (info.Length >= 0x80000000L)
                {
                    Debug.LogError(str5);
                    CancelPostProcess.AbortBuildPointToConsole("OBB Builder Failed!", "OBB file too big for Android Market (max 2GB).");
                }
                document.PatchStringRes("bool", TasksCommon.GetMD5HashOfEOCD(str7), true.ToString());
                document.Save();
            }
            if (this.OnProgress != null)
            {
                this.OnProgress(this, "Using fastzip to build target package (APK)");
            }
            string str9 = " libs=lib";

            foreach (string str10 in libraries.GetLibraryDirectories())
            {
                str9 = str9 + $" {str10}=libs";
            }
            string str11 = " --apk";

            if (PlayerSettings.Android.keyaliasName.Length != 0)
            {
                string str12 = !Path.IsPathRooted(PlayerSettings.Android.keystoreName) ? Path.Combine(Directory.GetCurrentDirectory(), PlayerSettings.Android.keystoreName) : PlayerSettings.Android.keystoreName;
                str11 = $" -A --sign={str12},{PlayerSettings.Android.keyaliasPass},{PlayerSettings.Android.keyaliasName}";
            }
            string[] textArray1 = new string[] { str3, str8, str11, str9, " bin/classes.dex assets -0 -Z bin/resources.ap_ raw=assets" };
            str6 = string.Concat(textArray1);
            str5 = TasksCommon.Exec(command, str6, workingdir, errorMsg, 0);
            str7 = Path.Combine(workingdir, str3);
            info = new FileInfo(str7);
            if (!File.Exists(str7) || (info.Length == 0L))
            {
                Debug.LogError(str5);
                CancelPostProcess.AbortBuildPointToConsole("Fastzip Failed!", "Failed to build APK package.");
            }
        }
        internal static void PostProcess(BuildTarget target, string stagingAreaData, string stagingArea, string playerPackage, string installPath, string companyName, string productName, BuildOptions options, RuntimeClassRegistry usedClassRegistry)
        {
            if (target != BuildTarget.Android)
            {
                CancelPostProcess.AbortBuild("Build failure", "Internal error: Target platform mismatch", null);
            }
            _context.Set <BuildTarget>("BuildTarget", target);
            _context.Set <string>("StagingAreaData", stagingAreaData);
            _context.Set <string>("StagingArea", stagingArea);
            _context.Set <string>("InstallPath", installPath);
            _context.Set <RuntimeClassRegistry>("UsedClassRegistry", usedClassRegistry);
            bool flag = (options & BuildOptions.AutoRunPlayer) != BuildOptions.CompressTextures;

            _context.Set <bool>("AutoRunPlayer", flag);
            bool flag2 = (options & BuildOptions.AcceptExternalModificationsToPlayer) != BuildOptions.CompressTextures;

            _context.Set <bool>("ExportAndroidProject", flag2);
            _context.Set <string>("AndroidPluginsPath", "Assets/Plugins/Android");
            switch (EditorUserBuildSettings.androidBuildSystem)
            {
            case AndroidBuildSystem.Internal:
                _context.Set <int>("ProjectType", 0);
                break;

            case AndroidBuildSystem.Gradle:
                _context.Set <int>("ProjectType", 1);
                break;

            case AndroidBuildSystem.ADT:
                _context.Set <int>("ProjectType", 2);
                break;

            default:
                _context.Set <int>("ProjectType", !flag2 ? 0 : 2);
                break;
            }
            bool flag3 = _context.Get <int>("ProjectType") == 1;
            PostProcessRunner runner = new PostProcessRunner();

            runner.AddNextTask(new Initializer());
            runner.AddNextTask(new PrepareUnityResources());
            runner.AddNextTask(new SplitLargeFiles());
            runner.AddNextTask(new NonstreamingObbAssets());
            runner.AddNextTask(new PrepareUnityPackage());
            runner.AddNextTask(new PrepareUserResources());
            runner.AddNextTask(new PrepareAPKResources());
            runner.AddNextTask(new NativePlugins());
            if (!flag3)
            {
                runner.AddNextTask(new ProcessAAR());
            }
            runner.AddNextTask(new AddAndroidLibraries());
            runner.AddNextTask(new GenerateManifest());
            runner.AddNextTask(new BuildResources());
            if (!flag3 && !flag2)
            {
                runner.AddNextTask(new CheckLibrariesConflict());
                runner.AddNextTask(new RunDex());
            }
            runner.AddNextTask(new RunIl2Cpp());
            runner.AddNextTask(new StreamingAssets());
            runner.AddNextTask(new FastZip());
            runner.AddNextTask(new AAPTPackage());
            if (flag2)
            {
                runner.AddNextTask(new ExportProject());
            }
            else
            {
                if (flag3)
                {
                    runner.AddNextTask(new BuildGradleProject());
                }
                else
                {
                    runner.AddNextTask(new BuildAPK());
                }
                runner.AddNextTask(new MoveFinalPackage());
            }
            runner.RunAllTasks(_context);
        }
Exemplo n.º 21
0
        private AndroidDevice FindDevice(PostProcessorContext context)
        {
            BuildTarget         platform     = context.Get <BuildTarget>("BuildTarget");
            AndroidTargetDevice targetDevice = PlayerSettings.Android.targetDevice;
            List <string>       list         = null;

            do
            {
                list = ADB.Devices(null);
            }while ((list.Count == 0) && EditorUtility.DisplayDialog("No Android device found!", " * Make sure USB debugging has been enabled\n * Check your device, in most cases there should be a small icon in the status bar telling you if the USB connection is up.\n * If you are sure that device is attached then it might be USB driver problem, for details please check Android SDK Setup section in Unity manual.", "Retry", "Cancel"));
            if (list.Count < 1)
            {
                string message = $"No Android devices found.{(Application.platform != RuntimePlatform.WindowsEditor) ? "" : " If you are sure that device is attached then it might be USB driver problem, for details please check Android SDK Setup section in Unity manual."}
";
                CancelPostProcess.AbortBuild("Couldn't find Android device", message, null);
            }
            AndroidDevice device2 = new AndroidDevice(list[0]);
            int           num     = Convert.ToInt32(device2.Properties["ro.build.version.sdk"]);

            if (num < 9)
            {
                string str2 = (("Device: " + device2.Describe() + "\n") + "The connected device is not running Android OS 2.3 or later.") + " Unity Android does not support earlier versions of the Android OS;" + " please upgrade your device to a later OS version.";
                Selection.activeObject = Unsupported.GetSerializedAssetInterfaceSingleton("PlayerSettings");
                CancelPostProcess.AbortBuild("Device software is not supported", str2, null);
            }
            int num2 = 0;

            try
            {
                num2 = Convert.ToInt32(device2.Properties["ro.opengles.version"]);
            }
            catch (FormatException)
            {
                num2 = -1;
            }
            int num3 = 0xf0000;

            GraphicsDeviceType[] graphicsAPIs = PlayerSettings.GetGraphicsAPIs(platform);
            if (graphicsAPIs.Contains <GraphicsDeviceType>(GraphicsDeviceType.OpenGLES3))
            {
                num3 = 0x30000;
            }
            if (graphicsAPIs.Contains <GraphicsDeviceType>(GraphicsDeviceType.OpenGLES2))
            {
                num3 = 0x20000;
            }
            bool flag = device2.Features.Contains("android.hardware.opengles.aep");

            if ((num3 == 0x30000) && (PlayerSettings.openGLRequireES31 || PlayerSettings.openGLRequireES31AEP))
            {
                num3 = 0x30001;
            }
            bool flag2 = true;
            bool flag3 = (graphicsAPIs.Length == 1) && (graphicsAPIs[0] == GraphicsDeviceType.Vulkan);

            if ("Amazon" != device2.Properties["ro.product.brand"])
            {
                string str3 = null;
                if (flag3 && !flag2)
                {
                    str3 = "The connected device does not support Vulkan.";
                    str3 = str3 + " Please select OpenGLES under Player Settings instead.";
                }
                if (((num2 >= 0) && (num2 < num3)) || (PlayerSettings.openGLRequireES31AEP && !flag))
                {
                    str3 = "The connected device is not compatible with the selected OpenGLES version.";
                    str3 = str3 + " Please select a lower OpenGLES version under Player Settings instead.";
                }
                if (str3 != null)
                {
                    Selection.activeObject = Unsupported.GetSerializedAssetInterfaceSingleton("PlayerSettings");
                    CancelPostProcess.AbortBuild("Device hardware is not supported", str3, null);
                }
            }
            if ((targetDevice == AndroidTargetDevice.x86) && device2.Properties["ro.product.cpu.abi"].Equals("armeabi-v7a"))
            {
                string str4 = "You are trying to install x86 APK to ARM device. ";
                str4 = str4 + "Please select FAT or ARM as device filter under Player Settings, or connect a x86 device.";
                Selection.activeObject = Unsupported.GetSerializedAssetInterfaceSingleton("PlayerSettings");
                CancelPostProcess.AbortBuild("Device hardware is not supported", str4, null);
            }
            string str5   = device2.Properties["ro.product.manufacturer"];
            string str6   = device2.Properties["ro.product.model"];
            string action = device2.Properties["ro.product.cpu.abi"];
            bool   flag4  = device2.Properties["ro.secure"].Equals("1");
            string str8   = $"{char.ToUpper(str5[0])}{str5.Substring(1)} {str6}";
            string label  = $"Android API-{num}";

            UsabilityAnalytics.Event("Android Device", str8, label, !flag4 ? 0 : 1);
            string str10 = $"gles {num2 >> 0x10}.{num2 & 0xffff}{!flag ? "" : " AEP"}";

            if (num2 < 0)
            {
                str10 = "gles 2.0";
            }
            UsabilityAnalytics.Event("Android Architecture", action, str10, 1);
            string str11 = device2.Properties["ro.board.platform"];
            ulong  i     = device2.MemInfo["MemTotal"];

            i = UpperboundPowerOf2(i) / ((ulong)0x100000L);
            UsabilityAnalytics.Event("Android Chipset", str11, $"{i}MB", 1);
            return(device2);
        }