Proguard with Artemis ODB

Proguard is breaking some reflection inside of Artemis, even though I have obfuscation disabled for Artemeis. I’m using configs to disable all obfuscation (rather than using -dontobfuscate):

Here is the mappings output from Proguard. It should just be ignoring net.mostlyoriginal, but it seems to be doing some kind of renaming.

If I use -dontobfuscate, then the issues don’t occur.

net.mostlyoriginal.api.system.SchedulerSystem → net.mostlyoriginal.api.system.SchedulerSystem:
net.mostlyoriginal.api.plugin.extendedcomponentmapper.M mSchedule → mSchedule
void () →
void process(com.artemis.Entity) → process

Why is Proguard doing any modification of those classes? It seems to modify nearly all classes:

org.lwjgl.system.windows.WindowProc → org.lwjgl.system.windows.WindowProc:
org.lwjgl.system.windows.WindowProc create(long) → create
org.lwjgl.system.windows.WindowProc createSafe(long) → createSafe

At runtime there is a crash related to reflection:

Exception in thread “main” com.artemis.MundaneWireException: Error while wiring net.mostlyoriginal.api.system.SchedulerSystem
at com.artemis.injection.CachedInjector.inject(Unknown Source)
at com.artemis.WorldConfiguration.initializeSystems(Unknown Source)

Hi @Bryan_Brunton!

Since the -dontobfuscate flag resolves your issues, it’s likely that your configuration for the individual keep rules are not properly set up, you might have to set up the keep rules for specifically the classing instance and ensure any future crash is from a different instance of reflection.

1 Like