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)); }
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); }
//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); }
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; }