-
Notifications
You must be signed in to change notification settings - Fork 538
/
Copy pathDesugar.cs
100 lines (73 loc) · 3 KB
/
Desugar.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
// Copyright (C) 2011 Xamarin, Inc. All rights reserved.
using System;
using System.Linq;
using System.IO;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
using System.Text;
using System.Collections.Generic;
using Xamarin.Android.Tools;
namespace Xamarin.Android.Tasks
{
public class Desugar : JavaToolTask
{
[Required]
public string DesugarJarPath { get; set; }
[Required]
public string JavaPlatformJarPath { get; set; }
public string DesugarExtraArguments { get; set; }
[Required]
public string ManifestFile { get; set; }
[Required]
public string OutputDirectory { get; set; }
public string [] InputJars { get; set; }
[Output]
public string [] OutputJars { get; set; }
public override bool Execute ()
{
if (!Directory.Exists (OutputDirectory))
Directory.CreateDirectory (OutputDirectory);
return base.Execute ();
}
protected override string GenerateCommandLineCommands ()
{
// Running command: C:\Program Files (x86)\Java\jdk1.6.0_20\bin\java.exe
// "-jar" "C:\Program Files (x86)\Android\android-sdk-windows\platform-tools\jill.jar"
// "--output-dex" "bin\classes"
// "-classpath" "C:\Users\Jonathan\Documents\Visual Studio 2010\Projects\AndroidMSBuildTest\AndroidMSBuildTest\obj\Debug\android\bin\mono.android.jar"
// "@C:\Users\Jonathan\AppData\Local\Temp\tmp79c4ac38.tmp"
//var android_dir = MonoDroid.MonoDroidSdk.GetAndroidProfileDirectory (TargetFrameworkDirectory);
var doc = AndroidAppManifest.Load (ManifestFile, MonoAndroidHelper.SupportedVersions);
int minApiVersion = doc.MinSdkVersion == null ? 4 : (int)doc.MinSdkVersion;
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);
cmd.AppendSwitchIfNotNull ("-jar ", DesugarJarPath);
cmd.AppendSwitch ("--bootclasspath_entry ");
cmd.AppendFileNameIfNotNull (JavaPlatformJarPath);
cmd.AppendSwitch ("--min_sdk_version ");
cmd.AppendSwitch (minApiVersion.ToString ());
//cmd.AppendSwitchIfNotNull ("-J-Dfile.encoding=", "UTF8");
if (!string.IsNullOrEmpty (DesugarExtraArguments))
cmd.AppendSwitch (DesugarExtraArguments); // it should contain "--dex".
var outputs = new List<string> ();
var md5 = System.Security.Cryptography.MD5.Create ();
foreach (var jar in InputJars) {
var output = Path.Combine (OutputDirectory, BitConverter.ToString (md5.ComputeHash (Encoding.UTF8.GetBytes (jar))) + Path.GetFileName (jar));
outputs.Add (output);
cmd.AppendSwitch ("--input ");
cmd.AppendFileNameIfNotNull (jar);
cmd.AppendSwitch ("--output ");
cmd.AppendFileNameIfNotNull (output);
}
OutputJars = outputs.ToArray ();
return cmd.ToString ();
}
}
}