xamarin / AndroidX

AndroidX bindings for .NET for Android
MIT License
173 stars 42 forks source link

TFM net8.0 and removal of net7.0 #804

Closed moljac closed 3 weeks ago

moljac commented 8 months ago

net7.0-android hit EOL on May 14, 2024 and thus we will no longer support it in our AndroidX binding packages. Dropping net7.0-android will allow us to support packages that require API-34 like newer versions of Google Material going forward.

Update packages to use net8.0-android instead of net7.0-android.

Note that the "removed" published-namespaces are namespaces that only contained an empty Resources class that is no longer generated.

moljac commented 8 months ago

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 commented 8 months ago

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 commented 8 months ago

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 commented 8 months ago

/azp run

azure-pipelines[bot] commented 8 months ago
Azure Pipelines successfully started running 1 pipeline(s).
moljac commented 8 months ago

/azp run

azure-pipelines[bot] commented 8 months ago
Azure Pipelines successfully started running 1 pipeline(s).
moljac commented 7 months ago

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.

MagicAndre1981 commented 7 months ago
  • 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?

jpobst commented 7 months ago

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.

MagicAndre1981 commented 5 months ago

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 commented 1 month ago

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

moljac commented 4 weeks ago

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