2016-09-02 6 views
0

В течение последних шести месяцев, как моего окончательного университетского проекта, я писал эмулятор PlayStation 1 на Java, чтобы доказать, что он может быть исполненным - часть моей стратегии включает в себя создание пользовательского загрузчика классов, который импортирует байт-код, который я только что создал из массив в новый класс - фактически ядро ​​байт-кода Java-байт-байт, которое ускоряет эмулированные порядки процессора (теоретически). Все вполне возможно на Oracle JVM, и раньше делали другие.Как я могу заставить Android загружать динамически генерируемый байт-код dalvik, не записывая сначала файл?

Мой вопрос заключается, кроме того, что мне нужно будет генерировать байт-код dalvik, а не байт-код Java, похоже, что в любом случае динамическая загрузка классов в запущенное приложение для Android не требует загрузки их из файл dex. Я знаю, что подобные вещи были заданы раньше, но, поскольку я в конце концов хотел бы портировать этот эмулятор (и, если бы он был быстрее, чем его неиграбельная скорость), все равно вокруг этого? Я не хочу постоянно писать на flash, когда новый раздел кода MIPS преобразуется в байт-код, поскольку он может носить вспышку и, вероятно, тоже не очень быстро.

Возможно, я думал, что смогу установить tmpfs с помощью небольшой библиотеки JNI и хранения файлов классов, загружаемых там, поэтому, по сути, хранить их в ОЗУ по-прежнему - возможно ли это для непривилегированного приложения? Я был бы признателен за вклад людей и мысли.

ответ

1

Нет, это возможно на джейлбрейк-устройстве, но это невозможно в изолированном приложении.

Я попробовал несколько способов загрузки динамического кода на Android, но единственный возможный путь - через DexClassLoader, где файл dex должен храниться в привилегированном регионе.

Вы можете посмотреть на моем проекте Byte друзей, где я реализовал такой класс нагрузки: https://github.com/raphw/byte-buddy/blob/master/byte-buddy-android/src/main/java/net/bytebuddy/android/AndroidClassLoadingStrategy.java

+0

Спасибо, настоящий позор нет никакого способа обойти эту :-(Похоже, если я хочу портировать на Android я буду переписывать его на C++ и использовать собственный dynarec для ARM. – PhilPotter1987

Смежные вопросы