protected override BuildResult Build(IProgressMonitor monitor, IBuildTarget item, ConfigurationSelector configuration)
        {
            if (!(item is MonoDroidProject))
            {
                return(base.Build(monitor, item, configuration));
            }

            MonoDroidProject project           = (MonoDroidProject)item;
            TargetFramework  requiredFramework = Runtime.SystemAssemblyService.GetTargetFramework(
                MonoDevelop.Core.Assemblies.TargetFrameworkMoniker.NET_4_0);

            // Check that we support 4.0 to infer we are at Mono 2.8 at least.
            if (!project.TargetRuntime.IsInstalled(requiredFramework))
            {
                var message = "Mono 2.8 or newer is required.";
                MessageService.GenericAlert(MonoDevelop.Ide.Gui.Stock.MonoDevelop, message,
                                            "Mono 2.8 or newer is requiered. Please go to http://www.mono-project.com to update your installation.",
                                            AlertButton.Ok);

                var buildResult = new BuildResult();
                buildResult.AddError(message);
                return(buildResult);
            }

            return(base.Build(monitor, item, configuration));
        }
示例#2
0
        public static IAsyncOperation Sign(IProgressMonitor monitor, MonoDroidProject project, ConfigurationSelector configSel)
        {
            var conf  = project.GetConfiguration(configSel);
            var opMon = new AggregatedOperationMonitor(monitor);

            InvokeSynch(() => MonoDroidFramework.EnsureSdksInstalled());

            IAsyncOperation signOp = null;

            if (project.PackageNeedsSigning(configSel))
            {
                ClearUploadFlags(conf);
                signOp            = project.SignPackage(configSel);
                signOp.Completed += delegate {
                    opMon.Dispose();
                };
                return(signOp);
            }

            return(Core.Execution.NullProcessAsyncOperation.Success);
        }
        public static IAsyncOperation SignAndCopy(IProgressMonitor monitor, MonoDroidProject project,
                                                  ConfigurationSelector configSel)
        {
            var conf  = project.GetConfiguration(configSel);
            var opMon = new AggregatedOperationMonitor(monitor);

            IAsyncOperation signOp = null;

            if (project.PackageNeedsSigning(configSel))
            {
                ClearUploadFlags(conf);
                signOp = project.SignPackage(configSel);
                opMon.AddOperation(signOp);
            }

            string packageName = project.GetPackageName(conf);
            string targetFile  = InvokeSynch(() => ChooseApkLocation(null, project.BaseDirectory, packageName));

            if (String.IsNullOrEmpty(targetFile))
            {
                opMon.Dispose();
                return(null);
            }

            if (MonoDroidFramework.CheckTrial())
            {
                opMon.Dispose();
                return(null);
            }

            var copy = CopyApk(signOp, conf.ApkSignedPath, targetFile);

            copy.Completed += delegate {
                opMon.Dispose();
            };

            return(copy);
        }
示例#4
0
        //may block while it's showing a GUI. project MUST be built before calling this
        public static MonoDroidUploadOperation SignAndUpload(IProgressMonitor monitor, MonoDroidProject project,
                                                             ConfigurationSelector configSel, bool forceReplace, ref AndroidDevice device)
        {
            var conf  = project.GetConfiguration(configSel);
            var opMon = new AggregatedOperationMonitor(monitor);

            InvokeSynch(() => MonoDroidFramework.EnsureSdksInstalled());

            IAsyncOperation signOp = null;

            if (project.PackageNeedsSigning(configSel))
            {
                ClearUploadFlags(conf);
                signOp = project.SignPackage(configSel);
                opMon.AddOperation(signOp);
            }

            if (device == null)
            {
                device = InvokeSynch(() => ChooseDevice(null));
            }

            if (device == null)
            {
                opMon.Dispose();
                return(null);
            }

            //copture the device for a later anonymous method
            AndroidDevice dev = device;

            bool replaceIfExists = forceReplace || !GetUploadFlag(conf, device);

            var uploadOp = Upload(device, conf.ApkSignedPath, conf.PackageName, signOp, replaceIfExists);

            opMon.AddOperation(uploadOp);
            uploadOp.Completed += delegate(IAsyncOperation op) {
                if (op.Success)
                {
                    SetUploadFlag(conf, dev);
                }
                opMon.Dispose();
            };
            return(uploadOp);
        }
示例#5
0
        public static MonoDroidPublishOperation PublishPackage(IProgressMonitor monitor, MonoDroidProject project,
                                                               ConfigurationSelector configSel, AndroidSigningOptions options, string sourceApk, string destApk,
                                                               bool createNewKey, string dName, int keyValidity)
        {
            var conf  = project.GetConfiguration(configSel);
            var opMon = new AggregatedOperationMonitor(monitor);

            IAsyncOperation packageOp = null;

            // If we need signing, it means we don't have the apk ready
            if (project.PackageNeedsSigning(configSel))
            {
                ClearUploadFlags(conf);
                packageOp = project.SignPackage(configSel);
                opMon.AddOperation(packageOp);
            }

            var outputMonitor = IdeApp.Workbench.ProgressMonitors.GetOutputProgressMonitor(
                GettextCatalog.GetString("Publishing package"), MonoDevelop.Ide.Gui.Stock.RunProgramIcon, true, true);
            var op = new MonoDroidPublishOperation(outputMonitor, options, sourceApk, destApk, packageOp,
                                                   createNewKey, dName, keyValidity);

            op.Completed += delegate {
                opMon.Dispose();
                outputMonitor.Dispose();
            };
            op.Start();
            return(op);
        }
 public static string ResourcesFolderPath(MonoDroidProject androidProject)
 {
     var resgenFile = new FileInfo(androidProject.AndroidResgenFile);
     return resgenFile.Directory.FullName;
 }
        public static List<string> ResolveToResourceDirectories(string directoryName, MonoDroidProject androidProject)
        {
            FileInfo fi = new FileInfo (androidProject.AndroidResgenFile.FullPath);

            var directories = Directory.GetDirectories (fi.Directory.FullName);

            List<string> layoutFolders = new List<string> ();
            foreach (var d in directories) {
                if (d.ToLower().Contains(directoryName)) {
                    layoutFolders.Add ((new DirectoryInfo(d)).FullName);
                }
            }

            return layoutFolders;
        }
        public static List<string> ResolveToFilenames(MemberResolveResult member, MonoDroidProject androidProject, string resolveCategory)
        {
            FileInfo fi = new FileInfo (androidProject.AndroidResgenFile.FullPath);

            var directories = Directory.GetDirectories (fi.Directory.FullName);

            List<DirectoryInfo> layoutFolders = new List<DirectoryInfo> ();
            foreach (var d in directories) {
                if (d.ToLower().Contains(resolveCategory)) {
                    layoutFolders.Add (new DirectoryInfo(d));
                }
            }

            List<string> resolvedLayouts = new List<string> ();

            foreach (var folder in layoutFolders)
            {
                // Get all the resources directories;
                var r = androidProject.GetAndroidResources (folder.Name); // Also get the land, portrait etc...

                resolvedLayouts.AddRange(from l in r
                    where l.Key == member.Member.Name
                    select l.Value.FilePath.FullPath.ToString ());
            }

            return resolvedLayouts;
        }