Заменить класс Java API пользовательским классом? - PullRequest
1 голос
/ 17 марта 2011

У меня есть программа Android с закрытым исходным кодом, которая использует класс android.opengl.GLSurfaceView.

Мне нужно внедрить некоторый код Java (внедрение уже сделано), который заменяет всю связанную с android.opengl.GLSurfaceView обработку моим собственным классом GLSurfaceView (перехват) без изменений в исходном коде (без исходных кодов, дизассемблирование не допускается). *

По сути, это своего рода перехват API с точки зрения программирования на Win32 C, но в Java / Android.

Ответы [ 3 ]

1 голос
/ 17 марта 2011

Вы не можете этого сделать, и причина, по которой вы не можете этого сделать, заключается в том, что это будет серьезным нарушением безопасности. Например, если бы существовал механизм для этого, вы могли бы переопределить классы, которые не позволяют загруженному приложению Java, скажем, устанавливать вредоносные программы на ваш компьютер.

Вы можете сделать это, изменив байт-код вашей установки, чтобы GLSurfaceView делал что-то другое, или изменив байт-код приложения, чтобы он вызывал замещающий класс вместо GLSurfaceView.

0 голосов
/ 17 марта 2011

Вы не сможете сделать это с помощью отражения Java.

Лучше всего использовать механизм перезаписи байт-кода для изменения байт-кода программы с закрытым исходным кодом.Если бы вы использовали «настоящую Java», я бы предложил BCEL.Вам нужно разобраться с кодом Davlik, и я не знаю, существует ли аналог Davis для BCEL.

Это предполагает, что у вас есть доступ к байт-кодам этого приложения с закрытым исходным кодом в форме, которая позволяет вамвозиться с ними, не нарушая правил безопасности.Например, если приложение было подписано, то изменение байт-кодов приведет к недействительности подписи.

И сделать это без нарушения ограничений на реверс-инжиниринг - еще одна трудность.нужно отказаться от этой идеи.

0 голосов
/ 17 марта 2011

Если класс, который вы хотите внедрить в код, не является конечным классом, вы можете расширить класс и переопределить нужные вам методы (опять же, только если метод не является конечным методом)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...