如何让 Android 加载动态生成的 dalvik 字节码而不先写入文件?

How can I make Android load dynamically generated dalvik bytecode without writing to a file first?

在过去的六个月里,作为我的期末大学项目,我一直在 Java 中编写 PlayStation 1 模拟器以证明它的性能 - 我的部分策略涉及编写自定义 class 加载程序将我刚刚从数组生成的字节码导入到新的 class - 实际上是一个 Java 字节码 dynarec 核心,它加速了模拟 CPU 个数量级(理论上)。在 Oracle JVM 上完全有可能,并且之前由其他人完成。

我的问题是,除了我需要生成 dalvik 字节码而不是 Java 字节码这一事实之外,似乎没有办法将 classes 动态加载到 运行 Android 不涉及从某处闪存上的 dex 文件加载它们的应用程序。我知道之前有人问过类似的问题,但由于我最终想移植这个模拟器(并且让它比目前无法播放的速度更快),所以有没有办法解决这个问题?当一段新的 MIPS 代码被转换为字节码时,我不想不断地写入闪存,因为它可能会磨损闪存并且可能也不是很快。

我的想法可能是使用小型 JNI 库安装 tmpfs 并在其中存储 class 文件以供加载,因此实际上像以前一样将它们存储在 RAM 中 - 这对于非特权应用程序是否可行怎么办?我很感激 input/thoughts.

不,这在越狱设备上可能是可能的,但在沙盒应用程序中是不可能的。

我尝试了几种在 Android 上加载动态代码的方法,但唯一可行的方法是通过 DexClassLoader,其中 dex 文件必须存储在特权区域中。

你可以看看我的项目 Byte Buddy,我在其中实现了这样的 class 加载:https://github.com/raphw/byte-buddy/blob/master/byte-buddy-android/src/main/java/net/bytebuddy/android/AndroidClassLoadingStrategy.java