diff --git a/external/Java.Interop b/external/Java.Interop index 57d5d514c41..429dc2a6857 160000 --- a/external/Java.Interop +++ b/external/Java.Interop @@ -1 +1 @@ -Subproject commit 57d5d514c41cba1af3e1dc71ea157cff0c5a43b6 +Subproject commit 429dc2a68579c9a820f03a7f09f35da3db9cd54a diff --git a/src/Mono.Android/Android.Runtime/JNIEnv.cs b/src/Mono.Android/Android.Runtime/JNIEnv.cs index 81b5ef420fa..b51c5626c30 100644 --- a/src/Mono.Android/Android.Runtime/JNIEnv.cs +++ b/src/Mono.Android/Android.Runtime/JNIEnv.cs @@ -880,7 +880,7 @@ public static string GetJniName (Type type) { if (type == null) throw new ArgumentNullException ("type"); - var java = monodroid_typemap_managed_to_java (type.AssemblyQualifiedName); + var java = monodroid_typemap_managed_to_java (type.FullName + ", " + type.Assembly.GetName ().Name); return java == IntPtr.Zero ? JavaNativeTypeManager.ToJniName (type) : Marshal.PtrToStringAnsi (java); diff --git a/src/Mono.Android/Test/Java.Interop/JnienvTest.cs b/src/Mono.Android/Test/Java.Interop/JnienvTest.cs index ffef95baf03..255373996f9 100644 --- a/src/Mono.Android/Test/Java.Interop/JnienvTest.cs +++ b/src/Mono.Android/Test/Java.Interop/JnienvTest.cs @@ -388,13 +388,18 @@ public void JavaToManagedTypeMapping () [DllImport ("__Internal")] static extern IntPtr monodroid_typemap_managed_to_java (string java); + string GetTypeName (Type type) + { + return type.FullName + ", " + type.Assembly.GetName ().Name; + } + [Test] public void ManagedToJavaTypeMapping () { - var m = monodroid_typemap_managed_to_java (typeof (Activity).AssemblyQualifiedName); - Assert.AreNotEqual (IntPtr.Zero, m); - m = monodroid_typemap_managed_to_java (typeof (JnienvTest).AssemblyQualifiedName); - Assert.AreEqual (IntPtr.Zero, m); + var m = monodroid_typemap_managed_to_java (GetTypeName (typeof (Activity))); + Assert.AreNotEqual (IntPtr.Zero, m, "`Activity` subclasses Java.Lang.Object, it should be in the typemap!"); + m = monodroid_typemap_managed_to_java (GetTypeName (typeof (JnienvTest)); + Assert.AreEqual (IntPtr.Zero, m, "`JnienvTest` does *not* subclass Java.Lang.Object, it should *not* be in the typemap!"); } [Test] diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateJavaStubs.cs b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateJavaStubs.cs index 48dfd69ad6d..2c681cf2c78 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateJavaStubs.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateJavaStubs.cs @@ -163,7 +163,6 @@ void Run (DirectoryAssemblyResolver res) string javaKey = JavaNativeTypeManager.ToJniName (type).Replace ('/', '.'); acw_map.WriteLine ("{0};{1}", type.GetPartialAssemblyQualifiedName (), javaKey); - acw_map.WriteLine ("{0};{1}", type.GetAssemblyQualifiedName (), javaKey); TypeDefinition conflict; if (managed.TryGetValue (managedKey, out conflict)) { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs index b5fc5a1beb1..23fe16a168b 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs @@ -2,6 +2,7 @@ using System.Diagnostics; using System.IO; using System.Linq; +using System.Reflection; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; @@ -174,6 +175,33 @@ public void BuildApplicationWithLibraryAndClean ([Values (false, true)] bool isR } } + [Test] + public void BuildIncrementingAssemblyVersion () + { + var proj = new XamarinAndroidApplicationProject (); + proj.Sources.Add (new BuildItem ("Compile", "AssemblyInfo.cs") { + TextContent = () => "[assembly: System.Reflection.AssemblyVersion (\"1.0.0.*\")]" + }); + + using (var b = CreateApkBuilder ("temp/BuildIncrementingAssemblyVersion")) { + Assert.IsTrue (b.Build (proj), "Build should have succeeded."); + + var acwmapPath = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, "acw-map.txt"); + var assemblyPath = Path.Combine (Root, b.ProjectDirectory, proj.OutputPath, "UnnamedProject.dll"); + var firstAssemblyVersion = AssemblyName.GetAssemblyName (assemblyPath).Version; + var expectedAcwMap = File.ReadAllText (acwmapPath); + + b.Target = "Rebuild"; + b.BuildLogFile = "rebuild.log"; + Assert.IsTrue (b.Build (proj), "Rebuild should have succeeded."); + + var secondAssemblyVersion = AssemblyName.GetAssemblyName (assemblyPath).Version; + Assert.AreNotEqual (firstAssemblyVersion, secondAssemblyVersion); + var actualAcwMap = File.ReadAllText (acwmapPath); + Assert.AreEqual (expectedAcwMap, actualAcwMap); + } + } + [Test] public void BuildMkBundleApplicationRelease () {