Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Jan 23, 2026

  • Analyze the issue: R8 task command line exceeds 32,000 character limit
  • Review existing code (D8.cs, R8.cs, JavaSourceUtils.cs for reference pattern)
  • Research R8/D8 response file support (@argfile syntax)
  • Implement response file support in D8 task
    • Create method to generate response file with jar inputs and lib references
    • Modify GetCommandLineBuilder to use response file for library arguments
    • Clean up response file after task execution
  • Build verification - project builds successfully
  • Add tests for response file functionality
    • Test that response file contains lib and input jars
    • Test that paths with spaces are handled correctly (no quoting needed)
  • Run code review - addressed feedback
  • Fix CI failure: Removed quoting from response file paths (R8/D8 treats each line as a complete argument)
Original prompt

This section details on the original issue you should resolve

<issue_title>Build error - The command line for R8 Tasks is too long. Command lines longer than 32000 chars are likely to fail.</issue_title>
<issue_description>### Android framework version

net10.0-android

Affected platform version

net10.0 android 36.1 VS2026 Insiders [11408.92]

Description

I was attempting to upgrade NuGets. In particular, Xamarin.AndroidX.AppCompat from 1.7.1.1 to 1.7.1.2, Xamarin.AndroidX.Navigation.UI 2.9 .6 to 2.9.6.1 and Xamarin.AndroidX.NavigationUI 2.9.6 to 2.9.6.1. NavigationUI should have dragged in Xamarin.Google.AndroidMaterial 1.13.1 instead of 1.13.0, which I was hoping would eliminate the warnings Google Play Console emits for every production build re Edge-To-Edge using deprecated APIs, etc. - issue #10304. The actual message is The command line for R8 Task is too long. Command lines longer than 32,000 characters are likely to fail. Try reducing the length of the command line by breaking down the call to R8 into multiple calls with fewer parameters per call.

msbuild.zip

Steps to Reproduce

N/A

Did you find any workaround?

No response

Relevant log output

```</issue_description>

<agent_instructions>Use a "response file" for passing all arguments to `r8.jar`, this should apply for both the `<R8/>` and `<D8/>` MSBuild tasks.

See this PR on a past attempt at implementing this: https://github.com/dotnet/android/pull/9546</agent_instructions>

## Comments on the Issue (you are @copilot in this section)

<comments>
</comments>

✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Copilot AI and others added 3 commits January 23, 2026 20:08
… length limits

Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
@jonathanpeppers
Copy link
Member

@copilot I don't think these changes work:

       Using "D8" task from assembly "C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\36.1.99-ci.copilot-fix-r8-command-line-error.109\tools\Xamarin.Android.Build.Tasks.dll".
       Task "D8"
         Task Parameter:AndroidManifestFile=obj\Debug\android-arm\android\AndroidManifest.xml
         Task Parameter:AssemblyIdentityMapFile=obj\Debug\android-arm\lp\map.cache
         Task Parameter:ClassesZip=obj\Debug\android-arm\android\bin\classes.zip
         Task Parameter:ToolPath=C:\hostedtoolcache\windows\Java_Temurin-Hotspot_jdk\17.0.17-10\x64\bin
         Task Parameter:JarPath=C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\36.1.99-ci.copilot-fix-r8-command-line-error.109\tools\r8.jar
         Task Parameter:JavaMaximumHeapSize=1G
         Task Parameter:OutputDirectory=obj\Debug\android-arm\android\bin\
         Task Parameter:EnableDesugar=True
         Task Parameter:IntermediateOutputPath=obj\Debug\android-arm\
         Task Parameter:JavaPlatformJarPath=C:\Android\android-sdk\platforms\android-36\android.jar
         Task Parameter:
             MapDiagnostics=
                 warning
                         To=info
         Task Parameter:Debug=True
         Task Parameter:
             JavaLibrariesToEmbed=
                 C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Ref.36\36.1.99-ci.copilot-fix-r8-command-line-error.109\ref\net11.0\mono.android.jar
                 C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\36.1.99-ci.copilot-fix-r8-command-line-error.109\tools\\java_runtime_net6.jar
                 C:\Users\cloudtest\.nuget\packages\xamarin.androidx.annotation\1.2.0.1\buildTransitive\net6.0-android30.0\..\..\jar\androidx.annotation.annotation.jar
                         AndroidXSkipAndroidXMigration=true
                 C:\Users\cloudtest\.nuget\packages\xamarin.androidx.collection\1.1.0.8\buildTransitive\net6.0-android30.0\..\..\jar\androidx.collection.collection.jar
                         AndroidXSkipAndroidXMigration=true
                 C:\Users\cloudtest\.nuget\packages\xamarin.androidx.lifecycle.common\2.3.1.1\buildTransitive\net6.0-android30.0\..\..\jar\androidx.lifecycle.lifecycle-common.jar
                         AndroidXSkipAndroidXMigration=true
                 C:\Users\cloudtest\.nuget\packages\xamarin.androidx.arch.core.common\2.1.0.9\buildTransitive\net6.0-android30.0\..\..\jar\androidx.arch.core.core-common.jar
                         AndroidXSkipAndroidXMigration=true
                 javaclasses.jar
                         Bind=true
                         Pack=true
                 obj\Debug\android-arm\binding\bin\Test Me.jar
                 C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.NETCore.App.Runtime.Mono.android-arm\11.0.0-alpha.1.26064.107\runtimes\android-arm\native\libSystem.Security.Cryptography.Native.Android.jar
                         AdditionalProperties=RuntimeIdentifier=android-arm;
                 _ComputeFilesToPublishForRuntimeIdentifiers=true
                 ;SelfContained=true
                 ;DesignTimeBuild=false
                 ;AppendRuntimeIdentifierToOutputPath=true
                 ;ResolveAssemblyReferencesFindRelatedSatellites=false
                 ;SkipCompilerExecution=true
                 ;_OuterIntermediateAssembly=obj\Debug\android-arm\Test Me.dll
                 ;_OuterIntermediateSatelliteAssembliesWithTargetPath=obj\Debug\android-arm\de-DE\Test Me.resources.dll;obj\Debug\android-arm\es\Test Me.resources.dll
                 ;_OuterOutputPath=bin\Debug\android-arm\
                 ;_OuterIntermediateOutputPath=obj\Debug\android-arm\
                 ;_OuterCustomViewMapFile=obj\Debug\android-arm\customview-map.txt
                 ;_AndroidNdkDirectory=C:\Android\android-sdk\ndk\29.0.14206865\
               
                         AssemblyVersion=
                         AssetType=native
                         CopyLocal=true
                         CopyToPublishDirectory=PreserveNewest
                         DestinationSubPath=libSystem.Security.Cryptography.Native.Android.jar
                         DropFromSingleFile=true
                         FileVersion=0.0.0.0
                         IsTrimmable=
                         MSBuildSourceProjectFile=C:\a\_work\1\a\TestRelease\01-23_22.02.44\temp\DotNetBuildandroid-armFalseFalseFalseMonoVM\Test Me.csproj
                         MSBuildSourceTargetName=_ComputeFilesToPublishForRuntimeIdentifiers
                         NuGetPackageId=Microsoft.NETCore.App.Runtime.Mono.android-arm
                         NuGetPackageVersion=11.0.0-alpha.1.26064.107
                         OriginalItemSpec=Test Me.csproj
                         PublicKeyToken=
                         RelativePath=libSystem.Security.Cryptography.Native.Android.jar
                         RuntimeIdentifier=android-arm
                 obj\Debug\android-arm\lp\27\jl\classes.jar
                         OriginalFile=C:\Users\cloudtest\.nuget\packages\xamarin.androidx.versionedparcelable\1.1.1.8\buildTransitive\net6.0-android30.0\..\..\aar\androidx.versionedparcelable.versionedparcelable.aar
                 obj\Debug\android-arm\lp\28\jl\classes.jar
                         OriginalFile=C:\Users\cloudtest\.nuget\packages\xamarin.androidx.arch.core.runtime\2.1.0.9\buildTransitive\net6.0-android30.0\..\..\aar\androidx.arch.core.core-runtime.aar
                 obj\Debug\android-arm\lp\29\jl\classes.jar
                         OriginalFile=C:\Users\cloudtest\.nuget\packages\xamarin.androidx.lifecycle.runtime\2.3.1.2\buildTransitive\net6.0-android30.0\..\..\aar\androidx.lifecycle.lifecycle-runtime.aar
                 obj\Debug\android-arm\lp\30\jl\classes.jar
                         OriginalFile=C:\Users\cloudtest\.nuget\packages\xamarin.androidx.annotation.experimental\1.1.0.1\buildTransitive\net6.0-android30.0\..\..\aar\androidx.annotation.annotation-experimental.aar
                 obj\Debug\android-arm\lp\31\jl\classes.jar
                         OriginalFile=C:\Users\cloudtest\.nuget\packages\xamarin.androidx.core\1.6.0.1\buildTransitive\net6.0-android30.0\..\..\aar\androidx.core.core.aar
                 obj\Debug\android-arm\lp\32\jl\classes.jar
                         OriginalFile=C:\Users\cloudtest\.nuget\packages\xamarin.androidx.customview\1.1.0.7\buildTransitive\net6.0-android30.0\..\..\aar\androidx.customview.customview.aar
                 obj\Debug\android-arm\lp\33\jl\classes.jar
                         OriginalFile=C:\Users\cloudtest\.nuget\packages\xamarin.androidx.viewpager\1.0.0.8\buildTransitive\net6.0-android30.0\..\..\aar\androidx.viewpager.viewpager.aar
                 obj\Debug\android-arm\lp\34\jl\classes.jar
                         OriginalFile=C:\Users\cloudtest\.nuget\packages\xamarin.androidx.vectordrawable\1.1.0.8\buildTransitive\net6.0-android30.0\..\..\aar\androidx.vectordrawable.vectordrawable.aar
                 obj\Debug\android-arm\lp\35\jl\classes.jar
                         OriginalFile=C:\Users\cloudtest\.nuget\packages\xamarin.androidx.interpolator\1.0.0.8\buildTransitive\net6.0-android30.0\..\..\aar\androidx.interpolator.interpolator.aar
                 obj\Debug\android-arm\lp\36\jl\classes.jar
                         OriginalFile=C:\Users\cloudtest\.nuget\packages\xamarin.androidx.vectordrawable.animated\1.1.0.8\buildTransitive\net6.0-android30.0\..\..\aar\androidx.vectordrawable.vectordrawable-animated.aar
                 obj\Debug\android-arm\lp\37\jl\classes.jar
                         OriginalFile=C:\Users\cloudtest\.nuget\packages\xamarin.androidx.tracing.tracing\1.0.0.1\buildTransitive\net6.0-android30.0\..\..\aar\androidx.tracing.tracing.aar
                 obj\Debug\android-arm\lp\38\jl\classes.jar
                         OriginalFile=C:\Users\cloudtest\.nuget\packages\xamarin.androidx.savedstate\1.1.0.2\buildTransitive\net6.0-android30.0\..\..\aar\androidx.savedstate.savedstate.aar
                 obj\Debug\android-arm\lp\39\jl\classes.jar
                         OriginalFile=C:\Users\cloudtest\.nuget\packages\xamarin.androidx.lifecycle.viewmodel\2.3.1.1\buildTransitive\net6.0-android30.0\..\..\aar\androidx.lifecycle.lifecycle-viewmodel.aar
                 obj\Debug\android-arm\lp\40\jl\classes.jar
                         OriginalFile=C:\Users\cloudtest\.nuget\packages\xamarin.androidx.lifecycle.livedata.core\2.3.1.1\buildTransitive\net6.0-android30.0\..\..\aar\androidx.lifecycle.lifecycle-livedata-core.aar
                 obj\Debug\android-arm\lp\41\jl\classes.jar
                         OriginalFile=C:\Users\cloudtest\.nuget\packages\xamarin.androidx.loader\1.1.0.8\buildTransitive\net6.0-android30.0\..\..\aar\androidx.loader.loader.aar
                 obj\Debug\android-arm\lp\42\jl\classes.jar
                         OriginalFile=C:\Users\cloudtest\.nuget\packages\xamarin.androidx.lifecycle.viewmodelsavedstate\2.3.1.1\buildTransitive\net6.0-android30.0\..\..\aar\androidx.lifecycle.lifecycle-viewmodel-savedstate.aar
                 obj\Debug\android-arm\lp\43\jl\classes.jar
                         OriginalFile=C:\Users\cloudtest\.nuget\packages\xamarin.androidx.activity\1.2.4.1\buildTransitive\net6.0-android30.0\..\..\aar\androidx.activity.activity.aar
                 obj\Debug\android-arm\lp\44\jl\classes.jar
                         OriginalFile=C:\Users\cloudtest\.nuget\packages\xamarin.androidx.fragment\1.3.6.1\buildTransitive\net6.0-android30.0\..\..\aar\androidx.fragment.fragment.aar
                 obj\Debug\android-arm\lp\45\jl\classes.jar
                         OriginalFile=C:\Users\cloudtest\.nuget\packages\xamarin.androidx.drawerlayout\1.1.1.3\buildTransitive\net6.0-android30.0\..\..\aar\androidx.drawerlayout.drawerlayout.aar
                 obj\Debug\android-arm\lp\46\jl\classes.jar
                         OriginalFile=C:\Users\cloudtest\.nuget\packages\xamarin.androidx.cursoradapter\1.0.0.8\buildTransitive\net6.0-android30.0\..\..\aar\androidx.cursoradapter.cursoradapter.aar
                 obj\Debug\android-arm\lp\47\jl\classes.jar
                         OriginalFile=C:\Users\cloudtest\.nuget\packages\xamarin.androidx.appcompat.appcompatresources\1.3.1.1\buildTransitive\net6.0-android30.0\..\..\aar\androidx.appcompat.appcompat-resources.aar
                 obj\Debug\android-arm\lp\48\jl\classes.jar
                         OriginalFile=C:\Users\cloudtest\.nuget\packages\xamarin.androidx.appcompat\1.3.1.1\buildTransitive\net6.0-android30.0\..\..\aar\androidx.appcompat.appcompat.aar
                 obj\Debug\android-arm\lp\49\jl\classes.jar
                         OriginalFile=material-menu-1.1.0.aar
         [com.android.tools.r8.D8] response file: C:\Users\cloudtest\AppData\Local\Temp\tmp0sscep.tmp
           processing ClassesZip, JavaLibrariesToEmbed...
           --lib
           C:\Android\android-sdk\platforms\android-36\android.jar
           obj\Debug\android-arm\android\bin\classes.zip
           C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Ref.36\36.1.99-ci.copilot-fix-r8-command-line-error.109\ref\net11.0\mono.android.jar
           C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\36.1.99-ci.copilot-fix-r8-command-line-error.109\tools\\java_runtime_net6.jar
           C:\Users\cloudtest\.nuget\packages\xamarin.androidx.annotation\1.2.0.1\buildTransitive\net6.0-android30.0\..\..\jar\androidx.annotation.annotation.jar
           C:\Users\cloudtest\.nuget\packages\xamarin.androidx.collection\1.1.0.8\buildTransitive\net6.0-android30.0\..\..\jar\androidx.collection.collection.jar
           C:\Users\cloudtest\.nuget\packages\xamarin.androidx.lifecycle.common\2.3.1.1\buildTransitive\net6.0-android30.0\..\..\jar\androidx.lifecycle.lifecycle-common.jar
           C:\Users\cloudtest\.nuget\packages\xamarin.androidx.arch.core.common\2.1.0.9\buildTransitive\net6.0-android30.0\..\..\jar\androidx.arch.core.core-common.jar
           javaclasses.jar
           obj\Debug\android-arm\binding\bin\Test Me.jar
           C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.NETCore.App.Runtime.Mono.android-arm\11.0.0-alpha.1.26064.107\runtimes\android-arm\native\libSystem.Security.Cryptography.Native.Android.jar
           obj\Debug\android-arm\lp\27\jl\classes.jar
           obj\Debug\android-arm\lp\28\jl\classes.jar
           obj\Debug\android-arm\lp\29\jl\classes.jar
           obj\Debug\android-arm\lp\30\jl\classes.jar
           obj\Debug\android-arm\lp\31\jl\classes.jar
           obj\Debug\android-arm\lp\32\jl\classes.jar
           obj\Debug\android-arm\lp\33\jl\classes.jar
           obj\Debug\android-arm\lp\34\jl\classes.jar
           obj\Debug\android-arm\lp\35\jl\classes.jar
           obj\Debug\android-arm\lp\36\jl\classes.jar
           obj\Debug\android-arm\lp\37\jl\classes.jar
           obj\Debug\android-arm\lp\38\jl\classes.jar
           obj\Debug\android-arm\lp\39\jl\classes.jar
           obj\Debug\android-arm\lp\40\jl\classes.jar
           obj\Debug\android-arm\lp\41\jl\classes.jar
           obj\Debug\android-arm\lp\42\jl\classes.jar
           obj\Debug\android-arm\lp\43\jl\classes.jar
           obj\Debug\android-arm\lp\44\jl\classes.jar
           obj\Debug\android-arm\lp\45\jl\classes.jar
           obj\Debug\android-arm\lp\46\jl\classes.jar
           obj\Debug\android-arm\lp\47\jl\classes.jar
           obj\Debug\android-arm\lp\48\jl\classes.jar
           obj\Debug\android-arm\lp\49\jl\classes.jar
         C:\hostedtoolcache\windows\Java_Temurin-Hotspot_jdk\17.0.17-10\x64\bin\java.exe -Xmx1G -classpath C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\36.1.99-ci.copilot-fix-r8-command-line-error.109\tools\r8.jar com.android.tools.r8.D8 --debug --min-api 21 --output obj\Debug\android-arm\android\bin\ @C:\Users\cloudtest\AppData\Local\Temp\tmp0sscep.tmp --map-diagnostics warning info 
         Compilation failed with an internal error.
         Exception in thread "main" java.nio.file.InvalidPathException: Illegal char <"> at index 0: "obj\Debug\android-arm\binding\bin\Test Me.jar"
         	at java.base/sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)
         	at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)
         	at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
         	at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92)
         	at java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:232)
         	at java.base/java.nio.file.Path.of(Path.java:147)
         	at java.base/java.nio.file.Paths.get(Paths.java:69)
         	at com.android.tools.r8.p.a(R8_8.13.19_e9726f7e236c4c45aca9deeada0d577f8cf0d304d735b8c0f7f49bca48f5e907:273)
         	at com.android.tools.r8.D8Command.parse(R8_8.13.19_e9726f7e236c4c45aca9deeada0d577f8cf0d304d735b8c0f7f49bca48f5e907:1)
         	at com.android.tools.r8.D8.b(R8_8.13.19_e9726f7e236c4c45aca9deeada0d577f8cf0d304d735b8c0f7f49bca48f5e907:2)
         	at com.android.tools.r8.D8.a(R8_8.13.19_e9726f7e236c4c45aca9deeada0d577f8cf0d304d735b8c0f7f49bca48f5e907:28)
         	at com.android.tools.r8.internal.bs0.a(R8_8.13.19_e9726f7e236c4c45aca9deeada0d577f8cf0d304d735b8c0f7f49bca48f5e907:116)
         	at com.android.tools.r8.D8.main(R8_8.13.19_e9726f7e236c4c45aca9deeada0d577f8cf0d304d735b8c0f7f49bca48f5e907:5)
   1:7>C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\36.1.99-ci.copilot-fix-r8-command-line-error.109\tools\Xamarin.Android.D8.targets(87,5): error MSB6006: "java.exe" exited with code 1. [C:\a\_work\1\a\TestRelease\01-23_22.02.44\temp\DotNetBuildandroid-armFalseFalseFalseMonoVM\Test Me.csproj]

…te argument

Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jan 27, 2026

@copilot I don't think these changes work:

       Using "D8" task from assembly "C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\36.1.99-ci.copilot-fix-r8-command-line-erro...

Fixed in c387499. The issue was that I was adding quotes around paths with spaces in the response file, but R8/D8's response file parser treats each line as a complete argument - no quoting is needed. Removed the quoting logic from WriteArg() to match how JavaSourceUtils.cs handles response files.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Build error - The command line for R8 Tasks is too long. Command lines longer than 32000 chars are likely to fail.

2 participants