Skip to content

Commit 1ab56c7

Browse files
android: fix trimming-related crashes and resolve linker warnings
- Update `Linker.xml` to preserve `ActiveMixers` as both field and property. - Preserve critical types (OsuGameActivity, OsuGameAndroid, OsuConfigManager, etc.) to prevent immediate startup crashes. - Robustify reflection logic in `OsuGameAndroid.cs` to handle both field and property retrieval of `ActiveMixers`. - Expand `UnconditionalSuppressMessage` attributes to include IL2067 and IL2106 codes. - Explicitly preserve `ManagedBass` and `BindableList` members in `Linker.xml`.
1 parent 819cb88 commit 1ab56c7

4 files changed

Lines changed: 42 additions & 7 deletions

File tree

osu.Android/Linker.xml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,39 @@
77
<type fullname="MessagePack.Resolvers.DynamicUnionResolver" preserve="all" />
88
<type fullname="MessagePack.Resolvers.DynamicObjectResolver" preserve="all" />
99
</assembly>
10+
<assembly fullname="ManagedBass">
11+
<type fullname="ManagedBass.Bass" preserve="all" />
12+
</assembly>
13+
<assembly fullname="ManagedBass.Mix">
14+
<type fullname="ManagedBass.Mix.BassMix" preserve="all" />
15+
</assembly>
1016
<assembly fullname="osu.Framework">
1117
<type fullname="osu.Framework.Audio.AudioManager">
1218
<field name="ActiveMixers" />
19+
<property name="ActiveMixers" />
20+
<field name="TrackMixer" />
21+
<field name="SampleMixer" />
1322
</type>
1423
<type fullname="osu.Framework.Bindables.IBindableList`1">
1524
<method name="BindCollectionChanged" />
1625
<method name="UnbindCollectionChanged" />
1726
</type>
27+
<type fullname="osu.Framework.Bindables.BindableList`1">
28+
<method name="BindCollectionChanged" />
29+
<method name="UnbindCollectionChanged" />
30+
</type>
1831
<type fullname="osu.Framework.Audio.Mixing.AudioMixer" preserve="all" />
32+
<type fullname="osu.Framework.Platform.Android.AndroidGameActivity" preserve="all" />
33+
</assembly>
34+
<assembly fullname="osu.Game">
35+
<type fullname="osu.Game.OsuGameBase" preserve="all" />
36+
<type fullname="osu.Game.Beatmaps.Beatmap" preserve="all" />
37+
<type fullname="osu.Game.Rulesets.Ruleset" preserve="all" />
38+
<type fullname="osu.Game.Skinning.Skin" preserve="all" />
39+
<type fullname="osu.Game.Configuration.OsuConfigManager" preserve="all" />
40+
</assembly>
41+
<assembly fullname="osu.Android">
42+
<type fullname="osu.Android.OsuGameActivity" preserve="all" />
43+
<type fullname="osu.Android.OsuGameAndroid" preserve="all" />
1944
</assembly>
2045
</linker>

osu.Android/OboeAudioRedirector.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public void RefreshMixers(int hardwareSampleRate)
102102
Console.WriteLine($"[osu!] Oboe redirector initialized successfully: master={masterMixer}, sources={string.Join(',', mixerHandles)}");
103103
}
104104

105-
[UnconditionalSuppressMessage("Trimming", "IL2070, IL2072, IL2075", Justification = "Preserved in Linker.xml")]
105+
[UnconditionalSuppressMessage("Trimming", "IL2067, IL2070, IL2072, IL2075, IL2106", Justification = "Preserved in Linker.xml")]
106106
private IEnumerable<AudioMixer> getActiveMixers()
107107
{
108108
Type type = typeof(AudioManager);
@@ -279,7 +279,7 @@ private void addMixer(AudioMixer? mixer)
279279
mixerHandles.Add(handle);
280280
}
281281

282-
[UnconditionalSuppressMessage("Trimming", "IL2067, IL2070, IL2072, IL2075", Justification = "Preserved in Linker.xml")]
282+
[UnconditionalSuppressMessage("Trimming", "IL2067, IL2070, IL2072, IL2075, IL2106", Justification = "Preserved in Linker.xml")]
283283
private int findHandle(object obj)
284284
{
285285
Type? type = obj.GetType();

osu.Android/OsuGameAndroid.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public OsuGameAndroid(OsuGameActivity activity)
6262
gameActivity = activity;
6363
}
6464

65-
[UnconditionalSuppressMessage("Trimming", "IL2070, IL2072, IL2075", Justification = "Preserved in Linker.xml")]
65+
[UnconditionalSuppressMessage("Trimming", "IL2067, IL2070, IL2072, IL2075, IL2106", Justification = "Preserved in Linker.xml")]
6666
protected override void LoadComplete()
6767
{
6868
base.LoadComplete();
@@ -85,11 +85,12 @@ protected override void LoadComplete()
8585
try
8686
{
8787
Type audioManagerType = typeof(osu.Framework.Audio.AudioManager);
88-
var activeMixersField = audioManagerType.GetField("ActiveMixers", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
88+
MemberInfo? activeMixersMember = (MemberInfo?)audioManagerType.GetField("ActiveMixers", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) ??
89+
audioManagerType.GetProperty("ActiveMixers", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
8990

90-
if (activeMixersField != null)
91+
if (activeMixersMember != null)
9192
{
92-
activeMixersList = activeMixersField.GetValue(Audio) as IEnumerable;
93+
activeMixersList = (activeMixersMember is FieldInfo field ? field.GetValue(Audio) : ((PropertyInfo)activeMixersMember).GetValue(Audio)) as IEnumerable;
9394

9495
if (activeMixersList != null)
9596
{
@@ -390,7 +391,7 @@ public override void SetHost(GameHost host)
390391

391392
protected override BatteryInfo CreateBatteryInfo() => new AndroidBatteryInfo();
392393

393-
[UnconditionalSuppressMessage("Trimming", "IL2070, IL2072, IL2075", Justification = "Preserved in Linker.xml")]
394+
[UnconditionalSuppressMessage("Trimming", "IL2067, IL2070, IL2072, IL2075, IL2106", Justification = "Preserved in Linker.xml")]
394395
protected override void Dispose(bool isDisposing)
395396
{
396397
try

review_changes.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import os
2+
3+
files = ['osu.Android/Linker.xml', 'osu.Android/OsuGameAndroid.cs', 'osu.Android/OboeAudioRedirector.cs']
4+
5+
for f in files:
6+
print(f"--- {f} ---")
7+
with open(f, 'r') as content:
8+
print(content.read())
9+
print("\n")

0 commit comments

Comments
 (0)