Skip to content

Conversation

@jonpryor
Copy link
Contributor

@jonpryor jonpryor commented Mar 5, 2020

Context: dotnet/android#4356 (comment)

A "funny" thing was found with API-R: the Android SDK
platforms/android-R/data/api-versions.xml file is missing members
present in previous API versions, e.g.
java.lang.StringBuilder.trimToSize() is not mentioned in API-R,
while it is mentioned in API-29 and the "global"
platform-tools/api/api-versions.xml.

Try to improve sanity for this conundrum by allowing
generator --apiversions to be specified multiple times, e.g. this
diff to apply to xamarin-android:

diff --git a/src/Mono.Android/Mono.Android.targets b/src/Mono.Android/Mono.Android.targets
index 8735c2ae..baae759b 100644
--- a/src/Mono.Android/Mono.Android.targets
+++ b/src/Mono.Android/Mono.Android.targets
@@ -78,10 +78,13 @@
       Inputs="metadata;enumflags;map.csv;methodmap.csv;$(IntermediateOutputPath)mcw\api.xml"
       Outputs="$(IntermediateOutputPath)mcw\Mono.Android.projitems">
     <MakeDir Directories="$(IntermediateOutputPath)mcw" />
-    <PropertyGroup>
-      <_ApiVersions Condition="Exists('$(AndroidSdkDirectory)\platforms\android-$(AndroidPlatformId)\data\api-versions.xml')">"$(AndroidSdkDirectory)\platforms\android-$(AndroidPlatformId)\data\api-versions.xml"</_ApiVersions>
-      <_ApiVersions Condition="'$(_ApiVersions)'==''">"$(AndroidSdkDirectory)\platform-tools\api\api-versions.xml"</_ApiVersions>
-    </PropertyGroup>
+    <ItemGroup>
+      <_ApiVersion Include="$(AndroidSdkDirectory)\platform-tools\api\api-versions.xml" />
+      <_ApiVersion
+          Condition="Exists('$(AndroidSdkDirectory)\platforms\android-$(AndroidPlatformId)\data\api-versions.xml')"
+          Include="$(AndroidSdkDirectory)\platforms\android-$(AndroidPlatformId)\data\api-versions.xml"
+      />
+    </ItemGroup>
     <PropertyGroup>
       <Generator>"$(XAInstallPrefix)xbuild\Xamarin\Android\generator.exe"</Generator>
       <_GenFlags>--public --product-version=7</_GenFlags>
@@ -91,7 +94,7 @@
       <_Fixup>--fixup=metadata</_Fixup>
       <_Enums1>--preserve-enums --enumflags=enumflags --enumfields=map.csv --enummethods=methodmap.csv</_Enums1>
       <_Enums2>--enummetadata=$(IntermediateOutputPath)mcw\enummetadata</_Enums2>
-      <_Versions>--apiversions=$(_ApiVersions)</_Versions>
+      <_Versions>@(_ApiVersion->'--apiversions="%(Identity)"', ' ')</_Versions>
       <_Annotations>--annotations="$(AndroidSdkDirectory)\platform-tools\api\annotations.zip"</_Annotations>
       <_Assembly>--assembly="Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"</_Assembly>
       <_TypeMap>--type-map-report=$(IntermediateOutputPath)mcw\type-mapping.txt</_TypeMap>

The generator --apiversions files are applied in order, with later
versions overriding/replacing earlier versions. This is why
platform-tools/api/api-versions.xml is present first.

Context: dotnet/android#4356 (comment)

A "funny" thing was found with API-R: the Android SDK
`platforms/android-R/data/api-versions.xml` file is *missing* members
present in previous API versions, e.g.
`java.lang.StringBuilder.trimToSize()` is not mentioned in API-R,
while it *is* mentioned in API-29 and the "global"
`platform-tools/api/api-versions.xml`.

Try to improve sanity for this conundrum by allowing
`generator --apiversions` to be specified multiple times, e.g. this
diff to apply to xamarin-android:

	diff --git a/src/Mono.Android/Mono.Android.targets b/src/Mono.Android/Mono.Android.targets
	index 8735c2ae..baae759b 100644
	--- a/src/Mono.Android/Mono.Android.targets
	+++ b/src/Mono.Android/Mono.Android.targets
	@@ -78,10 +78,13 @@
	       Inputs="metadata;enumflags;map.csv;methodmap.csv;$(IntermediateOutputPath)mcw\api.xml"
	       Outputs="$(IntermediateOutputPath)mcw\Mono.Android.projitems">
	     <MakeDir Directories="$(IntermediateOutputPath)mcw" />
	-    <PropertyGroup>
	-      <_ApiVersions Condition="Exists('$(AndroidSdkDirectory)\platforms\android-$(AndroidPlatformId)\data\api-versions.xml')">"$(AndroidSdkDirectory)\platforms\android-$(AndroidPlatformId)\data\api-versions.xml"</_ApiVersions>
	-      <_ApiVersions Condition="'$(_ApiVersions)'==''">"$(AndroidSdkDirectory)\platform-tools\api\api-versions.xml"</_ApiVersions>
	-    </PropertyGroup>
	+    <ItemGroup>
	+      <_ApiVersion Include="$(AndroidSdkDirectory)\platform-tools\api\api-versions.xml" />
	+      <_ApiVersion
	+          Condition="Exists('$(AndroidSdkDirectory)\platforms\android-$(AndroidPlatformId)\data\api-versions.xml')"
	+          Include="$(AndroidSdkDirectory)\platforms\android-$(AndroidPlatformId)\data\api-versions.xml"
	+      />
	+    </ItemGroup>
	     <PropertyGroup>
	       <Generator>"$(XAInstallPrefix)xbuild\Xamarin\Android\generator.exe"</Generator>
	       <_GenFlags>--public --product-version=7</_GenFlags>
	@@ -91,7 +94,7 @@
	       <_Fixup>--fixup=metadata</_Fixup>
	       <_Enums1>--preserve-enums --enumflags=enumflags --enumfields=map.csv --enummethods=methodmap.csv</_Enums1>
	       <_Enums2>--enummetadata=$(IntermediateOutputPath)mcw\enummetadata</_Enums2>
	-      <_Versions>--apiversions=$(_ApiVersions)</_Versions>
	+      <_Versions>@(_ApiVersion->'--apiversions="%(Identity)"', ' ')</_Versions>
	       <_Annotations>--annotations="$(AndroidSdkDirectory)\platform-tools\api\annotations.zip"</_Annotations>
	       <_Assembly>--assembly="Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"</_Assembly>
	       <_TypeMap>--type-map-report=$(IntermediateOutputPath)mcw\type-mapping.txt</_TypeMap>

The `generator --apiversions` files are applied in order, with *later*
versions overriding/replacing earlier versions.  This is why
`platform-tools/api/api-versions.xml` is present *first*.
@jpobst jpobst merged commit 005e273 into dotnet:master Mar 5, 2020
jonpryor pushed a commit that referenced this pull request Mar 6, 2020
Context: dotnet/android#4356 (comment)

A "funny" thing was found with API-R: the Android SDK
`platforms/android-R/data/api-versions.xml` file is *missing* members
present in previous API versions, e.g.
`java.lang.StringBuilder.trimToSize()` is not mentioned in API-R,
while it *is* mentioned in API-29 and the "global"
`platform-tools/api/api-versions.xml`.

Try to improve sanity for this conundrum by allowing
`generator --apiversions` to be specified multiple times, e.g. this
diff to apply to xamarin-android:

	diff --git a/src/Mono.Android/Mono.Android.targets b/src/Mono.Android/Mono.Android.targets
	index 8735c2ae..baae759b 100644
	--- a/src/Mono.Android/Mono.Android.targets
	+++ b/src/Mono.Android/Mono.Android.targets
	@@ -78,10 +78,13 @@
	       Inputs="metadata;enumflags;map.csv;methodmap.csv;$(IntermediateOutputPath)mcw\api.xml"
	       Outputs="$(IntermediateOutputPath)mcw\Mono.Android.projitems">
	     <MakeDir Directories="$(IntermediateOutputPath)mcw" />
	-    <PropertyGroup>
	-      <_ApiVersions Condition="Exists('$(AndroidSdkDirectory)\platforms\android-$(AndroidPlatformId)\data\api-versions.xml')">"$(AndroidSdkDirectory)\platforms\android-$(AndroidPlatformId)\data\api-versions.xml"</_ApiVersions>
	-      <_ApiVersions Condition="'$(_ApiVersions)'==''">"$(AndroidSdkDirectory)\platform-tools\api\api-versions.xml"</_ApiVersions>
	-    </PropertyGroup>
	+    <ItemGroup>
	+      <_ApiVersion Include="$(AndroidSdkDirectory)\platform-tools\api\api-versions.xml" />
	+      <_ApiVersion
	+          Condition="Exists('$(AndroidSdkDirectory)\platforms\android-$(AndroidPlatformId)\data\api-versions.xml')"
	+          Include="$(AndroidSdkDirectory)\platforms\android-$(AndroidPlatformId)\data\api-versions.xml"
	+      />
	+    </ItemGroup>
	     <PropertyGroup>
	       <Generator>"$(XAInstallPrefix)xbuild\Xamarin\Android\generator.exe"</Generator>
	       <_GenFlags>--public --product-version=7</_GenFlags>
	@@ -91,7 +94,7 @@
	       <_Fixup>--fixup=metadata</_Fixup>
	       <_Enums1>--preserve-enums --enumflags=enumflags --enumfields=map.csv --enummethods=methodmap.csv</_Enums1>
	       <_Enums2>--enummetadata=$(IntermediateOutputPath)mcw\enummetadata</_Enums2>
	-      <_Versions>--apiversions=$(_ApiVersions)</_Versions>
	+      <_Versions>@(_ApiVersion->'--apiversions="%(Identity)"', ' ')</_Versions>
	       <_Annotations>--annotations="$(AndroidSdkDirectory)\platform-tools\api\annotations.zip"</_Annotations>
	       <_Assembly>--assembly="Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"</_Assembly>
	       <_TypeMap>--type-map-report=$(IntermediateOutputPath)mcw\type-mapping.txt</_TypeMap>

The `generator --apiversions` files are applied in order, with *later*
versions overriding/replacing earlier versions.  This is why
`platform-tools/api/api-versions.xml` is present *first*.
pjcollins pushed a commit that referenced this pull request Mar 10, 2020
Context: dotnet/android#4356 (comment)

A "funny" thing was found with API-R: the Android SDK
`platforms/android-R/data/api-versions.xml` file is *missing* members
present in previous API versions, e.g.
`java.lang.StringBuilder.trimToSize()` is not mentioned in API-R,
while it *is* mentioned in API-29 and the "global"
`platform-tools/api/api-versions.xml`.

Try to improve sanity for this conundrum by allowing
`generator --apiversions` to be specified multiple times, e.g. this
diff to apply to xamarin-android:

	diff --git a/src/Mono.Android/Mono.Android.targets b/src/Mono.Android/Mono.Android.targets
	index 8735c2ae..baae759b 100644
	--- a/src/Mono.Android/Mono.Android.targets
	+++ b/src/Mono.Android/Mono.Android.targets
	@@ -78,10 +78,13 @@
	       Inputs="metadata;enumflags;map.csv;methodmap.csv;$(IntermediateOutputPath)mcw\api.xml"
	       Outputs="$(IntermediateOutputPath)mcw\Mono.Android.projitems">
	     <MakeDir Directories="$(IntermediateOutputPath)mcw" />
	-    <PropertyGroup>
	-      <_ApiVersions Condition="Exists('$(AndroidSdkDirectory)\platforms\android-$(AndroidPlatformId)\data\api-versions.xml')">"$(AndroidSdkDirectory)\platforms\android-$(AndroidPlatformId)\data\api-versions.xml"</_ApiVersions>
	-      <_ApiVersions Condition="'$(_ApiVersions)'==''">"$(AndroidSdkDirectory)\platform-tools\api\api-versions.xml"</_ApiVersions>
	-    </PropertyGroup>
	+    <ItemGroup>
	+      <_ApiVersion Include="$(AndroidSdkDirectory)\platform-tools\api\api-versions.xml" />
	+      <_ApiVersion
	+          Condition="Exists('$(AndroidSdkDirectory)\platforms\android-$(AndroidPlatformId)\data\api-versions.xml')"
	+          Include="$(AndroidSdkDirectory)\platforms\android-$(AndroidPlatformId)\data\api-versions.xml"
	+      />
	+    </ItemGroup>
	     <PropertyGroup>
	       <Generator>"$(XAInstallPrefix)xbuild\Xamarin\Android\generator.exe"</Generator>
	       <_GenFlags>--public --product-version=7</_GenFlags>
	@@ -91,7 +94,7 @@
	       <_Fixup>--fixup=metadata</_Fixup>
	       <_Enums1>--preserve-enums --enumflags=enumflags --enumfields=map.csv --enummethods=methodmap.csv</_Enums1>
	       <_Enums2>--enummetadata=$(IntermediateOutputPath)mcw\enummetadata</_Enums2>
	-      <_Versions>--apiversions=$(_ApiVersions)</_Versions>
	+      <_Versions>@(_ApiVersion->'--apiversions="%(Identity)"', ' ')</_Versions>
	       <_Annotations>--annotations="$(AndroidSdkDirectory)\platform-tools\api\annotations.zip"</_Annotations>
	       <_Assembly>--assembly="Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"</_Assembly>
	       <_TypeMap>--type-map-report=$(IntermediateOutputPath)mcw\type-mapping.txt</_TypeMap>

The `generator --apiversions` files are applied in order, with *later*
versions overriding/replacing earlier versions.  This is why
`platform-tools/api/api-versions.xml` is present *first*.
@github-actions github-actions bot locked and limited conversation to collaborators Apr 13, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants