Skip to content

Commit 0c39012

Browse files
committed
[installers] Share installer payload generation logic
Introduces a new `create-pkg` project next to `create-vsix` to be used in a similar way to create a macOS installer for xamarin-android. The `build-tools/installers/create-installers.targets` file has also been added to keep track of all of the content we require in both our macOS and Windows installers. These shared items, properties, and targets are used by both installer projects to ensure uniformity between the two installers we produce. The `ConstructInstallerItems` target determines the majority of the files which should end up in the installer. Behavior will vary depending on the existance of certain files or the values of certain msbuild properties. This was done intentionally to be able to support creating installers for PR builds, open source packages, and commercial packages. The `AndroidFirstFrameworkVersion`, `AndroidLatestStableFrameworkVersion`, and `AndroidLatestFrameworkVersion` MSBuild properties (along with some hardcoded values) are used to determine which API levels the installer will support. The `AndroidSupportedTargetJitAbi` MSBuild property is used to determine which Android ABIs the installer will support. The `IncludeMonoBundleComponents` MSBuild property is used to determine whether or not the components which come from a full mono integration build should be included in the installers. The new `create-installers` make target will attempt to package all of the relevant files for every ABI specified in the `ALL_JIT_ABIS` variable in `build-tools/scripts/BuildEverything.mk`. This behavior can be overridden by specifying an empty value for `_MSBUILD_ARGS` when calling the `create-installers` make rule (as build.groovy does), or by providing an alternate value for `/p:AndroidSupportedTargetJitAbis` when building either installer directly from MSBuild. The build.groovy script has been updated to handle creating different installer types for PR builds and full builds. Our macOS PR builds will now build a mxe-win flavored version of `libmono-android`, so that it can be included in a vsix installer and used to extend test coverage for our PR builds in the future. PR builds will also package a limited set of Android ABI support as briefly mentioned above. A new pkg preinstall script has also been added to fix an issue that would result in old installations being left on disk. Now, the macOS installer will attempt to remove the version currently symlinked to `/Library/Frameworks/Xamarin.Android.framework/Versions/Current` before running. Fixes #2686.
1 parent b07302f commit 0c39012

File tree

11 files changed

+567
-104
lines changed

11 files changed

+567
-104
lines changed

Xamarin.Android.sln

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "download-bundle", "build-to
129129
EndProject
130130
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "jit-times", "tools\jit-times\jit-times.csproj", "{F3CFF31C-037B-450F-B22D-1D6E529B2DCC}"
131131
EndProject
132+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "create-pkg", "build-tools\create-pkg\create-pkg.csproj", "{46529930-A5CC-4205-A50D-0AAAC639F082}"
133+
EndProject
132134
Global
133135
GlobalSection(SharedMSBuildProjectFiles) = preSolution
134136
src\Xamarin.Android.NamingCustomAttributes\Xamarin.Android.NamingCustomAttributes.projitems*{3f1f2f50-af1a-4a5a-bedb-193372f068d7}*SharedItemsImports = 4
@@ -371,6 +373,10 @@ Global
371373
{F3CFF31C-037B-450F-B22D-1D6E529B2DCC}.Debug|AnyCPU.Build.0 = Debug|Any CPU
372374
{F3CFF31C-037B-450F-B22D-1D6E529B2DCC}.Release|AnyCPU.ActiveCfg = Release|Any CPU
373375
{F3CFF31C-037B-450F-B22D-1D6E529B2DCC}.Release|AnyCPU.Build.0 = Release|Any CPU
376+
{46529930-A5CC-4205-A50D-0AAAC639F082}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU
377+
{46529930-A5CC-4205-A50D-0AAAC639F082}.Debug|AnyCPU.Build.0 = Debug|Any CPU
378+
{46529930-A5CC-4205-A50D-0AAAC639F082}.Release|AnyCPU.ActiveCfg = Release|Any CPU
379+
{46529930-A5CC-4205-A50D-0AAAC639F082}.Release|AnyCPU.Build.0 = Release|Any CPU
374380
EndGlobalSection
375381
GlobalSection(SolutionProperties) = preSolution
376382
HideSolutionNode = FALSE
@@ -432,6 +438,7 @@ Global
432438
{1E5501E8-49C1-4659-838D-CC9720C5208F} = {CAB438D8-B0F5-4AF0-BEBD-9E2ADBD7B483}
433439
{1BAFA0CC-0377-46CE-AB7B-7BB2E7B62F63} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
434440
{F3CFF31C-037B-450F-B22D-1D6E529B2DCC} = {864062D3-A415-4A6F-9324-5820237BA058}
441+
{46529930-A5CC-4205-A50D-0AAAC639F082} = {E351F97D-EA4F-4E7F-AAA0-8EBB1F2A4A62}
435442
EndGlobalSection
436443
GlobalSection(ExtensibilityGlobals) = postSolution
437444
SolutionGuid = {53A1F287-EFB2-4D97-A4BB-4A5E145613F6}

build-tools/automation/build.groovy

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@ import groovy.json.JsonSlurper
44

55
def XADir = "xamarin-android"
66

7-
def MSBUILD_AUTOPROVISION_ARGS="/p:AutoProvision=True /p:AutoProvisionUsesSudo=True /p:IgnoreMaxMonoVersion=False"
7+
def EXTRA_MSBUILD_ARGS="/p:AutoProvision=True /p:AutoProvisionUsesSudo=True /p:IgnoreMaxMonoVersion=False"
88

99
def isPr = false // Default to CI
1010

11+
def hasPrLabelFullMonoIntegrationBuild = false
12+
1113
def buildTarget = 'jenkins'
1214

1315
def stageWithTimeout(stageName, timeoutValue, timeoutUnit, directory, fatal, ctAttempts = 0, Closure body) {
@@ -120,9 +122,17 @@ timestamps {
120122
env.ghprbPullLongDescription = ''
121123

122124
if (hasPrLabel(env.GitRepo, env.ghprbPullId, 'full-mono-integration-build')) {
125+
hasPrLabelFullMonoIntegrationBuild = true
123126
buildTarget = 'jenkins'
124127
} else {
125128
buildTarget = 'all'
129+
// Also compile host libs for windows so that a complete VSIX can be created
130+
if (isUnix()) {
131+
def uname = sh script: 'uname', returnStdout: true
132+
if (uname.startsWith("Darwin")) {
133+
EXTRA_MSBUILD_ARGS += " /p:AndroidSupportedHostJitAbis=Darwin:mxe-Win32:mxe-Win64"
134+
}
135+
}
126136
}
127137
}
128138

@@ -137,15 +147,22 @@ timestamps {
137147
}
138148

139149
stageWithTimeout('prepare deps', 30, 'MINUTES', XADir, true) { // Typically takes less than 2 minutes
140-
sh "make prepare-deps CONFIGURATION=${env.BuildFlavor} V=1 MSBUILD_ARGS='$MSBUILD_AUTOPROVISION_ARGS'"
150+
sh "make prepare-deps CONFIGURATION=${env.BuildFlavor} V=1 MSBUILD_ARGS='$EXTRA_MSBUILD_ARGS'"
141151
}
142152

143153
stageWithTimeout('build', 6, 'HOURS', XADir, true) { // Typically takes less than one hour except a build on a new bot to populate local caches can take several hours
144-
sh "make prepare ${buildTarget} CONFIGURATION=${env.BuildFlavor} V=1 MSBUILD_ARGS='$MSBUILD_AUTOPROVISION_ARGS'"
154+
sh "make prepare ${buildTarget} CONFIGURATION=${env.BuildFlavor} V=1 MSBUILD_ARGS='$EXTRA_MSBUILD_ARGS'"
145155
}
146156

147-
stageWithTimeout('create vsix', 30, 'MINUTES', XADir, true) { // Typically takes less than 5 minutes
148-
sh "make create-vsix CONFIGURATION=${env.BuildFlavor}"
157+
stageWithTimeout('create installers', 30, 'MINUTES', XADir, true) { // Typically takes less than 5 minutes
158+
if (isPr) {
159+
// Override _MSBUILD_ARGS to ensure we only package the `AndroidSupportedTargetJitAbis` which are built.
160+
// Also ensure that we don't require mono bundle components in the installer if this is not a full mono integration build.
161+
def msbuildInstallerArgs = hasPrLabelFullMonoIntegrationBuild ? '' : '/p:IncludeMonoBundleComponents=False'
162+
sh "make create-installers CONFIGURATION=${env.BuildFlavor} _MSBUILD_ARGS='${msbuildInstallerArgs}'"
163+
} else {
164+
sh "make create-installers CONFIGURATION=${env.BuildFlavor}"
165+
}
149166
}
150167

151168
stageWithTimeout('package oss', 30, 'MINUTES', XADir, true) { // Typically takes less than 5 minutes
@@ -166,7 +183,7 @@ timestamps {
166183
}
167184

168185
stageWithTimeout('publish packages to Azure', 30, 'MINUTES', '', true, 3) { // Typically takes less than a minute, but provide ample time in situations where logs may be quite large
169-
def publishBuildFilePaths = "${XADir}/xamarin.android-oss*.zip,${XADir}/bin/Build*/Xamarin.Android.Sdk*.vsix,${XADir}/build-status*,${XADir}/xa-build-status*";
186+
def publishBuildFilePaths = "${XADir}/xamarin.android-oss*.zip,${XADir}/bin/Build*/Xamarin.Android.Sdk*.pkg,${XADir}/bin/Build*/Xamarin.Android.Sdk*.vsix,${XADir}/build-status*,${XADir}/xa-build-status*";
170187

171188
if (!isPr) {
172189
publishBuildFilePaths = "${publishBuildFilePaths},${XADir}/bin/${env.BuildFlavor}/bundle-*.zip"
@@ -185,7 +202,6 @@ timestamps {
185202
def skipNunitTests = false
186203

187204
if (isPr) {
188-
def hasPrLabelFullMonoIntegrationBuild = hasPrLabel(env.GitRepo, env.ghprbPullId, 'full-mono-integration-build')
189205
def hasPrLabelRunTestsRelease = hasPrLabel(env.GitRepo, env.ghprbPullId, 'run-tests-release')
190206
skipNunitTests = hasPrLabelFullMonoIntegrationBuild || hasPrLabelRunTestsRelease
191207
echo "Run all tests: Labels on the PR: 'full-mono-integration-build' (${hasPrLabelFullMonoIntegrationBuild}) and/or 'run-tests-release' (${hasPrLabelRunTestsRelease})"
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<PropertyGroup>
4+
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
5+
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
6+
<ProjectGuid>{46529930-A5CC-4205-A50D-0AAAC639F082}</ProjectGuid>
7+
<OutputType>Library</OutputType>
8+
<RootNamespace>createpkg</RootNamespace>
9+
<AssemblyName>create-pkg</AssemblyName>
10+
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
11+
<OutputPath>..\..\bin\Build$(Configuration)</OutputPath>
12+
</PropertyGroup>
13+
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
14+
<DebugSymbols>true</DebugSymbols>
15+
<DebugType>full</DebugType>
16+
<Optimize>false</Optimize>
17+
<DefineConstants>DEBUG;</DefineConstants>
18+
<ErrorReport>prompt</ErrorReport>
19+
<WarningLevel>4</WarningLevel>
20+
<ConsolePause>false</ConsolePause>
21+
</PropertyGroup>
22+
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
23+
<Optimize>true</Optimize>
24+
<ErrorReport>prompt</ErrorReport>
25+
<WarningLevel>4</WarningLevel>
26+
<ConsolePause>false</ConsolePause>
27+
</PropertyGroup>
28+
<ItemGroup>
29+
<None Include="distribution.xml.in" />
30+
</ItemGroup>
31+
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
32+
<Import Project="create-pkg.targets" />
33+
</Project>
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<Import Project="..\installers\create-installers.targets" />
4+
<PropertyGroup>
5+
<BuildDependsOn>ResolveReferences</BuildDependsOn>
6+
</PropertyGroup>
7+
<PropertyGroup>
8+
<PkgInstallDir>/</PkgInstallDir>
9+
<PkgInstallDir Condition="$([MSBuild]::IsOsPlatform(Linux))">/usr</PkgInstallDir>
10+
<PayloadDir>$(OutputPath)\pkg\archive</PayloadDir>
11+
<PkgOutputPath>$(OutputPath)\pkg\packages</PkgOutputPath>
12+
<PkgResourcesPath>$(OutputPath)\pkg\resources</PkgResourcesPath>
13+
<PkgDistributionDestination>$(OutputPath)\pkg\distribution.xml</PkgDistributionDestination>
14+
<PkgLicenseSrcEn Condition="'$(PkgLicenseSrcEn)' == ''">$(XamarinAndroidSourcePath)\LICENSE</PkgLicenseSrcEn>
15+
<PkgLicenseDestinationEn>$(PkgResourcesPath)\en.lproj</PkgLicenseDestinationEn>
16+
<PkgScriptsDir>$(MSBuildThisFileDirectory)scripts</PkgScriptsDir>
17+
<UpdateInfoGuid>d1ec039f-f3db-468b-a508-896d7c382999</UpdateInfoGuid>
18+
</PropertyGroup>
19+
<Target Name="_CopyFilesToPayloadDir"
20+
DependsOnTargets="ConstructInstallerItems;GetXAVersion" >
21+
<PropertyGroup>
22+
<XAFrameworkDir>$(PayloadDir)\Library\Frameworks\Xamarin.Android.framework\Versions\$(XAVersion)</XAFrameworkDir>
23+
<MonoFrameworkExternalDir>$(PayloadDir)\Library\Frameworks\Mono.framework\External</MonoFrameworkExternalDir>
24+
<MSBuildTargetsDir>$(XAFrameworkDir)\lib\xamarin.android\xbuild\Xamarin\Android</MSBuildTargetsDir>
25+
<MSBuildFrameworksDir>$(XAFrameworkDir)\lib\xamarin.android\xbuild-frameworks\MonoAndroid</MSBuildFrameworksDir>
26+
</PropertyGroup>
27+
<RemoveDir Directories="$(PayloadDir)" />
28+
<Copy
29+
SourceFiles="@(FrameworkItemsUnix)"
30+
DestinationFiles="@(FrameworkItemsUnix->'$(MSBuildFrameworksDir)\%(RelativePath)')"
31+
/>
32+
<Copy
33+
SourceFiles="@(MSBuildItemsUnix)"
34+
DestinationFiles="@(MSBuildItemsUnix->'$(MSBuildTargetsDir)\%(RelativePath)')"
35+
/>
36+
<Copy
37+
SourceFiles="@(XATargetsSrcFiles)"
38+
DestinationFolder="$(XAFrameworkDir)\lib\xamarin.android\xbuild\Xamarin"
39+
/>
40+
<Copy
41+
SourceFiles="@(LegacyTargetsFiles)"
42+
DestinationFolder="$(XAFrameworkDir)\lib\xamarin.android\xbuild\Novell"
43+
/>
44+
<Copy
45+
SourceFiles="@(MonoDocFiles)"
46+
DestinationFolder="$(XAFrameworkDir)\lib\monodoc"
47+
/>
48+
<Copy
49+
SourceFiles="@(VersionFiles);$(PkgLicenseSrcEn)"
50+
DestinationFolder="$(XAFrameworkDir)"
51+
/>
52+
</Target>
53+
<Target Name="_CreateSymbolicLinks"
54+
DependsOnTargets="_CopyFilesToPayloadDir">
55+
<Exec WorkingDirectory="$(PayloadDir)\Library\Frameworks\Xamarin.Android.framework\Versions"
56+
Command="ln -fs $(XAVersion) Current"
57+
/>
58+
<!-- Required for VS Mac Updater -->
59+
<MakeDir Directories="$(PayloadDir)\Developer" />
60+
<Exec WorkingDirectory="$(PayloadDir)\Developer"
61+
Command="ln -fs &quot;../Library/Frameworks/Xamarin.Android.framework/Versions/Current&quot; MonoAndroid"
62+
/>
63+
<Exec WorkingDirectory="$(MSBuildTargetsDir)\lib"
64+
Command="ln -fs host-$(HostOS) host"
65+
/>
66+
<MakeDir Directories="$(MonoFrameworkExternalDir)\xbuild" />
67+
<Exec WorkingDirectory="$(MonoFrameworkExternalDir)\xbuild"
68+
Command="ln -fs &quot;../../../Xamarin.Android.framework/Versions/$(XAVersion)/lib/xamarin.android/xbuild/Novell&quot; ."
69+
/>
70+
<MakeDir Directories="$(MonoFrameworkExternalDir)\xbuild\Xamarin" />
71+
<Exec WorkingDirectory="$(MonoFrameworkExternalDir)\xbuild\Xamarin"
72+
Command="ln -fs &quot;../../../../Xamarin.Android.framework/Versions/$(XAVersion)/lib/xamarin.android/xbuild/Xamarin/Android&quot; ."
73+
/>
74+
<MakeDir Directories="$(MonoFrameworkExternalDir)\xbuild-frameworks" />
75+
<Exec WorkingDirectory="$(MonoFrameworkExternalDir)\xbuild-frameworks"
76+
Command="ln -fs &quot;../../../Xamarin.Android.framework/Versions/$(XAVersion)/lib/xamarin.android/xbuild-frameworks/MonoAndroid&quot; ."
77+
/>
78+
<MakeDir Directories="$(MonoFrameworkExternalDir)\monodoc" />
79+
<Exec WorkingDirectory="$(MonoFrameworkExternalDir)\monodoc"
80+
Command="ln -fs &quot;../../../Xamarin.Android.framework/Versions/$(XAVersion)/lib/monodoc/MonoAndroid-docs.source&quot; ."
81+
/>
82+
<Exec WorkingDirectory="$(MonoFrameworkExternalDir)\monodoc"
83+
Command="ln -fs &quot;../../../Xamarin.Android.framework/Versions/$(XAVersion)/lib/monodoc/MonoAndroid-lib.tree&quot; ."
84+
/>
85+
<Exec WorkingDirectory="$(MonoFrameworkExternalDir)\monodoc"
86+
Command="ln -fs &quot;../../../Xamarin.Android.framework/Versions/$(XAVersion)/lib/monodoc/MonoAndroid-lib.zip&quot; ."
87+
/>
88+
</Target>
89+
<Target Name="_FinalizePayload"
90+
DependsOnTargets="_CreateSymbolicLinks">
91+
<ReplaceFileContents
92+
SourceFile="distribution.xml.in"
93+
DestinationFile="$(PkgDistributionDestination)"
94+
Replacements="@PACKAGE_TITLE@=Xamarin.Android $(ProductVersion)"
95+
/>
96+
<Exec
97+
WorkingDirectory="$(XamarinAndroidSourcePath)"
98+
ConsoleToMSBuild="true"
99+
Command="git log --no-color --first-parent -n1 --pretty=format:%ct">
100+
<Output TaskParameter="ConsoleOutput" PropertyName="UpdateInfoVersion" />
101+
</Exec>
102+
<WriteLinesToFile
103+
File="$(XAFrameworkDir)\updateinfo"
104+
Lines="$(UpdateInfoGuid) $(UpdateInfoVersion)"
105+
Overwrite="true"
106+
/>
107+
<MakeDir Directories="$(PkgLicenseDestinationEn)" />
108+
<Copy
109+
SourceFiles="$(PkgLicenseSrcEn)"
110+
DestinationFiles="$(PkgLicenseDestinationEn)\License"
111+
/>
112+
</Target>
113+
<Target Name="CreatePkg"
114+
Condition=" '$(HostOS)' == 'Darwin' "
115+
DependsOnTargets="_FinalizePayload">
116+
<MakeDir Directories="$(PkgOutputPath)"/>
117+
<PropertyGroup>
118+
<PkgProductOutputPath Condition="'$(PkgProductOutputPath)' == ''">$(OutputPath)Xamarin.Android.Sdk-$(XAOSSInstallerSuffix).pkg</PkgProductOutputPath>
119+
</PropertyGroup>
120+
<ItemGroup>
121+
<PkgBuildArgs Include="--root &quot;$(PayloadDir)&quot;" />
122+
<PkgBuildArgs Include="--identifier com.xamarin.android.pkg" />
123+
<PkgBuildArgs Include="--version $(XAVersion)"/>
124+
<PkgBuildArgs Include="--install-location &quot;$(PkgInstallDir)&quot; "/>
125+
<PkgBuildArgs Include="--scripts &quot;$(PkgScriptsDir)&quot; "/>
126+
<PkgBuildArgs Include="&quot;$(PkgOutputPath)/xamarin.android.pkg&quot; "/>
127+
</ItemGroup>
128+
<Exec Command="pkgbuild @(PkgBuildArgs, ' ')" />
129+
<ItemGroup>
130+
<ProductBuildArgs Include="--resources &quot;$(PkgResourcesPath)&quot;" />
131+
<ProductBuildArgs Include="--distribution &quot;$(PkgDistributionDestination)&quot;" />
132+
<ProductBuildArgs Include="--package-path &quot;$(PkgOutputPath)&quot;" />
133+
<ProductBuildArgs Include="&quot;$(PkgProductOutputPath)&quot;" />
134+
</ItemGroup>
135+
<Exec Command="productbuild @(ProductBuildArgs, ' ')" />
136+
</Target>
137+
</Project>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?xml version="1.0" encoding="utf-8" standalone="no"?>
2+
<installer-gui-script minSpecVersion="1">
3+
<license file="License" mime-type="application/rtf" />
4+
<title>@PACKAGE_TITLE@</title>
5+
<pkg-ref id="xamarin.android">
6+
<bundle-version/>
7+
</pkg-ref>
8+
<choices-outline>
9+
<line choice="default">
10+
<line choice="xamarin.android"/>
11+
</line>
12+
</choices-outline>
13+
<choice id="default"/>
14+
<choice id="xamarin.android" visible="false">
15+
<pkg-ref id="xamarin.android"/>
16+
</choice>
17+
<pkg-ref id="xamarin.android">#xamarin.android.pkg</pkg-ref>
18+
</installer-gui-script>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/bin/sh
2+
3+
INSTALLATION_ROOT=/Library/Frameworks/Xamarin.Android.framework/Versions
4+
PREVIOUS_VERSION=$(readlink "$INSTALLATION_ROOT/Current")
5+
PREVIOUS_VERSION_PATH="$INSTALLATION_ROOT/$PREVIOUS_VERSION"
6+
7+
# Ensure previously installed version is removed.
8+
if [ -d "$PREVIOUS_VERSION_PATH" ]; then
9+
rm -rf "$PREVIOUS_VERSION_PATH"
10+
fi
11+

build-tools/create-vsix/create-vsix.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
</PropertyGroup>
2828
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' " />
2929
<PropertyGroup Condition=" '$(Configuration)' == 'Release' " />
30-
<Import Project="..\..\Configuration.props" />
3130
<ItemGroup>
3231
<Compile Include="AndroidSdkPackage.cs" />
3332
<Content Include="Resources\AndroidSdkPackage.ico">

0 commit comments

Comments
 (0)