Exemple #1
0
        /// <summary>
        /// Starts the debugger.
        /// </summary>
        internal void DebugLaunch(uint grfLaunch)
        {
            // Open the package
            PackageFile packageFile;
            var packagePath = PackagePath;
            try
            {
                packageFile = new PackageFile(packagePath);
            }
            catch (Exception ex)
            {
                MessageBox.Show(string.Format("Failed to open package because: {0}", ex.Message));
                return;
            }

            // Show device selection
            var debuggable = (grfLaunch != (uint)__VSDBGLAUNCHFLAGS.DBGLAUNCH_NoDebug);
            var ide = Package.Ide;

#if ANDROID
            int minSdkVersion;
            if (!packageFile.Manifest.TryGetMinSdkVersion(out minSdkVersion))
                minSdkVersion = -1;
            var targetFramework = (minSdkVersion > 0) ? Frameworks.Instance.GetBySdkVersion(minSdkVersion) : null;
            var targetVersion = (targetFramework != null) ? targetFramework.Name : null;
            var runner = new ApkRunner(ide, packagePath, packageFile.Manifest.PackageName, packageFile.Manifest.Activities.Select(x => x.Name).FirstOrDefault(), debuggable, (int) grfLaunch);
#elif BB
            var targetFramework = Frameworks.Instance.FirstOrDefault();
            var targetVersion = (targetFramework != null) ? targetFramework.Name : null;
            var runner = new BarRunner(ide, packagePath, packageFile.Manifest.PackageName, "--default--", debuggable, (int)grfLaunch);
#endif
            
            using (var dialog = new DeviceSelectionDialog(ide, runner.DeviceIsCompatible, targetVersion))
            {
                var rc= dialog.ShowDialog();
                switch (rc)
                {
                    case DialogResult.OK:
                        var device = dialog.SelectedDevice;
                        Package.Ide.LastUsedUniqueId = device.UniqueId;

                        using (var xDialog = new LauncherDialog(packagePath, debuggable))
                        {
                            var stateDialog = xDialog;
                            stateDialog.Cancel += (s, x) => runner.Cancel();
                            stateDialog.Load += (s, x) => runner.Run(device, stateDialog.SetState);
                            stateDialog.ShowDialog();
                        }
                        break;
                    case DialogResult.Retry:
                        // Change project target version
                        try
                        {
                            ChangeAndroidTargetVersion(dialog.NewProjectTargetVersion);
                            MessageBox.Show(string.Format("Changed target framework version to {0}, to match the Android version of your device.", dialog.NewProjectTargetVersion));
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(string.Format("Failed to change target framework version because: {0}", ex.Message));
                        }
                        break;
                }
            }
        }
        public override void Start(bool withDebugging)
        {
            // Open the package
            ApkFile apkFile;
            var apkPath = ApkPath;
            try
            {
                apkFile = new ApkFile(apkPath);
            }
            catch (Exception ex)
            {
                MessageBox.Show(string.Format("Failed to open package because: {0}", ex.Message));
                return;
            }

            // Show device selection
            var ide = Dot42Addin.Ide;
            int minSdkVersion;
            if (!apkFile.Manifest.TryGetMinSdkVersion(out minSdkVersion))
                minSdkVersion = -1;
            var targetFramework = (minSdkVersion > 0) ? Frameworks.Instance.GetBySdkVersion(minSdkVersion) : null;
            var targetVersion = (targetFramework != null) ? targetFramework.Name : null;
            var runner = new ApkRunner(ide, ApkPath, apkFile.Manifest.PackageName, apkFile.Manifest.Activities.Select(x => x.Name).FirstOrDefault(), withDebugging, 0);
            using (var dialog = new DeviceSelectionDialog(ide, IsCompatible, targetVersion)) {
                if (dialog.ShowDialog() == DialogResult.OK) {
                    // Run on the device now
                    var device = dialog.SelectedDevice;
                    ide.LastUsedUniqueId = device.UniqueId;

                    using (var xDialog = new LauncherDialog(apkPath, withDebugging))
                    {
                        var stateDialog = xDialog;
                        stateDialog.Cancel += (s, x) => runner.Cancel();
                        stateDialog.Load += (s, x) => runner.Run(device, stateDialog.SetState);
                        stateDialog.ShowDialog();
                    }
                }
            }
        }