dalvik не может найти методы, хотя они существуют в classes.dex - PullRequest
0 голосов
/ 08 мая 2019

Запуская мой android-apk на устройстве, dalvik жалуется, что не нашел некоторых методов, хотя все эти методы содержатся в classes.dex, чтобы увидеть использование apkanalyser dex пакеты .... Эти методы взяты из базы платформы android.jar

Почему далвик не может их найти?

Справочная информация: Этот apk построен с использованием инструментов командной строки без gradle. (Чтобы понять процессы в принципе) Платформа Android-25 точно 25.3.1 build_tools_version = "27.0.3"

Сообщения dalvik:

I/dalvikvm(17763): Could not find method   android.content.res.TypedArray.getType, referenced from method android.support.v7.widget.TintTypedArray.getType
W/dalvikvm(17763): VFY: unable to resolve virtual method 535: Landroid/content/res/TypedArray;.getType (I)I
D/dalvikvm(17763): VFY: replacing opcode 0x6e at 0x0008

но содержится в classes.dex:

M d 1   1   133 android.support.v7.widget.TintTypedArray int getType(int)
M r 0   1   26  android.content.res.TypedArray int getType(int)

Я не ожидаю souch-предупреждения, потому что методы перечислены в classes.dex

1 Ответ

0 голосов
/ 08 мая 2019

Любой метод, на который ссылаются (т.е. использует инструкция invoke), будет "существовать" в файле dex. например для этого метода в списке идентификаторов будет запись . Это не значит, что сам метод существует.

Если вы посмотрите документацию API для TypedArray , вы заметите, что метод getType () был добавлен только начиная с 21 API. Api 19/20 (kitkat) была последней версией платформы, которая включенный dalvik, так что ваше устройство определенно меньше, чем API 21, и поэтому не будет иметь метод TypedArray.getType().

...