public override bool Execute() { Log.LogDebugMessage("JarToXml Task"); Log.LogDebugMessage(" JavaOptions: {0}", JavaOptions); Log.LogDebugMessage(" JavaMaximumHeapSize: {0}", JavaMaximumHeapSize); Log.LogDebugMessage(" AndroidSdkDirectory: {0}", AndroidSdkDirectory); Log.LogDebugMessage(" AndroidApiLevel: {0}", AndroidApiLevel); Log.LogDebugMessage(" MonoAndroidToolsDirectory: {0}", MonoAndroidToolsDirectory); Log.LogDebugMessage(" JavaSdkDirectory: {0}", JavaSdkDirectory); Log.LogDebugMessage(" OutputFile: {0}", OutputFile); Log.LogDebugMessage(" DroidDocPaths: {0}", DroidDocPaths); Log.LogDebugMessage(" JavaDocPaths: {0}", JavaDocPaths); Log.LogDebugMessage(" Java7DocPaths: {0}", Java7DocPaths); Log.LogDebugMessage(" Java8DocPaths: {0}", Java8DocPaths); Log.LogDebugTaskItems(" JavaDocs: {0}", JavaDocs); Log.LogDebugTaskItems(" LibraryProjectJars:", LibraryProjectJars); Log.LogDebugTaskItems(" SourceJars:", SourceJars); Log.LogDebugTaskItems(" ReferenceJars:", ReferenceJars); if (SourceJars == null || SourceJars.Count() == 0) { Log.LogError("At least one Java library is required for binding, this must be either 'EmbeddedJar', 'InputJar' (for jar), 'LibraryProjectZip' (for aar or zip) or 'LibraryProjectProperties' (project.properties) build action."); return(false); } // Ensure that the user has the platform they are targeting installed var jarpath = Path.Combine(AndroidSdk.GetPlatformDirectoryFromApiLevel(AndroidApiLevel, MonoAndroidHelper.SupportedVersions), "android.jar"); if (!File.Exists(jarpath)) { Log.LogError("Could not find android.jar for API Level {0}. This means the Android SDK platform for API Level {0} is not installed. Either install it in the Android SDK Manager, or change your Android Bindings project to target an API version that is installed. ({1} missing.)", AndroidApiLevel, jarpath); return(false); } // Ensure that all requested jars exist foreach (var jar in SourceJars) { if (!File.Exists(jar.ItemSpec)) { Log.LogError("Specified source jar not found: {0}", jar.ItemSpec); } } if (ReferenceJars != null) { foreach (var jar in ReferenceJars) { if (!File.Exists(jar.ItemSpec)) { Log.LogError("Specified reference jar not found: {0}", jar.ItemSpec); } } } if (Log.HasLoggedErrors) { return(false); } // Ensure our output directory exists Directory.CreateDirectory(Path.GetDirectoryName(OutputFile)); return(base.Execute()); }
public override bool Execute() { Log.LogDebugMessage("GetJavaPlatformJar Task"); Log.LogDebugMessage(" AndroidSdkDirectory: {0}", AndroidSdkDirectory); Log.LogDebugMessage(" AndroidSdkPlatform: {0}", AndroidSdkPlatform); Log.LogDebugMessage(" AndroidManifest: {0}", AndroidManifest); var platform = AndroidSdkPlatform; XAttribute target_sdk = null; // Look for targetSdkVersion in the user's AndroidManifest.xml if (!string.IsNullOrWhiteSpace(AndroidManifest)) { if (!File.Exists(AndroidManifest)) { Log.LogError("Specified AndroidManifest.xml file does not exist: {0}.", AndroidManifest); return(false); } try { var doc = XDocument.Load(AndroidManifest); var manifest = doc.Root; if (manifest != null) { var uses_sdk = manifest.Element("uses-sdk"); if (uses_sdk != null) { target_sdk = uses_sdk.Attribute(androidNs + "targetSdkVersion"); if (target_sdk != null && !string.IsNullOrWhiteSpace(target_sdk.Value)) { platform = target_sdk.Value; } } } } catch (Exception ex) { // If they're manifest is bad, let's error them out Log.LogErrorFromException(ex, true); return(false); } } platform = GetTargetSdkVersion(platform, target_sdk); JavaPlatformJarPath = Path.Combine(AndroidSdk.GetPlatformDirectoryFromApiLevel(platform, MonoAndroidHelper.SupportedVersions), "android.jar"); if (!File.Exists(JavaPlatformJarPath)) { Log.LogError("Could not find android.jar for API Level {0}. " + "This means the Android SDK platform for API Level {0} is not installed. " + "Either install it in the Android SDK Manager (Tools > Open Android SDK Manager...), " + "or change your Xamarin.Android project to target an API version that is installed. " + "({1} missing.)", platform, JavaPlatformJarPath); return(false); } TargetSdkVersion = platform; Log.LogDebugMessage(" [Output] JavaPlatformJarPath: {0}", JavaPlatformJarPath); Log.LogDebugMessage(" [Output] TargetSdkVersion: {0}", TargetSdkVersion); return(true); }
protected override string GenerateCommandLineCommands() { var cmd = new CommandLineBuilder(); // Add the JavaOptions if they are not null // These could be any of the additional options if (!string.IsNullOrEmpty(JavaOptions)) { cmd.AppendSwitch(JavaOptions); } // Add the specific -XmxN to override the default heap size for the JVM // N can be in the form of Nm or NGB (e.g 100m or 1GB ) cmd.AppendSwitchIfNotNull("-Xmx", JavaMaximumHeapSize); // See https://bugzilla.xamarin.com/show_bug.cgi?id=21096 cmd.AppendSwitch("-XX:-UseSplitVerifier"); // Arguments sent to java.exe cmd.AppendSwitchIfNotNull("-jar ", Path.Combine(MonoAndroidToolsDirectory, "jar2xml.jar")); foreach (var jar in SourceJars) { cmd.AppendSwitchIfNotNull("--jar=", Path.GetFullPath(jar.ItemSpec)); } var libraryProjectJars = MonoAndroidHelper.ExpandFiles(LibraryProjectJars); foreach (var jar in libraryProjectJars) { if (MonoAndroidHelper.IsEmbeddedReferenceJar(jar)) { cmd.AppendSwitchIfNotNull("--ref=", Path.GetFullPath(jar)); } else { cmd.AppendSwitchIfNotNull("--jar=", Path.GetFullPath(jar)); } } // Arguments sent to jar2xml var jarpath = Path.Combine(AndroidSdk.GetPlatformDirectoryFromApiLevel(AndroidApiLevel, MonoAndroidHelper.SupportedVersions), "android.jar"); cmd.AppendSwitchIfNotNull("--ref=", Path.GetFullPath(jarpath)); cmd.AppendSwitchIfNotNull("--out=", Path.GetFullPath(OutputFile)); if (ReferenceJars != null) { foreach (var jar in ReferenceJars) { cmd.AppendSwitchIfNotNull("--ref=", Path.GetFullPath(jar.ItemSpec)); } } if (DroidDocPaths != null) { foreach (var path in DroidDocPaths.Split(';')) { cmd.AppendSwitchIfNotNull("--droiddocpath=", Path.GetFullPath(path)); } } if (JavaDocPaths != null) { foreach (var path in JavaDocPaths.Split(';')) { cmd.AppendSwitchIfNotNull("--javadocpath=", Path.GetFullPath(path)); } } if (Java7DocPaths != null) { foreach (var path in Java7DocPaths.Split(';')) { cmd.AppendSwitchIfNotNull("--java7docpath=", Path.GetFullPath(path)); } } if (Java8DocPaths != null) { foreach (var path in Java8DocPaths.Split(';')) { cmd.AppendSwitchIfNotNull("--java8docpath=", Path.GetFullPath(path)); } } if (JavaDocs != null) { foreach (var doc in JavaDocs) { var opt = GetJavadocOption(doc.ItemSpec); if (opt != null) { cmd.AppendSwitchIfNotNull(opt, Path.GetFullPath(Path.GetDirectoryName(doc.ItemSpec))); } } } return(cmd.ToString()); }