AndroidX icon indicating copy to clipboard operation
AndroidX copied to clipboard

[DO NOT MERGE] TFM net8.0

Open moljac opened this issue 2 years ago • 11 comments

Dogfooding net8.0 only TFM for AndroidX (AX) bindings.

It is to be determined if and when to merge. Thus DO-NOT-MERGE in title and label + draft status.

Some metadata had to be fixed. And some APIs have changed and this needs some investigation

GPS-FB-MLKit PR is Work in Progress (WIP).

Does this change any of the generated binding API's?

Probably. Not sure yet. There were some Metadata changes.

Describe your contribution

In May support for Xamarin.Classic (monoandroid12) and net6.0 will be dropped and this is recon PR to see what is ahead of the team.

  1. created branch based on .NET 8 (net8.0) build - PR https://github.com/xamarin/AndroidX/pull/804
  2. bumped Material to 1.11.0
  3. fixed metdata

moljac avatar Oct 24 '23 16:10 moljac

Round 01

Errors:

./generated/org.jetbrains.kotlin.kotlin-stdlib/obj/Release/net8.0-android/generated/src/Kotlin.Collections.Builders.AbstractMapBuilderEntrySet.cs(87,38): error CS0111: Type 'AbstractMapBuilderEntrySet' already defines a member called 'Contains' with the same parameter types [./generated/org.jetbrains.kotlin.kotlin-stdlib/org.jetbrains.kotlin.kotlin-stdlib.csproj::TargetFramework=net8.0-android]
./generated/org.jetbrains.kotlin.kotlin-stdlib/obj/Release/net8.0-android/generated/src/Kotlin.Collections.Builders.MapBuilder.cs(22,100): error CS0535: 'MapBuilder' does not implement interface member 'IMap.Size()' [./generated/org.jetbrains.kotlin.kotlin-stdlib/org.jetbrains.kotlin.kotlin-stdlib.csproj::TargetFramework=net8.0-android]
./generated/org.jetbrains.kotlin.kotlin-stdlib/obj/Release/net8.0-android/generated/src/Kotlin.Collections.Builders.MapBuilder.cs(22,100): error CS0535: 'MapBuilder' does not implement interface member 'IMap.Values()' [./generated/org.jetbrains.kotlin.kotlin-stdlib/org.jetbrains.kotlin.kotlin-stdlib.csproj::TargetFramework=net8.0-android]
./generated/org.jetbrains.kotlin.kotlin-stdlib/obj/Release/net8.0-android/generated/src/Kotlin.Collections.Builders.MapBuilderEntries.cs(22,30): error CS0534: 'MapBuilderEntries' does not implement inherited abstract member 'AbstractMutableSet.Add(Object?)' [./generated/org.jetbrains.kotlin.kotlin-stdlib/org.jetbrains.kotlin.kotlin-stdlib.csproj::TargetFramework=net8.0-android]
./generated/org.jetbrains.kotlin.kotlin-stdlib/obj/Release/net8.0-android/generated/src/Kotlin.Collections.Builders.MapBuilderEntries.cs(22,30): error CS0534: 'MapBuilderEntries' does not implement inherited abstract member 'AbstractMutableSet.GetSize()' [./generated/org.jetbrains.kotlin.kotlin-stdlib/org.jetbrains.kotlin.kotlin-stdlib.csproj::TargetFramework=net8.0-android]

moljac avatar Oct 24 '23 16:10 moljac

Round 02

Errors:

./generated/com.google.crypto.tink.tink-android/obj/Debug/net8.0-android/generated/src/Xamarin.Google.Crypto.Tink.Prf.AesCmacPrfKey.cs(122,73): error CS0115: 'AesCmacPrfKey.GetParameters()': no suitable method found to override [./generated/com.google.crypto.tink.tink-android/com.google.crypto.tink.tink-android.csproj::TargetFramework=net8.0-android]
./generated/com.google.crypto.tink.tink-android/obj/Debug/net8.0-android/generated/src/Xamarin.Google.Crypto.Tink.Prf.HkdfPrfKey.cs(192,73): error CS0115: 'HkdfPrfKey.GetParameters()': no suitable method found to override [./generated/com.google.crypto.tink.tink-android/com.google.crypto.tink.tink-android.csproj::TargetFramework=net8.0-android]
./generated/com.google.crypto.tink.tink-android/obj/Debug/net8.0-android/generated/src/Xamarin.Google.Crypto.Tink.Prf.HmacPrfKey.cs(192,73): error CS0115: 'HmacPrfKey.GetParameters()': no suitable method found to override [./generated/com.google.crypto.tink.tink-android/com.google.crypto.tink.tink-android.csproj::TargetFramework=net8.0-android]
./generated/com.google.crypto.tink.tink-android/obj/Debug/net8.0-android/generated/src/Xamarin.Google.Crypto.Tink.StreamingAead.AesCtrHmacStreamingKey.cs(109,73): error CS0115: 'AesCtrHmacStreamingKey.GetParameters()': no suitable method found to override [./generated/com.google.crypto.tink.tink-android/com.google.crypto.tink.tink-android.csproj::TargetFramework=net8.0-android]
./generated/com.google.crypto.tink.tink-android/obj/Debug/net8.0-android/generated/src/Xamarin.Google.Crypto.Tink.StreamingAead.AesGcmHkdfStreamingKey.cs(109,73): error CS0115: 'AesGcmHkdfStreamingKey.GetParameters()': no suitable method found to override [./generated/com.google.crypto.tink.tink-android/com.google.crypto.tink.tink-android.csproj::TargetFramework=net8.0-android]
./generated/com.google.crypto.tink.tink-android/obj/Debug/net8.0-android/generated/src/Xamarin.Google.Crypto.Tink.Signature.EcdsaPrivateKey.cs(231,66): error CS0115: 'EcdsaPrivateKey.GetPublicKey()': no suitable method found to override [./generated/com.google.crypto.tink.tink-android/com.google.crypto.tink.tink-android.csproj::TargetFramework=net8.0-android]
./generated/com.google.crypto.tink.tink-android/obj/Debug/net8.0-android/generated/src/Xamarin.Google.Crypto.Tink.Signature.EcdsaPublicKey.cs(290,73): error CS0115: 'EcdsaPublicKey.GetParameters()': no suitable method found to override [./generated/com.google.crypto.tink.tink-android/com.google.crypto.tink.tink-android.csproj::TargetFramework=net8.0-android]
./generated/com.google.crypto.tink.tink-android/obj/Debug/net8.0-android/generated/src/Xamarin.Google.Crypto.Tink.Signature.Ed25519PrivateKey.cs(122,66): error CS0115: 'Ed25519PrivateKey.GetPublicKey()': no suitable method found to override [./generated/com.google.crypto.tink.tink-android/com.google.crypto.tink.tink-android.csproj::TargetFramework=net8.0-android]
./generated/com.google.crypto.tink.tink-android/obj/Debug/net8.0-android/generated/src/Xamarin.Google.Crypto.Tink.Signature.Ed25519PublicKey.cs(152,73): error CS0115: 'Ed25519PublicKey.GetParameters()': no suitable method found to override [./generated/com.google.crypto.tink.tink-android/com.google.crypto.tink.tink-android.csproj::TargetFramework=net8.0-android]
./generated/com.google.crypto.tink.tink-android/obj/Debug/net8.0-android/generated/src/Xamarin.Google.Crypto.Tink.Signature.RsaSsaPkcs1PrivateKey.cs(414,66): error CS0115: 'RsaSsaPkcs1PrivateKey.GetPublicKey()': no suitable method found to override [./generated/com.google.crypto.tink.tink-android/com.google.crypto.tink.tink-android.csproj::TargetFramework=net8.0-android]
./generated/com.google.crypto.tink.tink-android/obj/Debug/net8.0-android/generated/src/Xamarin.Google.Crypto.Tink.Signature.RsaSsaPssPrivateKey.cs(401,66): error CS0115: 'RsaSsaPssPrivateKey.GetPublicKey()': no suitable method found to override [./generated/com.google.crypto.tink.tink-android/com.google.crypto.tink.tink-android.csproj::TargetFramework=net8.0-android]
./generated/com.google.crypto.tink.tink-android/obj/Debug/net8.0-android/generated/src/Xamarin.Google.Crypto.Tink.Signature.RsaSsaPkcs1PublicKey.cs(290,73): error CS0115: 'RsaSsaPkcs1PublicKey.GetParameters()': no suitable method found to override [./generated/com.google.crypto.tink.tink-android/com.google.crypto.tink.tink-android.csproj::TargetFramework=net8.0-android]
./generated/com.google.crypto.tink.tink-android/obj/Debug/net8.0-android/generated/src/Xamarin.Google.Crypto.Tink.Signature.RsaSsaPssPublicKey.cs(290,73): error CS0115: 'RsaSsaPssPublicKey.GetParameters()': no suitable method found to override [./generated/com.google.crypto.tink.tink-android/com.google.crypto.tink.tink-android.csproj::TargetFramework=net8.0-android]

moljac avatar Oct 24 '23 18:10 moljac

https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=8618748&view=logs&j=3b059b26-55fe-5273-567a-5b3fa6c051e7&t=90a64c1c-0058-5f10-5c08-27329dc26712

CI builds 280 errors like:

2023-10-31T08:50:36.7536580Z /Users/runner/hostedtoolcache/dotnet/sdk/8.0.100-rc.2.23502.2/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets(398,5): error NETSDK1073: The FrameworkReference 'Microsoft.Android' was not recognized [/Users/runner/work/1/s/generated/io.reactivex.rxjava3.rxkotlin/io.reactivex.rxjava3.rxkotlin.csproj::TargetFramework=net8.0-android]

moljac avatar Oct 31 '23 09:10 moljac

/azp run

moljac avatar Nov 01 '23 07:11 moljac

Azure Pipelines successfully started running 1 pipeline(s).

azure-pipelines[bot] avatar Nov 01 '23 07:11 azure-pipelines[bot]

/azp run

moljac avatar Nov 04 '23 21:11 moljac

Azure Pipelines successfully started running 1 pipeline(s).

azure-pipelines[bot] avatar Nov 04 '23 21:11 azure-pipelines[bot]

The number of namespaces removed makes me worried that significant amounts of types are no longer being bound. 😢

Let me finish GPS-FB-MLKit and then I can investigate this. Shouldn't be too long.

moljac avatar Nov 10 '23 13:11 moljac

  • The .NET 8 SDK cannot build net6.0-android, so there's no (reasonable) way to multitarget net6.0-android and net8.0-android.

Likely, actually publishing net8.0-android packages is not possible until at least Mid 2024.

is it not possible to compile net8 libs with 8 SDK and 6 and classic bits with 6 SDK and use nuget.exe with a .nuspec file to generate the package from the already compiled bits?

MagicAndre1981 avatar Nov 10 '23 14:11 MagicAndre1981

is it not possible to compile net8 libs with 8 SDK and 6 and classic bits with 6 SDK and use nuget.exe with a .nuspec file to generate the package from the already compiled bits?

Yes, that would be the "not reasonable way", as we would have to rewrite large portions of our infrastructure for 500+ packages to work this way. 😁

There also isn't much benefit to compiling against .NET 8. The only difference would be if something in one of these packages requires API that was only added to Android in API-34. The intent of most of these packages is to provide code that runs on all versions of Android.

jpobst avatar Nov 10 '23 17:11 jpobst

The only difference would be if something in one of these packages requires API that was only added to Android in API-34.

looks like com.google.android.material requires API34 since 1.11.0 as it uses colors that are added in API34:

[Android.Runtime.Register("system_on_error_dark", ApiSince=34)]
public const int SystemOnErrorDark = 17170596;

MagicAndre1981 avatar Jan 25 '24 06:01 MagicAndre1981

I have no why you requested review from me, but it is green and .net 7.0 is now dead, go and merge it.

MagicAndre1981 avatar Jun 03 '24 19:06 MagicAndre1981

I have no why you requested review from me, but it is green and .net 7.0 is now dead, go and merge it.

You were in reviewers list (most likely because you commented). net7.0 is not completely dead, because there was update last week, but yes we need to switch to net8.0, because of some other issues.

net8.0 is on its way. this week i hope

moljac avatar Jun 03 '24 21:06 moljac