Skip to content

Commit 3d41c0b

Browse files
committed
[msbuild] support AndroidManifest.xml placeholders.
We only support ${applicationId} so far, but it seems to be used a lot as https://developer.android.com/studio/build/manifest-build-variables.html Since we are not using Gradle, we'd need something similar to it, which is therefore MSBuild property.
1 parent 6afb672 commit 3d41c0b

File tree

3 files changed

+15
-2
lines changed

3 files changed

+15
-2
lines changed

src/Xamarin.Android.Build.Tasks/Tasks/GenerateJavaStubs.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class GenerateJavaStubs : Task
3838
public bool Debug { get; set; }
3939
public string ApplicationName { get; set; }
4040
public string PackageName { get; set; }
41+
public string [] ManifestPlaceholders { get; set; }
4142

4243
public string AndroidSdkDir { get; set; }
4344

@@ -77,6 +78,7 @@ public override bool Execute ()
7778
Log.LogDebugTaskItems (" MergedManifestDocuments:", MergedManifestDocuments);
7879
Log.LogDebugMessage (" PackageNamingPolicy: {0}", PackageNamingPolicy);
7980
Log.LogDebugMessage (" ApplicationJavaClass: {0}", ApplicationJavaClass);
81+
Log.LogDebugTaskItems (" ManifestPlaceholders: ", ManifestPlaceholders);
8082

8183
try {
8284
// We're going to do 3 steps here instead of separate tasks so
@@ -199,6 +201,7 @@ void Run (DirectoryAssemblyResolver res)
199201

200202
manifest.PackageName = PackageName;
201203
manifest.ApplicationName = ApplicationName ?? PackageName;
204+
manifest.Placeholders = ManifestPlaceholders;
202205
manifest.Assemblies.AddRange (assemblies);
203206
manifest.Resolver = res;
204207
manifest.SdkDir = AndroidSdkDir;

src/Xamarin.Android.Build.Tasks/Utilities/ManifestDocument.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ internal class ManifestDocument
4747
public string PackageName { get; set; }
4848
public List<string> Addons { get; private set; }
4949
public string ApplicationName { get; set; }
50+
public string [] Placeholders { get; set; }
5051
public List<string> Assemblies { get; set; }
5152
public DirectoryAssemblyResolver Resolver { get; set; }
5253
public string SdkDir { get; set; }
@@ -780,7 +781,7 @@ public void Save (string filename)
780781
using (var file = new StreamWriter (filename, false, new UTF8Encoding (false)))
781782
Save (file);
782783
}
783-
784+
784785
public void Save (System.IO.TextWriter stream)
785786
{
786787
var ms = new MemoryStream ();
@@ -790,6 +791,13 @@ public void Save (System.IO.TextWriter stream)
790791
var s = new StreamReader (ms).ReadToEnd ();
791792
if (ApplicationName != null)
792793
s = s.Replace ("${applicationId}", ApplicationName);
794+
if (Placeholders != null)
795+
foreach (var entry in Placeholders.Select (e => e.Split ('='))) {
796+
if (entry.Length >= 2)
797+
s = s.Replace ("${" + entry [0] + "}", string.Join ("=", entry.Skip (1)));
798+
else
799+
log.LogWarning ("Invalid application placeholders (AndroidApplicationPlaceholders) value. Use 'key1=value1;key2=value2, ...' format. The specified value was: " + Placeholders);
800+
}
793801
stream.Write (s);
794802
}
795803

src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,6 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved.
178178
<AndroidUpdateResourceReferences Condition="'$(AndroidUpdateResourceReferences)' == ''">True</AndroidUpdateResourceReferences>
179179
<EmbedAssembliesIntoApk Condition="'$(EmbedAssembliesIntoApk)' == ''">True</EmbedAssembliesIntoApk>
180180

181-
182181
<!-- Ahead-of-time compilation properties -->
183182
<AndroidAotMode Condition=" '$(AndroidAotMode)' == '' And '$(AotAssemblies)' == 'True' ">Normal</AndroidAotMode>
184183
<AotAssemblies Condition=" '$(AndroidAotMode)' != '' ">True</AotAssemblies>
@@ -249,6 +248,8 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved.
249248

250249
<_AndroidMainDexListFile>$(IntermediateOutputPath)multidex.keep</_AndroidMainDexListFile>
251250

251+
<AndroidManifestPlaceholders Condition="'$(AndroidManifestPlaceholders)' == ''"></AndroidManifestPlaceholders>
252+
252253
<_PackagedResources>$(IntermediateOutputPath)android\bin\packaged_resources</_PackagedResources>
253254

254255
<_Android32bitArchitectures>armeabi-v7a;armeabi;x86;mips</_Android32bitArchitectures>
@@ -1687,6 +1688,7 @@ because xbuild doesn't support framework reference assemblies.
16871688
AndroidSdkPlatform="$(_AndroidApiLevel)"
16881689
AndroidSdkDir="$(_AndroidSdkDirectory)"
16891690
PackageName="$(_AndroidPackage)"
1691+
ManifestPlaceholders="$(AndroidManifestPlaceholders)"
16901692
OutputDirectory="$(IntermediateOutputPath)android"
16911693
MergedAndroidManifestOutput="$(IntermediateOutputPath)android\AndroidManifest.xml"
16921694
UseSharedRuntime="$(AndroidUseSharedRuntime)"

0 commit comments

Comments
 (0)