Skip to content

Marshal method feature does not support arrays of arrays #7693

@jpobst

Description

@jpobst

Android application type

Android for .NET (net6.0-android, etc.)

Affected platform version

main branch

Description

Marshal method JNI parsing is not recursive and thus does not support "arrays of arrays", resulting in an error like:

error XAGPM7009: System.InvalidOperationException: Unsupported JNI array type '[' at index 56 of signature '(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[[B)V' 
error XAGPM7009:    at Xamarin.Android.Tasks.MarshalMethodsNativeAssemblyGenerator.<ParseJniSignature>g__JniTypeToManaged|55_0(Char jniType, <>c__DisplayClass55_0&) 
error XAGPM7009:    at Xamarin.Android.Tasks.MarshalMethodsNativeAssemblyGenerator.ParseJniSignature(String signature, MethodDefinition implementedMethod) 
error XAGPM7009:    at Xamarin.Android.Tasks.MarshalMethodsNativeAssemblyGenerator.ProcessAndAddMethod(List`1 allMethods, MarshalMethodEntry entry, Boolean useFullNativeSignature, Dictionary`2 seenClasses, Dictionary`2 overloadedNativeSymbolNames) 
error XAGPM7009:    at Xamarin.Android.Tasks.MarshalMethodsNativeAssemblyGenerator.Init() 
error XAGPM7009:    at Xamarin.Android.Tasks.GeneratePackageManagerJava.AddEnvironment()
error XAGPM7009:    at Xamarin.Android.Tasks.GeneratePackageManagerJava.RunTask()
error XAGPM7009:    at Microsoft.Android.Build.Tasks.AndroidTask.Execute() in /Users/builder/azdo/_work/1/s/xamarin-android/external/xamarin-android-tools/src/Microsoft.Android.Build.BaseTasks/AndroidTask.cs:line 17

I think the offending Java is:

package com.xamarin.android;

public interface DataListener {

	void onDataReceived (
			java.lang.String fromNode,
			java.lang.String fromChannel,
			java.lang.String payloadType,
			byte[][] payload
	);
}

Which creates this binding:

// Metadata.xml XPath interface reference: path="/api/package[@name='com.xamarin.android']/interface[@name='DataListener']"
[Register ("com/xamarin/android/DataListener", "", "Com.Xamarin.Android.IDataListenerInvoker")]
public partial interface IDataListener : IJavaObject, IJavaPeerable {
	// Metadata.xml XPath method reference: path="/api/package[@name='com.xamarin.android']/interface[@name='DataListener']/method[@name='onDataReceived' and count(parameter)=4 and parameter[1][@type='java.lang.String'] and parameter[2][@type='java.lang.String'] and parameter[3][@type='java.lang.String'] and parameter[4][@type='byte[][]']]"
	[Register ("onDataReceived", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[[B)V", "GetOnDataReceived_Ljava_lang_String_Ljava_lang_String_Ljava_lang_String_arrayarrayBHandler:Com.Xamarin.Android.IDataListenerInvoker, Xamarin.Android.BindingRuntime-Tests")]
	void OnDataReceived (string? p0, string? p1, string? p2, byte[][]? p3);
}

Found porting JcwGen-Tests to .NET.

WIP PR: #7682
CI Failure: https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=7177413&view=logs&j=5ded96ba-e325-5baf-fde0-f1868aa3be52&t=c2c4f07f-d496-5615-0a30-2918839712d3

Steps to Reproduce

Provided above.

Did you find any workaround?

No response

Relevant log output

No response

Metadata

Metadata

Assignees

Labels

Area: App+Library BuildIssues when building Library projects or Application projects.

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions