Skip to content

Commit 41089a2

Browse files
[tests] add a test using Xamarin.Forms.Maps
Context: dotnet#2836 (comment) We have noticed apps using Xamarin.Forms.Maps might be close to hitting the dex limit for fields. An example from @PureWeen: 1> trouble writing output: Too many field references to fit in one dex file: 70468; max is 65536. We think the way Xamarin.Android invokes `aapt` (or `aapt2`) might be creating `R.java` files with more fields than are needed. Step 1 is to add a test project that uses Xamarin.Forms.Maps: we did not have one.
1 parent d548ec9 commit 41089a2

File tree

7 files changed

+63
-1
lines changed

7 files changed

+63
-1
lines changed

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs

+9
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,15 @@ public void BuildBasicApplicationAppCompat ([Values (true, false)] bool usePacka
119119
}
120120
}
121121

122+
[Test]
123+
public void BuildXamarinFormsMapsApplication ()
124+
{
125+
var proj = new XamarinFormsMapsApplicationProject ();
126+
using (var b = CreateApkBuilder (Path.Combine ("temp", TestName))) {
127+
Assert.IsTrue (b.Build (proj), "Build should have succeeded.");
128+
}
129+
}
130+
122131
[Test]
123132
[NonParallelizable]
124133
public void SkipConvertResourcesCases ([Values (false, true)] bool useAapt2)

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/KnownPackages.cs

+13
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,19 @@ public static class KnownPackages
486486
},
487487
}
488488
};
489+
public static Package XamarinFormsMaps_3_6_0_220655 = new Package {
490+
Id = "Xamarin.Forms.Maps",
491+
Version = "3.6.0.220655",
492+
TargetFramework = "MonoAndroid90",
493+
References = {
494+
new BuildItem.Reference ("Xamarin.Forms.Maps.Android") {
495+
MetadataValues = "HintPath=..\\packages\\Xamarin.Forms.Maps.3.6.0.220655\\lib\\MonoAndroid90\\Xamarin.Forms.Maps.Android.dll"
496+
},
497+
new BuildItem.Reference ("Xamarin.Forms.Maps") {
498+
MetadataValues = "HintPath=..\\packages\\Xamarin.Forms.Maps.3.6.0.220655\\lib\\MonoAndroid90\\Xamarin.Forms.Maps.dll"
499+
},
500+
}
501+
};
489502
public static Package CocosSharp_PCL_Shared_1_5_0_0 = new Package {
490503
Id = "CocosSharp.PCL.Shared",
491504
Version = "1.5.0.0",

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinFormsAndroidApplicationProject.cs

+3-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public XamarinFormsAndroidApplicationProject (string debugConfigurationName = "D
5656
TextContent = () => Toolbar_axml,
5757
});
5858
OtherBuildItems.Add (new BuildItem ("EmbeddedResource", "MainPage.xaml") {
59-
TextContent = () => ProcessSourceTemplate (MainPage_xaml),
59+
TextContent = MainPageXaml,
6060
});
6161
Sources.Add (new BuildItem.Source ("MainPage.xaml.cs") {
6262
TextContent = () => ProcessSourceTemplate (MainPage_xaml_cs),
@@ -70,5 +70,7 @@ public XamarinFormsAndroidApplicationProject (string debugConfigurationName = "D
7070

7171
MainActivity = default_main_activity_cs;
7272
}
73+
74+
protected virtual string MainPageXaml () => ProcessSourceTemplate (MainPage_xaml);
7375
}
7476
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using System;
2+
using System.IO;
3+
4+
namespace Xamarin.ProjectTools
5+
{
6+
public class XamarinFormsMapsApplicationProject : XamarinFormsAndroidApplicationProject
7+
{
8+
static readonly string MainPageMaps_xaml;
9+
10+
static XamarinFormsMapsApplicationProject ()
11+
{
12+
using (var sr = new StreamReader (typeof (XamarinAndroidApplicationProject).Assembly.GetManifestResourceStream ("Xamarin.ProjectTools.Resources.Forms.MainPageMaps.xaml")))
13+
MainPageMaps_xaml = sr.ReadToEnd ();
14+
}
15+
16+
public XamarinFormsMapsApplicationProject ()
17+
{
18+
PackageReferences.Add (KnownPackages.XamarinFormsMaps_3_6_0_220655);
19+
MainActivity = MainActivity.Replace ("//${AFTER_FORMS_INIT}", "Xamarin.FormsMaps.Init (this, savedInstanceState);");
20+
//NOTE: API_KEY metadata just has to *exist*
21+
AndroidManifest = AndroidManifest.Replace ("</application>", "<meta-data android:name=\"com.google.android.maps.v2.API_KEY\" android:value=\"\" /></application>");
22+
}
23+
24+
protected override string MainPageXaml () => ProcessSourceTemplate (MainPageMaps_xaml);
25+
}
26+
}

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Forms/MainActivity.cs

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ protected override void OnCreate (Bundle savedInstanceState)
1919

2020
base.OnCreate (savedInstanceState);
2121
global::Xamarin.Forms.Forms.Init (this, savedInstanceState);
22+
//${AFTER_FORMS_INIT}
2223
LoadApplication (new App ());
2324
}
2425
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
3+
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
4+
xmlns:maps="clr-namespace:Xamarin.Forms.Maps;assembly=Xamarin.Forms.Maps"
5+
x:Class="${ROOT_NAMESPACE}.MainPage">
6+
<StackLayout>
7+
<maps:Map MapType="Street" />
8+
</StackLayout>
9+
</ContentPage>

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Xamarin.ProjectTools.csproj

+2
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
</Reference>
3737
</ItemGroup>
3838
<ItemGroup>
39+
<Compile Include="Android\XamarinFormsMapsApplicationProject.cs" />
3940
<Compile Include="Properties\AssemblyInfo.cs" />
4041
<Compile Include="Common\BuildActions.cs" />
4142
<Compile Include="Common\BuildItem.cs" />
@@ -132,6 +133,7 @@
132133
<EmbeddedResource Include="Resources\Forms\App.xaml.cs" />
133134
<EmbeddedResource Include="Resources\Forms\MainPage.xaml" />
134135
<EmbeddedResource Include="Resources\Forms\MainPage.xaml.cs" />
136+
<EmbeddedResource Include="Resources\Forms\MainPageMaps.xaml" />
135137
<EmbeddedResource Include="Resources\Forms\Tabbar.axml" />
136138
<EmbeddedResource Include="Resources\Forms\Toolbar.axml" />
137139
<EmbeddedResource Include="Resources\Forms\colors.xml" />

0 commit comments

Comments
 (0)