0 голосов
 
511 просмотров
5.08.2018 / 11:41  garfild63

Замена метода getResourceAsStream в Android

Как сделать так, чтобы при вызове getClass().getResourceAsStream(path) запускался не стандартный метод, а мой метод, например, context.getAssets().open(path.substring(1)) ? Подскажите, пожалуйста.
5.08.2018 / 12:35  Aladdin
Думаю, не получится нифига. Так как getResourceAsStream(path) это метод класса Class и его нельзя модифицировать или расширять. Даже если ты сможешь изменить его байт код, удалить содержимое метода, прописать байткод context.getAssets().open(path.substring(1))
не думаю что это будет работать, так как его нужно будет перезагрузить в стандартную библиотеку, а это врядли возможно
5.08.2018 / 14:47  Aladdin
Naik, а что если в конструктор ClassLoader(ClassLoader parent) передать ClassLoader.getSystemClassLoader()? Обычно так делаю, все нормально работает )
Ответы
 
3 голоса
 
# 5.08.2018 / 14:00  Naik
На самом деле это возможно https://github.com/NaikSoftwar...l/MyClassLoader.java

Но учти, что используя свой класс лоадер у тебя все что загружено через него не сможет общаться с кодом, загруженным стандартным лоадером. Они как бы в паралельных вселенных будут работать.
5.08.2018 / 15:10  garfild63
А как твоим КлассЛоадером загружать классы?
6.08.2018 / 00:06  Naik
В том репозитории все есть. Там я загружаю dex файлы. Но может есть и другие способы, я не вникал.
Всего: 1

Реклама

Мы в соцсетях

tw tg yt gt