I guess this is because of the way Ren'Py implements the load strategy, specifically for Android:
Code:
def load_core(name):
"""
Returns an open python file object of the given type.
"""
name = lower_map.get(name.lower(), name)
if renpy.config.file_open_callback:
rv = renpy.config.file_open_callback(name)
if rv is not None:
return rv
# Look for the file directly.
if not renpy.config.force_archives:
try:
fn = transfn(name)
return open_file(fn, "rb")
except:
pass
# Look for the file in the apk.
for apk in apks:
prefixed_name = "/".join("x-" + i for i in name.split("/"))
try:
return apk.open(prefixed_name)
except IOError:
pass
# Look for it in archive files.
for prefix, index in archives:
if not name in index:
continue
afn = transfn(prefix + ".rpa")
data = [ ]
# Direct path.
if len(index[name]) == 1:
t = index[name][0]
if len(t) == 2:
offset, dlen = t
start = ''
else:
offset, dlen, start = t
rv = SubFile(afn, offset, dlen, start)
# Compatibility path.
else:
f = file(afn, "rb")
for offset, dlen in index[name]:
f.seek(offset)
data.append(f.read(dlen))
rv = StringIO(''.join(data))
f.close()
return rv
return None
As you can see, Ren'Py first tries to load the physical file, then it looks inside any APK if finds, and only then it looks inside the RPA files. This explains why my mod works, but your's doesn't.
I personally redefined that method for the possibility to disable the mod (all mods in fact) using parameter DISABLE_MOD which my mod introduces. This keeps Ren'Py from performing the first part (looking for the physical file). I guess it would be possible to change this in a way that also on Android, RPA's are parsed before APK's. But maybe that's too much messing with the engine...