If a method in a AIDL-specified interface contains a byte argument, a NullPointerException is thrown.
The OnTransact() method in the generated stub initializes the buffer to null, instead of allocating it before calling Parcel.ReadByteArray. Seems to be wrongly using the same rule used for other data types.
This issue was previously reported in the forum: http://forums.xamarin.com/discussion/47305/nullpointerexception-when-transferring-byte-array-over-ipc-using-aidl
Our C# port of AIDL is missing call to Create[Byte_or_anything]Array() to create an assignable array. Now we got an internal fix, and it will be included in the next major update. Thanks for the report.
It's been 7 months and still no fix on latest stable version.
I'm using Xamarin for Android 184.108.40.206 and still have to fix the stub by hand.
Looks like I already had the fix but it doesn't work... :(
The latest version (Xamarin.Android 220.127.116.11) generates the following code:
byte  arg0 = default (byte );
arg0 = data.CreateByteArray (); data.ReadByteArray (arg0);
and then I get: Java.Lang.RuntimeException: bad array length
If I replace the generated code again by:
byte arg0 = data.CreateByteArray();
The documentation for CreateByteArray() states: Read and return a byte object from the parcel.
So the ReadByteArray() call is unnecessary.
I got another fix for that: https://github.com/xamarin/xamarin-android/pull/151
The fix has landed. [master 13820dc]