diff --git a/Xamarin.Android.sln b/Xamarin.Android.sln
index e9bee5053e7..c658683f84e 100644
--- a/Xamarin.Android.sln
+++ b/Xamarin.Android.sln
@@ -21,7 +21,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Java.Interop", "external\Ja
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "generator", "external\Java.Interop\tools\generator\generator.csproj", "{D14A1B5C-2060-4930-92BE-F7190256C735}"
EndProject
-Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Xamarin.Android.NamingCustomAttributes", "external\Java.Interop\src\Xamarin.Android.NamingCustomAttributes\Xamarin.Android.NamingCustomAttributes.shproj", "{74598F5C-B8CC-4CE6-8EE2-AB9CA1400076}"
+Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Java.Interop.NamingCustomAttributes", "external\Java.Interop\src\Java.Interop.NamingCustomAttributes\Java.Interop.NamingCustomAttributes.shproj", "{FE789F04-5E95-42C5-AEF1-E33F8DF06B3F}"
+EndProject
+Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Xamarin.Android.NamingCustomAttributes", "src\Xamarin.Android.NamingCustomAttributes\Xamarin.Android.NamingCustomAttributes.shproj", "{74598F5C-B8CC-4CE6-8EE2-AB9CA1400076}"
EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Java.Interop.Tools.TypeNameMappings", "external\Java.Interop\src\Java.Interop.Tools.TypeNameMappings\Java.Interop.Tools.TypeNameMappings.shproj", "{E706B6F2-5562-4765-8F07-8CF84A797B30}"
EndProject
@@ -410,6 +412,7 @@ Global
{3FC3E78B-F7D4-42EA-BBE8-4535DF42BFF8} = {E351F97D-EA4F-4E7F-AAA0-8EBB1F2A4A62}
{94BD81F7-B06F-4295-9636-F8A3B6BDC762} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
{D14A1B5C-2060-4930-92BE-F7190256C735} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
+ {FE789F04-5E95-42C5-AEF1-E33F8DF06B3F} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
{74598F5C-B8CC-4CE6-8EE2-AB9CA1400076} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
{E706B6F2-5562-4765-8F07-8CF84A797B30} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
{66CF299A-CE95-4131-BCD8-DB66E30C4BF7} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
diff --git a/external/Java.Interop b/external/Java.Interop
index 46e58ef6a25..b58416a5fcc 160000
--- a/external/Java.Interop
+++ b/external/Java.Interop
@@ -1 +1 @@
-Subproject commit 46e58ef6a2531812983203f4e62b33d2fe7a4257
+Subproject commit b58416a5fcc71199804e46e90c59bf3457f689cd
diff --git a/src/Mono.Android/Mono.Android.csproj b/src/Mono.Android/Mono.Android.csproj
index 3848102662d..43c3c56ff9c 100644
--- a/src/Mono.Android/Mono.Android.csproj
+++ b/src/Mono.Android/Mono.Android.csproj
@@ -294,7 +294,7 @@
-
+
$(IntermediateOutputPath)android-$(AndroidApiLevel)\
diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.csproj b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.csproj
index 42f8e4ac98c..1adb2b02c74 100644
--- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.csproj
+++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.csproj
@@ -12,7 +12,7 @@
v4.5
-
+
True
diff --git a/src/Xamarin.Android.NamingCustomAttributes/Android.App/ActivityAttribute.cs b/src/Xamarin.Android.NamingCustomAttributes/Android.App/ActivityAttribute.cs
new file mode 100644
index 00000000000..928d0f5cbe7
--- /dev/null
+++ b/src/Xamarin.Android.NamingCustomAttributes/Android.App/ActivityAttribute.cs
@@ -0,0 +1,67 @@
+using System;
+
+using Android.Content.PM;
+using Android.Views;
+
+namespace Android.App
+{
+
+ [Serializable]
+ [AttributeUsage (AttributeTargets.Class,
+ AllowMultiple=false,
+ Inherited=false)]
+ public sealed partial class ActivityAttribute : Attribute {
+
+ public ActivityAttribute ()
+ {
+ }
+
+ public string Name {get; set;}
+
+#if ANDROID_20
+ public bool AllowEmbedded {get; set;}
+#endif
+ public bool AllowTaskReparenting {get; set;}
+ public bool AlwaysRetainTaskState {get; set;}
+ public bool ClearTaskOnLaunch {get; set;}
+ public ConfigChanges ConfigurationChanges {get; set;}
+ public bool Enabled {get; set;}
+ public bool ExcludeFromRecents {get; set;}
+ public bool Exported {get; set;}
+ public bool FinishOnTaskLaunch {get; set;}
+#if ANDROID_11
+ public bool HardwareAccelerated {get; set;}
+#endif
+ public string Icon {get; set;}
+ public string Label {get; set;}
+ public LaunchMode LaunchMode {get; set;}
+#if ANDROID_17
+ [Obsolete ("There is no //activity/@android:layoutDirection attribute. This was a mistake. " +
+ "Perhaps you wanted ConfigurationChanges=ConfigChanges.LayoutDirection?")]
+ public LayoutDirection LayoutDirection {get; set;}
+#endif
+ public bool MainLauncher {get; set;}
+ public bool MultiProcess {get; set;}
+ public bool NoHistory {get; set;}
+#if ANDROID_16
+ public Type ParentActivity {get; set;}
+#endif
+ public string Permission {get; set;}
+ public string Process {get; set;}
+#if ANDROID_24
+ public bool ResizeableActivity {get;set;}
+ public bool SupportsPictureInPicture {get;set;}
+#endif
+ public ScreenOrientation ScreenOrientation {get; set;}
+ public bool StateNotNeeded {get; set;}
+ public string TaskAffinity {get; set;}
+ public string Theme {get; set;}
+#if ANDROID_14
+ public UiOptions UiOptions {get; set;}
+#endif
+ public SoftInput WindowSoftInputMode {get; set;}
+#if ANDROID_15 // this is not documented on http://developer.android.com/guide/topics/manifest/activity-element.html but on https://developers.google.com/glass/develop/gdk/immersions
+ public bool Immersive {get; set;}
+#endif
+ }
+}
diff --git a/src/Xamarin.Android.NamingCustomAttributes/Android.App/ApplicationAttribute.cs b/src/Xamarin.Android.NamingCustomAttributes/Android.App/ApplicationAttribute.cs
new file mode 100644
index 00000000000..c50cad8ed85
--- /dev/null
+++ b/src/Xamarin.Android.NamingCustomAttributes/Android.App/ApplicationAttribute.cs
@@ -0,0 +1,75 @@
+using System;
+
+using Android.Content.PM;
+using Android.Views;
+
+namespace Android.App {
+
+ [Serializable]
+ [AttributeUsage (AttributeTargets.Assembly | AttributeTargets.Class,
+ AllowMultiple=false,
+ Inherited=false)]
+ public sealed partial class ApplicationAttribute : Attribute {
+
+ public ApplicationAttribute ()
+ {
+ }
+
+ public string Name {get; set;}
+
+ public bool AllowBackup {get; set;}
+ public bool AllowClearUserData {get; set;}
+ public bool AllowTaskReparenting {get; set;}
+#if ANDROID_8
+ public Type BackupAgent {get; set;}
+#endif
+#if ANDROID_21
+ public string Banner {get; set;}
+#endif
+ public bool Debuggable {get; set;}
+ public string Description {get; set;}
+ public bool Enabled {get; set;}
+#if ANDROID_23
+ public bool ExtractNativeLibs {get; set;}
+ public bool FullBackupContent {get; set;}
+#endif
+#if ANDROID_11
+ public bool HardwareAccelerated {get; set;}
+#endif
+ public bool HasCode {get; set;}
+ public string Icon {get; set;}
+ public bool KillAfterRestore {get; set;}
+#if ANDROID_11
+ public bool LargeHeap {get; set;}
+#endif
+ public string Label {get; set;}
+#if ANDROID_11
+ public string Logo {get; set;}
+#endif
+ public Type ManageSpaceActivity {get; set;}
+ public string Permission {get; set;}
+ public bool Persistent {get; set;}
+ public string Process {get; set;}
+#if ANDROID_18
+ public string RequiredAccountType {get; set;}
+#endif
+ public bool RestoreAnyVersion {get; set;}
+#if ANDROID_18
+ public string RestrictedAccountType {get; set;}
+#endif
+#if ANDROID_17
+ public bool SupportsRtl {get; set;}
+#endif
+ public string TaskAffinity {get; set;}
+ public string Theme {get; set;}
+#if ANDROID_14
+ public UiOptions UiOptions {get; set;}
+#endif
+#if ANDROID_10
+ public bool VMSafeMode {get; set;}
+#endif
+#if ANDROID_24
+ public bool ResizeableActivity {get; set;}
+#endif
+ }
+}
diff --git a/src/Xamarin.Android.NamingCustomAttributes/Android.App/InstrumentationAttribute.cs b/src/Xamarin.Android.NamingCustomAttributes/Android.App/InstrumentationAttribute.cs
new file mode 100644
index 00000000000..c7a705eb484
--- /dev/null
+++ b/src/Xamarin.Android.NamingCustomAttributes/Android.App/InstrumentationAttribute.cs
@@ -0,0 +1,23 @@
+using System;
+
+namespace Android.App {
+
+ [Serializable]
+ [AttributeUsage (AttributeTargets.Assembly | AttributeTargets.Class,
+ AllowMultiple=true,
+ Inherited=false)]
+ public sealed partial class InstrumentationAttribute : Attribute {
+
+ public InstrumentationAttribute ()
+ {
+ }
+
+ public bool FunctionalTest {get; set;}
+ public bool HandleProfiling {get; set;}
+ public string Icon {get; set;}
+ public string Label {get; set;}
+ public string Name {get; set;}
+ public string TargetPackage {get; set;}
+ }
+}
+
diff --git a/src/Xamarin.Android.NamingCustomAttributes/Android.App/ServiceAttribute.cs b/src/Xamarin.Android.NamingCustomAttributes/Android.App/ServiceAttribute.cs
new file mode 100644
index 00000000000..47225e09c8e
--- /dev/null
+++ b/src/Xamarin.Android.NamingCustomAttributes/Android.App/ServiceAttribute.cs
@@ -0,0 +1,30 @@
+using System;
+
+using Android.Content.PM;
+using Android.Views;
+
+namespace Android.App {
+
+ [Serializable]
+ [AttributeUsage (AttributeTargets.Class,
+ AllowMultiple=false,
+ Inherited=false)]
+ public sealed partial class ServiceAttribute : Attribute {
+
+ public ServiceAttribute ()
+ {
+ }
+
+ public string Name {get; set;}
+
+ public bool Enabled {get; set;}
+ public bool Exported {get; set;}
+ public string Icon {get; set;}
+#if ANDROID_16
+ public bool IsolatedProcess {get; set;}
+#endif
+ public string Label {get; set;}
+ public string Permission {get; set;}
+ public string Process {get; set;}
+ }
+}
diff --git a/src/Xamarin.Android.NamingCustomAttributes/Android.Content/BroadcastReceiverAttribute.cs b/src/Xamarin.Android.NamingCustomAttributes/Android.Content/BroadcastReceiverAttribute.cs
new file mode 100644
index 00000000000..28ed046b93f
--- /dev/null
+++ b/src/Xamarin.Android.NamingCustomAttributes/Android.Content/BroadcastReceiverAttribute.cs
@@ -0,0 +1,24 @@
+using System;
+
+namespace Android.Content {
+
+ [Serializable]
+ [AttributeUsage (AttributeTargets.Class,
+ AllowMultiple=false,
+ Inherited=false)]
+ public partial class BroadcastReceiverAttribute : Attribute {
+
+ public BroadcastReceiverAttribute ()
+ {
+ }
+
+ public bool DirectBootAware {get; set;}
+ public bool Enabled {get; set;}
+ public bool Exported {get; set;}
+ public string Icon {get; set;}
+ public string Label {get; set;}
+ public string Name {get; set;}
+ public string Permission {get; set;}
+ public string Process {get; set;}
+ }
+}
diff --git a/src/Xamarin.Android.NamingCustomAttributes/Android.Content/ContentProviderAttribute.cs b/src/Xamarin.Android.NamingCustomAttributes/Android.Content/ContentProviderAttribute.cs
new file mode 100644
index 00000000000..4cf17b2f170
--- /dev/null
+++ b/src/Xamarin.Android.NamingCustomAttributes/Android.Content/ContentProviderAttribute.cs
@@ -0,0 +1,35 @@
+using System;
+
+namespace Android.Content {
+
+ [Serializable]
+ [AttributeUsage (AttributeTargets.Class,
+ AllowMultiple=false,
+ Inherited=false)]
+ public partial class ContentProviderAttribute : Attribute {
+
+ public ContentProviderAttribute (string[] authorities)
+ {
+ if (authorities == null)
+ throw new ArgumentNullException ("authorities");
+ if (authorities.Length < 1)
+ throw new ArgumentException ("At least one authority must be specified.", "authorities");
+ Authorities = authorities;
+ }
+
+ public string[] Authorities {get; private set;}
+ public bool Enabled {get; set;}
+ public bool Exported {get; set;}
+ public bool GrantUriPermissions {get; set;}
+ public string Icon {get; set;}
+ public int InitOrder {get; set;}
+ public string Label {get; set;}
+ public bool MultiProcess {get; set;}
+ public string Name {get; set;}
+ public string Permission {get; set;}
+ public string Process {get; set;}
+ public string ReadPermission {get; set;}
+ public bool Syncable {get; set;}
+ public string WritePermission {get; set;}
+ }
+}
diff --git a/src/Xamarin.Android.NamingCustomAttributes/Android.Runtime/RegisterAttribute.cs b/src/Xamarin.Android.NamingCustomAttributes/Android.Runtime/RegisterAttribute.cs
new file mode 100644
index 00000000000..fea5548ede2
--- /dev/null
+++ b/src/Xamarin.Android.NamingCustomAttributes/Android.Runtime/RegisterAttribute.cs
@@ -0,0 +1,46 @@
+using System;
+
+namespace Android.Runtime {
+
+ [AttributeUsage (AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Field | AttributeTargets.Interface | AttributeTargets.Method | AttributeTargets.Property)]
+#if !JCW_ONLY_TYPE_NAMES
+ public
+#endif // !JCW_ONLY_TYPE_NAMES
+ sealed class RegisterAttribute : Attribute {
+
+ string connector;
+ string name;
+ string signature;
+
+ public RegisterAttribute (string name)
+ {
+ this.name = name;
+ }
+
+ public RegisterAttribute (string name, string signature, string connector)
+ : this (name)
+ {
+ this.connector = connector;
+ this.signature = signature;
+ }
+
+ public string Connector {
+ get { return connector; }
+ set { connector = value; }
+ }
+
+ public string Name {
+ get { return name; }
+ set { name = value; }
+ }
+
+ public string Signature {
+ get { return signature; }
+ set { signature = value; }
+ }
+
+ public bool DoNotGenerateAcw {get; set;}
+
+ public int ApiSince {get; set;}
+ }
+}
diff --git a/src/Xamarin.Android.NamingCustomAttributes/Java.Interop/ExportAttribute.cs b/src/Xamarin.Android.NamingCustomAttributes/Java.Interop/ExportAttribute.cs
new file mode 100644
index 00000000000..1c11925041d
--- /dev/null
+++ b/src/Xamarin.Android.NamingCustomAttributes/Java.Interop/ExportAttribute.cs
@@ -0,0 +1,30 @@
+using System;
+
+namespace Java.Interop {
+
+ [Serializable]
+ [AttributeUsage (AttributeTargets.Method | AttributeTargets.Constructor,
+ AllowMultiple=false,
+ Inherited=false)]
+#if !JCW_ONLY_TYPE_NAMES
+ public
+#endif // !JCW_ONLY_TYPE_NAMES
+ partial class ExportAttribute : Attribute {
+
+ public ExportAttribute ()
+ {
+ }
+
+ public ExportAttribute (string name)
+ {
+ Name = name;
+ }
+
+ public string Name {get; private set;}
+ public string SuperArgumentsString {get; set;}
+ public Type [] Throws {get; set;}
+ internal string [] ThrownNames {get; set;} // msbuild internal use
+ }
+}
+
+
diff --git a/src/Xamarin.Android.NamingCustomAttributes/Java.Interop/ExportFieldAttribute.cs b/src/Xamarin.Android.NamingCustomAttributes/Java.Interop/ExportFieldAttribute.cs
new file mode 100644
index 00000000000..753406e2633
--- /dev/null
+++ b/src/Xamarin.Android.NamingCustomAttributes/Java.Interop/ExportFieldAttribute.cs
@@ -0,0 +1,23 @@
+using System;
+
+namespace Java.Interop {
+
+ [Serializable]
+ [AttributeUsage (AttributeTargets.Method,
+ AllowMultiple=false,
+ Inherited=false)]
+#if !JCW_ONLY_TYPE_NAMES
+ public
+#endif // !JCW_ONLY_TYPE_NAMES
+ partial class ExportFieldAttribute : Attribute {
+
+ public ExportFieldAttribute (string name)
+ {
+ Name = name;
+ }
+
+ public string Name {get; set;}
+ }
+}
+
+
diff --git a/src/Xamarin.Android.NamingCustomAttributes/Java.Interop/ExportParameterAttribute.cs b/src/Xamarin.Android.NamingCustomAttributes/Java.Interop/ExportParameterAttribute.cs
new file mode 100644
index 00000000000..ea6ceb6199d
--- /dev/null
+++ b/src/Xamarin.Android.NamingCustomAttributes/Java.Interop/ExportParameterAttribute.cs
@@ -0,0 +1,23 @@
+using System;
+
+namespace Java.Interop {
+
+ [Serializable]
+ [AttributeUsage (AttributeTargets.Parameter | AttributeTargets.ReturnValue,
+ AllowMultiple=false,
+ Inherited=false)]
+#if !JCW_ONLY_TYPE_NAMES
+ public
+#endif // !JCW_ONLY_TYPE_NAMES
+ partial class ExportParameterAttribute : Attribute {
+
+ public ExportParameterAttribute (ExportParameterKind kind)
+ {
+ Kind = kind;
+ }
+
+ public ExportParameterKind Kind { get; private set; }
+ }
+}
+
+
diff --git a/src/Xamarin.Android.NamingCustomAttributes/Java.Interop/ExportParameterKind.cs b/src/Xamarin.Android.NamingCustomAttributes/Java.Interop/ExportParameterKind.cs
new file mode 100644
index 00000000000..b3c9b5e2b37
--- /dev/null
+++ b/src/Xamarin.Android.NamingCustomAttributes/Java.Interop/ExportParameterKind.cs
@@ -0,0 +1,12 @@
+namespace Java.Interop {
+#if !JCW_ONLY_TYPE_NAMES
+ public
+#endif // !JCW_ONLY_TYPE_NAMES
+ enum ExportParameterKind {
+ Unspecified,
+ InputStream,
+ OutputStream,
+ XmlPullParser,
+ XmlResourceParser
+ }
+}
diff --git a/src/Xamarin.Android.NamingCustomAttributes/Xamarin.Android.NamingCustomAttributes.projitems b/src/Xamarin.Android.NamingCustomAttributes/Xamarin.Android.NamingCustomAttributes.projitems
new file mode 100644
index 00000000000..9f8e4ffaf93
--- /dev/null
+++ b/src/Xamarin.Android.NamingCustomAttributes/Xamarin.Android.NamingCustomAttributes.projitems
@@ -0,0 +1,24 @@
+
+
+
+ $(MSBuildAllProjects);$(MSBuildThisFileFullPath)
+ true
+ {74598F5C-B8CC-4CE6-8EE2-AB9CA1400076}
+
+
+ Xamarin.Android.NamingCustomAttributes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Xamarin.Android.NamingCustomAttributes/Xamarin.Android.NamingCustomAttributes.shproj b/src/Xamarin.Android.NamingCustomAttributes/Xamarin.Android.NamingCustomAttributes.shproj
new file mode 100644
index 00000000000..f762d9427c7
--- /dev/null
+++ b/src/Xamarin.Android.NamingCustomAttributes/Xamarin.Android.NamingCustomAttributes.shproj
@@ -0,0 +1,13 @@
+
+
+
+ 8.0.30703
+ 2.0
+ {74598F5C-B8CC-4CE6-8EE2-AB9CA1400076}
+
+
+
+
+
+
+
\ No newline at end of file