Rou1997
@Rou1997

Android: как перехватить StackTrace от обработанного (!) NoSuchMethod-исключения, случившегося в “чужом” приложении?

Есть чужое приложение. Я его патчу, беру из него нативную библиотеку и через NativeActivity подгружаю в своем приложении, чтобы чужое приложение как бы запустилось "в контексте моего" и я мог кое-что изменить. Исходников нет, разве что декомпилированные нерабочие. Конечно же, вылетает, ведь в моей NativeActivity и вообще в моей сборке нету классов и методов, которые есть в оригинале и к котором обращается библиотека через JNI. И с каждой версией библиотеки, их всё больше и больше.
Моя задача - плавно, от старых версий к новым, сделать так, чтобы в итоге все необходимое было и приложение хотя бы не слетало при запуске.

Сначала в LogCat обнаруживались исключения NoSuchMethod от JNI. Туда шел полный StackTrace, с полным путем к методу, так что каждое исключение не составляло труда исправить, просто-напросто прилепив "заглушку".
Но в очередной раз вместо StackTrace вижу такое:

Exception thrown (Ljava/lang/NoSuchMethodError;) while throwing internal exception (Ljava/lang/NoSuchMethodError;)

Exception thrown (Ljava/lang/NoSuchMethodError;) while throwing internal exception (Ljava/lang/NoSuchMethodError;)

Exception thrown (Ljava/lang/NoSuchMethodError;) while throwing internal exception (Ljava/lang/NoSuchMethodError;)

JNI ERROR (app bug): attempt to use stale local reference 0x1

VM aborting

Что бы это значило (почему нет StackTrace, почему теперь пишет stale ведь в старых версиях работало)? И как все-таки перехватить подробную информацию?

Есть какой-нибудь отладчик на манер "глобального сниффера" всех исключений, что происходят в системе или конкретном приложении?
  • Вопрос задан
  • 530 просмотров
Решения вопроса 1
Rou1997
@Rou1997 Автор вопроса
Проблема с исключением решена (точнее, все 3 проблемы с исключениями решены).
Просто вместо Run надо Debug, затем открываем перспективу Debug, и там где-то в detailMessage (кажется, в init) будет подробное сообщение, с именем метода. Как-то так.

Все нужные методы добавил, исключений этих больше нет, но ошибку "JNI ERROR (app bug): attempt to use stale local reference 0x1" это не решило. И здесь уже дебаггер Java походу бессилен. Буду думать...
Может, поможет CheckJNI...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы