|
62 | 62 | <!-- ═══════════════════════════════════════════════════════════════════════ |
63 | 63 | ppy framework |
64 | 64 | ═══════════════════════════════════════════════════════════════════════ |
65 | | - ppy.osu.Framework: DrawableComponentLookup and SourceGeneratedImplementationLookup |
| 65 | + osu.Framework: DrawableComponentLookup and SourceGeneratedImplementationLookup |
66 | 66 | use Type.GetType()/Activator.CreateInstance() for draw hierarchy resolution. |
67 | 67 | Shader attribute scanning, TextureLoaderStore fallback chain, bindable system, |
68 | 68 | resource store extension routing — all reflection-dependent. |
69 | | - ppy.osu.Framework.Android: Android-specific host, input handling, surface wrappers. |
| 69 | + osu.Framework.Android: Android-specific host, input handling, surface wrappers. |
70 | 70 | AndroidGameActivity carries the (IntPtr, JniHandleOwnership) JNI-activation |
71 | 71 | constructor and RegisterAttribute-driven type-binding needed for all derived |
72 | 72 | Activity/Fragment types. Without preserve="all", ILLink will trim these |
73 | 73 | constructors (they are only reachable via JNI, not through any managed call |
74 | 74 | graph), causing TypeManager.Activate to throw NotSupportedException: |
75 | 75 | "Could not activate JNI Handle ... as managed type 'osu.Android.OsuGameActivity'" |
76 | | - at startup — exactly the crash reported in the 2026.508.222 field log. |
| 76 | + at startup. |
77 | 77 | ppy.Veldrid.SPIRV: SPIR-V cross-compiler; dynamically loads shader reflector types. |
| 78 | + (NuGet package ID and assembly name are both ppy.Veldrid.SPIRV — no mismatch.) |
78 | 79 |
|
79 | | - NOTE: ppy.osu.Framework and ppy.osu.Framework.Android originate from net10.0 |
80 | | - NuGet packages and are not visible in ILLink's assembly search path at descriptor- |
| 80 | + IMPORTANT — assembly name vs. NuGet package ID: |
| 81 | + ILLink's <assembly fullname="..."> descriptor element matches against the CLR |
| 82 | + assembly name (i.e. the value of <AssemblyName> in the project file), NOT the |
| 83 | + NuGet package ID. These two values are NOT always the same. In particular: |
| 84 | + NuGet package ID → CLR assembly name (AssemblyName in csproj) |
| 85 | + ppy.osu.Framework → osu.Framework |
| 86 | + ppy.osu.Framework.Android → osu.Framework.Android |
| 87 | + ppy.Veldrid.SPIRV → ppy.Veldrid.SPIRV (same — no ppy. mismatch here) |
| 88 | + Using the NuGet package ID instead of the assembly name causes the preserve rule |
| 89 | + to be stored but never matched: ILLink looks for an assembly named |
| 90 | + "ppy.osu.Framework.Android" in the link set, finds only "osu.Framework.Android", |
| 91 | + skips preservation, and freely trims the JNI-activation constructor from |
| 92 | + AndroidGameActivity. The resulting startup crash ("Could not activate JNI Handle |
| 93 | + ... as managed type 'osu.Android.OsuGameActivity'") is exactly what was reported |
| 94 | + in the v2026.508.225 field log. |
| 95 | +
|
| 96 | + NOTE: osu.Framework and osu.Framework.Android originate from net10.0 NuGet |
| 97 | + packages and are not visible in ILLink's assembly search path at descriptor- |
81 | 98 | processing time. ILLink therefore emits warning IL2007 ("Could not resolve |
82 | 99 | assembly") for each entry. This warning is BENIGN and EXPECTED: ILLink stores |
83 | 100 | the preserve="all" rule in its internal table even when it cannot resolve the |
|
86 | 103 | the stored rule and preserves the assembly in full. Removing these entries |
87 | 104 | "to silence the warnings" allows ILLink to freely trim JNI-only constructors |
88 | 105 | from AndroidGameActivity, crashing the app on launch. --> |
89 | | - <assembly fullname="ppy.osu.Framework" preserve="all" /> |
90 | | - <assembly fullname="ppy.osu.Framework.Android" preserve="all" /> |
91 | | - <assembly fullname="ppy.Veldrid.SPIRV" preserve="all" /> |
| 106 | + <assembly fullname="osu.Framework" preserve="all" /> |
| 107 | + <assembly fullname="osu.Framework.Android" preserve="all" /> |
| 108 | + <assembly fullname="ppy.Veldrid.SPIRV" preserve="all" /> |
92 | 109 |
|
93 | 110 | <!-- ═══════════════════════════════════════════════════════════════════════ |
94 | 111 | Audio (ManagedBass) |
|
0 commit comments