Beispiel #1
0
    public static APKInfo ParseAPK(string apkFilePath)
    {
        APKInfo info                = new APKInfo();
        ZipFile apkFile             = new ZipFile(apkFilePath);
        var     manifestEntry       = apkFile.GetEntry("AndroidManifest.xml");
        var     manifestInputStream = apkFile.GetInputStream(manifestEntry);
        var     bytes               = new byte[manifestEntry.Size];

        manifestInputStream.Read(bytes, 0, (int)manifestEntry.Size);
        var       ms     = new MemoryStream(bytes);
        var       reader = new AndroidXmlReader(ms);
        XDocument doc    = XDocument.Load(reader);

        // get packge info
        info.VersionCode = doc.Root.FindAttribute("versionCode").Value.ToString();
        info.VersionName = doc.Root.FindAttribute("versionName").Value.ToString();
        info.PackgeName  = doc.Root.FindAttribute("package").Value.ToString();

        var application = doc.Root.FindSingleElement("application");

        var activities = application.FindElements("activity");

        var launchActivity = activities.Single((activity) => {
            var intent_filter = activity.FindSingleElement("intent-filter");
            if (intent_filter == null)
            {
                return(false);
            }

            // 是否存在 <action p1:name="android.intent.action.MAIN"></action>

            bool hasActionMain = intent_filter.FindElements("action").Any((ele) => {
                string actionName = ele.FindAttribute("name").Value.ToString();
                return(actionName == "android.intent.action.MAIN");
            });

            // 是否存在 <category p1:name="android.intent.category.LAUNCHER"></category>
            bool hasLauncher = intent_filter.FindElements("category").Any((ele) => {
                string actionName = ele.FindAttribute("name").Value.ToString();
                return(actionName == "android.intent.category.LAUNCHER");
            });

            return(hasActionMain && hasLauncher);
        });

        info.LauncherActivity = launchActivity.FindAttribute("name").Value.ToString();

        return(info);
    }
Beispiel #2
0
        private void button_install_Click_1(object sender, EventArgs e)
        {
            button_install.Enabled = false;
            List <DeviceTask> tasks      = new List <DeviceTask>();
            string            packgeName = "";

            if (radioButton_install.Checked)
            {
                string apkFilePath = textBox_apk.Text;
                var    installTask = new InstallTask(apkFilePath);
                tasks.Add(installTask);
                var info = APKInfo.ParseAPK(apkFilePath);
                packgeName = info.PackgeName;
            }
            else
            {
                packgeName = textBox_apk.Text;
            }

            WeTestTask wtTask = new WeTestTask(textBox_python.Text, textBox_wt.Text, packgeName);

            tasks.Add(wtTask);

            var devices       = DeviceManager.Instance.Devices;
            int complateCount = 0;

            for (int i = 0; i < devices.Length; i++)
            {
                var device = devices[i];
                device.TaskMgr.TaskEnd += (task, result) => {
                    if (device.TaskMgr.RunningTaskIndex == device.TaskMgr.Tasks.Length - 1 || !result.ok)
                    {
                        complateCount++;
                        if (complateCount == devices.Length)
                        {
                            LogWrapper.LogInfo("所有任务已完成");
                            RunInMainthread(() => {
                                button_install.Enabled = true;
                            });
                        }
                    }
                };
                device.TaskMgr.RunTasks(tasks.ToArray());
            }
        }
        public override TaskResult Run(Managed.Adb.Device adbDevice)
        {
            TaskResult result = new TaskResult();

            //un install
            var apkInfo = APKInfo.ParseAPK(mPackgeLocation);

            try {
                if (adbDevice.PackageManager.Exists(apkInfo.PackgeName))
                {
                    adbDevice.UninstallPackage(apkInfo.PackgeName);
                }
            } catch {
            }

            LogWrapper.LogInfo("CanuSU:" + adbDevice.SerialNumber + ":" + adbDevice.CanSU());
            string          remoteFilePath = adbDevice.SyncPackageToDevice(mPackgeLocation);
            InstallReceiver receiver       = new InstallReceiver();
            String          cmd            = String.Format("pm install {1}{0}", remoteFilePath, true ? "-r " : String.Empty);

            if (adbDevice.CanSU())
            {
                adbDevice.ExecuteRootShellCommand(cmd, receiver);
            }
            else
            {
                adbDevice.ExecuteShellCommand(cmd, receiver);
            }

            if (!String.IsNullOrEmpty(receiver.ErrorMessage))
            {
                result.ok  = false;
                result.Msg = receiver.ErrorMessage;
            }
            return(result);
        }