Skip to content

Conversation

@jonathanpeppers
Copy link
Member

Fixes: #9922

The r8.jar command in the _GenerateRuntimeDex16 MSBuild target (java-runtime.targets) produces warnings such as:

"/Users/builder/android-toolchain/jdk-21/bin/java" -classpath "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/r8.jar" com.android.tools.r8.D8 --release --no-desugaring --output "obj/Release/release" "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime.jar"
Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime.jar:mono/MonoPackageManager.class at Lmono/MonoPackageManager;LoadApplication(Landroid/content/Context;)V:
Invoke-customs are only supported starting with Android O (--min-api 26)
Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev.jar:mono/android/incrementaldeployment/IncrementalClassLoader.class at Lmono/android/incrementaldeployment/IncrementalClassLoader;createDelegateClassLoader(Ljava/io/File;Ljava/lang/String;Ljava/util/List;Ljava/lang/ClassLoader;)Lmono/android/incrementaldeployment/IncrementalClassLoader$DelegateClassLoader;:
Invoke-customs are only supported starting with Android O (--min-api 26)
"/Users/builder/android-toolchain/jdk-21/bin/java" -classpath "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/r8.jar" com.android.tools.r8.D8 --release --no-desugaring --output "obj/Release/release-net6" "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_net6.jar"
Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_net6.jar:mono/MonoPackageManager.class at Lmono/MonoPackageManager;LoadApplication(Landroid/content/Context;)V:
Invoke-customs are only supported starting with Android O (--min-api 26)
Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_net6.jar:mono/MonoPackageManager.class at Lmono/MonoPackageManager;getNativeLibraryPath(Landroid/content/pm/ApplicationInfo;)Ljava/lang/String;:
Invoke-customs are only supported starting with Android O (--min-api 26)
Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_net6.jar:mono/android/incrementaldeployment/IncrementalClassLoader.class at Lmono/android/incrementaldeployment/IncrementalClassLoader;createDelegateClassLoader(Ljava/io/File;Ljava/lang/String;Ljava/util/List;Ljava/lang/ClassLoader;)Lmono/android/incrementaldeployment/IncrementalClassLoader$DelegateClassLoader;:
Invoke-customs are only supported starting with Android O (--min-api 26)
"/Users/builder/android-toolchain/jdk-21/bin/java" -classpath "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/r8.jar" com.android.tools.r8.D8 --release --no-desugaring --output "obj/Release/fastdev-net6" "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev_net6.jar"
Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev_net6.jar:mono/android/MultiDexLoader.class at Lmono/android/MultiDexLoader;getDexList(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;:
Invoke-customs are only supported starting with Android O (--min-api 26)
Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev_net6.jar:mono/MonoPackageManager.class at Lmono/MonoPackageManager;LoadApplication(Landroid/content/Context;)V:
Invoke-customs are only supported starting with Android O (--min-api 26)
Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev_net6.jar:mono/android/MultiDexLoader.class at Lmono/android/MultiDexLoader;attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V:
Invoke-customs are only supported starting with Android O (--min-api 26)
Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev_net6.jar:mono/MonoPackageManager.class at Lmono/MonoPackageManager;getNativeLibraryPath(Landroid/content/pm/ApplicationInfo;)Ljava/lang/String;:
Invoke-customs are only supported starting with Android O (--min-api 26)
Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev_net6.jar:mono/android/incrementaldeployment/IncrementalClassLoader.class at Lmono/android/incrementaldeployment/IncrementalClassLoader;createDelegateClassLoader(Ljava/io/File;Ljava/lang/String;Ljava/util/List;Ljava/lang/ClassLoader;)Lmono/android/incrementaldeployment/IncrementalClassLoader$DelegateClassLoader;:
Invoke-customs are only supported starting with Android O (--min-api 26)
"/Users/builder/android-toolchain/jdk-21/bin/java" -classpath "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/r8.jar" com.android.tools.r8.D8 --release --no-desugaring --output "obj/Release/release-clr" "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_clr.jar"
Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_clr.jar:mono/MonoPackageManager.class at Lmono/MonoPackageManager;LoadApplication(Landroid/content/Context;)V:
Invoke-customs are only supported starting with Android O (--min-api 26)
Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_clr.jar:mono/android/incrementaldeployment/IncrementalClassLoader.class at Lmono/android/incrementaldeployment/IncrementalClassLoader;createDelegateClassLoader(Ljava/io/File;Ljava/lang/String;Ljava/util/List;Ljava/lang/ClassLoader;)Lmono/android/incrementaldeployment/IncrementalClassLoader$DelegateClassLoader;:
Invoke-customs are only supported starting with Android O (--min-api 26)
"/Users/builder/android-toolchain/jdk-21/bin/java" -classpath "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/r8.jar" com.android.tools.r8.D8 --release --no-desugaring --output "obj/Release/fastdev-clr" "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev_clr.jar"
Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev_clr.jar:mono/android/MultiDexLoader.class at Lmono/android/MultiDexLoader;getDexList(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;:
Invoke-customs are only supported starting with Android O (--min-api 26)
Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev_clr.jar:mono/MonoPackageManager.class at Lmono/MonoPackageManager;LoadApplication(Landroid/content/Context;)V:
Invoke-customs are only supported starting with Android O (--min-api 26)
Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev_clr.jar:mono/android/MultiDexLoader.class at Lmono/android/MultiDexLoader;attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V:
Invoke-customs are only supported starting with Android O (--min-api 26)
Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev_clr.jar:mono/android/incrementaldeployment/IncrementalClassLoader.class at Lmono/android/incrementaldeployment/IncrementalClassLoader;createDelegateClassLoader(Ljava/io/File;Ljava/lang/String;Ljava/util/List;Ljava/lang/ClassLoader;)Lmono/android/incrementaldeployment/IncrementalClassLoader$DelegateClassLoader;:
Invoke-customs are only supported starting with Android O (--min-api 26)

Reviewing the command, I see the following issues:

  • --min-api is omitted, so it would default to API 1
  • We are passing --no-desugaring, which leaves all Java features as-is.
  • We don't pass the path to android.jar.

After fixing all of these, I see now warnings from r8.jar anymore and no log messages are shown:

Exec
    Assembly = D:\src\xamarin-android\bin\Release\dotnet\sdk\10.0.100-preview.4.25180.3\Microsoft.Build.Tasks.Core.dll
    Parameters
        EnvironmentVariables = JAVA_HOME=D:\android-toolchain\jdk-21
        Command = "D:\android-toolchain\jdk-21\bin\java.exe" -classpath "D:\src\xamarin-android\bin\Debug\lib\packs\Microsoft.Android.Sdk.Windows\36.0.0\tools\r8.jar" com.android.tools.r8.D8 --release --min-api 21 --lib ""D:\android-toolchain\sdk\platforms\android-36\android.jar"" --output "obj\Debug\release" "D:\src\xamarin-android\bin\Debug\lib\packs\Microsoft.Android.Sdk.Windows\36.0.0\tools\java_runtime.jar"
    Environment Variables passed to tool:
    JAVA_HOME=D:\android-toolchain\jdk-21
    CommandLineArguments = "D:\android-toolchain\jdk-21\bin\java.exe" -classpath "D:\src\xamarin-android\bin\Debug\lib\packs\Microsoft.Android.Sdk.Windows\36.0.0\tools\r8.jar" com.android.tools.r8.D8 --release --min-api 21 --lib ""D:\android-toolchain\sdk\platforms\android-36\android.jar"" --output "obj\Debug\release" "D:\src\xamarin-android\bin\Debug\lib\packs\Microsoft.Android.Sdk.Windows\36.0.0\tools\java_runtime.jar"

I didn't see why --no-desugaring was initially passed:

I also removed the 16 in the target name, as it likely refers to API-16, which is not a number we should be tracking any longer. API-21 is our minimum.

Fixes: #9922

The `r8.jar` command in the `_GenerateRuntimeDex16` MSBuild target
(`java-runtime.targets`) produces warnings such as:

    "/Users/builder/android-toolchain/jdk-21/bin/java" -classpath "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/r8.jar" com.android.tools.r8.D8 --release --no-desugaring --output "obj/Release/release" "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime.jar"
    Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime.jar:mono/MonoPackageManager.class at Lmono/MonoPackageManager;LoadApplication(Landroid/content/Context;)V:
    Invoke-customs are only supported starting with Android O (--min-api 26)
    Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev.jar:mono/android/incrementaldeployment/IncrementalClassLoader.class at Lmono/android/incrementaldeployment/IncrementalClassLoader;createDelegateClassLoader(Ljava/io/File;Ljava/lang/String;Ljava/util/List;Ljava/lang/ClassLoader;)Lmono/android/incrementaldeployment/IncrementalClassLoader$DelegateClassLoader;:
    Invoke-customs are only supported starting with Android O (--min-api 26)
    "/Users/builder/android-toolchain/jdk-21/bin/java" -classpath "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/r8.jar" com.android.tools.r8.D8 --release --no-desugaring --output "obj/Release/release-net6" "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_net6.jar"
    Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_net6.jar:mono/MonoPackageManager.class at Lmono/MonoPackageManager;LoadApplication(Landroid/content/Context;)V:
    Invoke-customs are only supported starting with Android O (--min-api 26)
    Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_net6.jar:mono/MonoPackageManager.class at Lmono/MonoPackageManager;getNativeLibraryPath(Landroid/content/pm/ApplicationInfo;)Ljava/lang/String;:
    Invoke-customs are only supported starting with Android O (--min-api 26)
    Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_net6.jar:mono/android/incrementaldeployment/IncrementalClassLoader.class at Lmono/android/incrementaldeployment/IncrementalClassLoader;createDelegateClassLoader(Ljava/io/File;Ljava/lang/String;Ljava/util/List;Ljava/lang/ClassLoader;)Lmono/android/incrementaldeployment/IncrementalClassLoader$DelegateClassLoader;:
    Invoke-customs are only supported starting with Android O (--min-api 26)
    "/Users/builder/android-toolchain/jdk-21/bin/java" -classpath "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/r8.jar" com.android.tools.r8.D8 --release --no-desugaring --output "obj/Release/fastdev-net6" "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev_net6.jar"
    Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev_net6.jar:mono/android/MultiDexLoader.class at Lmono/android/MultiDexLoader;getDexList(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;:
    Invoke-customs are only supported starting with Android O (--min-api 26)
    Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev_net6.jar:mono/MonoPackageManager.class at Lmono/MonoPackageManager;LoadApplication(Landroid/content/Context;)V:
    Invoke-customs are only supported starting with Android O (--min-api 26)
    Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev_net6.jar:mono/android/MultiDexLoader.class at Lmono/android/MultiDexLoader;attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V:
    Invoke-customs are only supported starting with Android O (--min-api 26)
    Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev_net6.jar:mono/MonoPackageManager.class at Lmono/MonoPackageManager;getNativeLibraryPath(Landroid/content/pm/ApplicationInfo;)Ljava/lang/String;:
    Invoke-customs are only supported starting with Android O (--min-api 26)
    Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev_net6.jar:mono/android/incrementaldeployment/IncrementalClassLoader.class at Lmono/android/incrementaldeployment/IncrementalClassLoader;createDelegateClassLoader(Ljava/io/File;Ljava/lang/String;Ljava/util/List;Ljava/lang/ClassLoader;)Lmono/android/incrementaldeployment/IncrementalClassLoader$DelegateClassLoader;:
    Invoke-customs are only supported starting with Android O (--min-api 26)
    "/Users/builder/android-toolchain/jdk-21/bin/java" -classpath "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/r8.jar" com.android.tools.r8.D8 --release --no-desugaring --output "obj/Release/release-clr" "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_clr.jar"
    Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_clr.jar:mono/MonoPackageManager.class at Lmono/MonoPackageManager;LoadApplication(Landroid/content/Context;)V:
    Invoke-customs are only supported starting with Android O (--min-api 26)
    Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_clr.jar:mono/android/incrementaldeployment/IncrementalClassLoader.class at Lmono/android/incrementaldeployment/IncrementalClassLoader;createDelegateClassLoader(Ljava/io/File;Ljava/lang/String;Ljava/util/List;Ljava/lang/ClassLoader;)Lmono/android/incrementaldeployment/IncrementalClassLoader$DelegateClassLoader;:
    Invoke-customs are only supported starting with Android O (--min-api 26)
    "/Users/builder/android-toolchain/jdk-21/bin/java" -classpath "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/r8.jar" com.android.tools.r8.D8 --release --no-desugaring --output "obj/Release/fastdev-clr" "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev_clr.jar"
    Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev_clr.jar:mono/android/MultiDexLoader.class at Lmono/android/MultiDexLoader;getDexList(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;:
    Invoke-customs are only supported starting with Android O (--min-api 26)
    Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev_clr.jar:mono/MonoPackageManager.class at Lmono/MonoPackageManager;LoadApplication(Landroid/content/Context;)V:
    Invoke-customs are only supported starting with Android O (--min-api 26)
    Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev_clr.jar:mono/android/MultiDexLoader.class at Lmono/android/MultiDexLoader;attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V:
    Invoke-customs are only supported starting with Android O (--min-api 26)
    Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime_fastdev_clr.jar:mono/android/incrementaldeployment/IncrementalClassLoader.class at Lmono/android/incrementaldeployment/IncrementalClassLoader;createDelegateClassLoader(Ljava/io/File;Ljava/lang/String;Ljava/util/List;Ljava/lang/ClassLoader;)Lmono/android/incrementaldeployment/IncrementalClassLoader$DelegateClassLoader;:
    Invoke-customs are only supported starting with Android O (--min-api 26)

Reviewing the command, I see the following issues:

* `--min-api` is omitted, so it would default to API 1
* We are passing `--no-desugaring`, which leaves all Java features as-is.
* We don't pass the path to `android.jar`.

After fixing all of these, I see now warnings from `r8.jar` anymore
and no log messages are shown:

    Exec
        Assembly = D:\src\xamarin-android\bin\Release\dotnet\sdk\10.0.100-preview.4.25180.3\Microsoft.Build.Tasks.Core.dll
        Parameters
            EnvironmentVariables = JAVA_HOME=D:\android-toolchain\jdk-21
            Command = "D:\android-toolchain\jdk-21\bin\java.exe" -classpath "D:\src\xamarin-android\bin\Debug\lib\packs\Microsoft.Android.Sdk.Windows\36.0.0\tools\r8.jar" com.android.tools.r8.D8 --release --min-api 21 --lib ""D:\android-toolchain\sdk\platforms\android-36\android.jar"" --output "obj\Debug\release" "D:\src\xamarin-android\bin\Debug\lib\packs\Microsoft.Android.Sdk.Windows\36.0.0\tools\java_runtime.jar"
        Environment Variables passed to tool:
        JAVA_HOME=D:\android-toolchain\jdk-21
        CommandLineArguments = "D:\android-toolchain\jdk-21\bin\java.exe" -classpath "D:\src\xamarin-android\bin\Debug\lib\packs\Microsoft.Android.Sdk.Windows\36.0.0\tools\r8.jar" com.android.tools.r8.D8 --release --min-api 21 --lib ""D:\android-toolchain\sdk\platforms\android-36\android.jar"" --output "obj\Debug\release" "D:\src\xamarin-android\bin\Debug\lib\packs\Microsoft.Android.Sdk.Windows\36.0.0\tools\java_runtime.jar"

I didn't see why `--no-desugaring` was initially passed:

* 4742d50

I also removed the `16` in the target name, as it likely refers to
API-16, which is not a number we should be tracking any longer. API-21
is our minimum.
Outputs="@(_RuntimeOutput->'%(OutputDex)')">
<Exec
Command="&quot;$(JavaPath)&quot; -classpath &quot;$(OutputPath)r8.jar&quot; com.android.tools.r8.D8 --release --no-desugaring --output &quot;%(_RuntimeOutput.IntermediateRuntimeOutputPath)&quot; &quot;%(_RuntimeOutput.OutputJar)&quot;"
Command="&quot;$(JavaPath)&quot; -classpath &quot;$(OutputPath)r8.jar&quot; com.android.tools.r8.D8 --release --min-api $(AndroidMinimumDotNetApiLevel) --lib &quot;$(_AndroidJar)&quot; --output &quot;%(_RuntimeOutput.IntermediateRuntimeOutputPath)&quot; &quot;%(_RuntimeOutput.OutputJar)&quot;"
Copy link
Member Author

@jonathanpeppers jonathanpeppers Apr 15, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is --no-desugaring important? This will now desugar back to API-21. See: 4742d50

@jonathanpeppers jonathanpeppers marked this pull request as ready for review April 16, 2025 13:47
@jonathanpeppers jonathanpeppers marked this pull request as draft April 16, 2025 15:43
@jonathanpeppers
Copy link
Member Author

Going to wait and see if targeting Java 9 has warnings here:

jonathanpeppers added a commit that referenced this pull request Apr 17, 2025
Fixes: #9922
Fixes: #9925

In 165cef7, we started compiling with Java 17 by default. This
causes warnings in #9922 such as:

    "/Users/builder/android-toolchain/jdk-21/bin/java" -classpath "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/r8.jar" com.android.tools.r8.D8 --release --no-desugaring --output "obj/Release/release" "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime.jar"
    Warning in /Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime.jar:mono/MonoPackageManager.class at Lmono/MonoPackageManager;LoadApplication(Landroid/content/Context;)V:
    Invoke-customs are only supported starting with Android O (--min-api 26)

This also happens if we go back to Java 9.

We can get rid of the warning by desugaring the code to API 21:

* #10039

However, we think desugaring in itself could break something
(especially for servicing).

For now, we think the safest option is:

* Target 1.8 for Java code targeting Android.

* Desktop Java projects can still target 17.

With these changes, tests like `BuildHasNoWarnings()` fail due to
build warnings.

Next:

* When using the `-source` and `-target` switches in the `<Javac/>`
  MSBuild task, we can pass `-Xlint:-options` to `javac` to prevent
  warnings about these switches being deprecated.

This change is suitable for servicing in .NET 9 and the
`BuildHasNoWarnings()` test now passes.
@jonathanpeppers
Copy link
Member Author

jonpryor pushed a commit that referenced this pull request Apr 23, 2025
Fixes: #9922
Fixes: #9925

Context: 165cef7
Context: #10039

In 165cef7, we started compiling Java code to target JDK-17 by
default. This causes warnings in #9922 such as:

	"/Users/builder/android-toolchain/jdk-21/bin/java" -classpath "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/r8.jar" \
	  com.android.tools.r8.D8 --release --no-desugaring --output \
	  "obj/Release/release" "/Users/builder/azdo/_work/11/s/xamarin-android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime.jar"
	Warning in …android/bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/35.99.0/tools/java_runtime.jar:mono/MonoPackageManager.class at Lmono/MonoPackageManager;LoadApplication(Landroid/content/Context;)V:
	Invoke-customs are only supported starting with Android O (--min-api 26)

This also happens if we target JDK-9.

We can get rid of the warning by desugaring the code to API-21;
see #10039.

However, we think desugaring in itself could break something,
especially for servicing.

For now, we think the safest option is:

  * Target JDK 1.8 for Java code targeting Android.
    (This partially reverts 165cef7 and is consistent with .NET 9.)

  * Desktop Java projects continue targeting JDK-17.

Additionally, update the `<Javac/>` task to *ignore* "options"
warnings by using `javac -Xlint:-options`, which prevents warning
messages such as the following:

	JAVAC : warning : [options] target value 8 is obsolete and will be removed in a future release
	JAVAC : warning : [options] To suppress warnings about obsolete options, use -Xlint:-options.

These warnings appear when using JDK-21 to build Java source code
while using `java -source 1.8 -target 1.8`; they do not appear when
building Java source code with JDK-17 or earlier.

With these changes, tests like `BuildHasNoWarnings()` fail due to
build warnings.  This change is suitable for servicing in .NET 9.
@github-actions github-actions bot locked and limited conversation to collaborators May 18, 2025
@akoeplinger akoeplinger deleted the dev/peppers/GenerateRuntimeDex branch June 2, 2025 14:43
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.

Invoke-customs are only supported starting with Android O (--min-api 26) warnings

2 participants