Commit 199efa8
authored
[NativeAOT] Provide the Android ClassLoader (#10121)
Fixes: #10118
Context: 18ca528
Context: dotnet/java-interop@5852e6e
dotnet/java-interop@5852e6e3 updated `JniEnviroment.Types.FindClass()`
to begin using [`Class.forName(String, bool, ClassLoader)`][0] to load
Java types instead of `ClassLoader.loadClass()`.
This broke type registration on non-Java threads under NativeAOT;
attempt to load a non-Android Java type from a managed thread:
var t = new System.Threading.Thread(() => {
using var c = new ClassFromThisAssembly();
});
t.Start();
t.Join();
would fail with a `ClassNotFoundException`:
E NUnit : Java.Lang.ClassNotFoundException: Didn't find class "from.NewManagedThreadOne" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/system/lib64, /system_ext/lib64, /system/lib64, /system_ext/lib64]]
E NUnit : at Java.Interop.JniEnvironment.Types.TryFindClass(String, Boolean) + 0x3f4
E NUnit : at Java.Interop.JniPeerMembers.JniInstanceMethods..ctor(Type) + 0x130
E NUnit : at Java.Interop.JniPeerMembers.JniInstanceMethods.GetConstructorsForType(Type) + 0x94
E NUnit : at Java.Interop.JniPeerMembers.JniInstanceMethods.StartCreateInstance(String, Type, JniArgumentValue*) + 0x1c
E NUnit : at Java.Lang.Object..ctor() + 0x108
E NUnit : at Java.InteropTests.JnienvTest.<>c__DisplayClass6_0.<RegisterTypeOnNewManagedThread>b__0() + 0x24
E NUnit : --- End of managed Java.Lang.ClassNotFoundException stack trace ---
E NUnit : java.lang.ClassNotFoundException: Didn't find class "from.NewManagedThreadOne" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/system/lib64, /system_ext/lib64, /system/lib64, /system_ext/lib64]]
E NUnit : at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
E NUnit : at java.lang.ClassLoader.loadClass(ClassLoader.java:637)
E NUnit : at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
Fix this by setting `NativeAotRuntimeOptions.ClassLoader` to the
`context.getClassLoader()` value within
`NativeAotRuntimeProvider.attachInfo()`. This ensures that we use
a `ClassLoader` that knows about the app's `classes.dex`.
[0]: https://developer.android.com/reference/java/lang/Class#forName(java.lang.String,%20boolean,%20java.lang.ClassLoader)1 parent fc296cd commit 199efa8
4 files changed
Lines changed: 30 additions & 6 deletions
File tree
- src
- Microsoft.Android.Runtime.NativeAOT/Android.Runtime.NativeAOT
- Xamarin.Android.Build.Tasks/Resources
- tests/Mono.Android-Tests/Mono.Android-Tests/Java.Interop
Lines changed: 2 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
34 | | - | |
| 34 | + | |
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
| |||
41 | 41 | | |
42 | 42 | | |
43 | 43 | | |
| 44 | + | |
44 | 45 | | |
45 | 46 | | |
46 | 47 | | |
| |||
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
14 | | - | |
| 14 | + | |
15 | 15 | | |
Lines changed: 3 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
37 | 37 | | |
38 | 38 | | |
39 | 39 | | |
| 40 | + | |
| 41 | + | |
40 | 42 | | |
41 | | - | |
| 43 | + | |
42 | 44 | | |
43 | 45 | | |
44 | 46 | | |
| |||
Lines changed: 24 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
44 | 44 | | |
45 | 45 | | |
46 | 46 | | |
47 | | - | |
| 47 | + | |
48 | 48 | | |
49 | 49 | | |
50 | 50 | | |
| |||
57 | 57 | | |
58 | 58 | | |
59 | 59 | | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
60 | 77 | | |
61 | 78 | | |
62 | 79 | | |
| |||
459 | 476 | | |
460 | 477 | | |
461 | 478 | | |
462 | | - | |
463 | | - | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
464 | 485 | | |
465 | 486 | | |
466 | 487 | | |
| |||
0 commit comments