0

在设备上启动我的 android-apk,dalvik 抱怨没有找到一些方法,尽管所有这些方法都包含在 classes.dex 中以查看使用 apkanalyser dex 包....这些方法来自平台基础 android.jar

为什么dalvik找不到他们?

背景:这个 apk 是使用没有 gradle 的命令行工具构建的。(基本了解流程)平台是 android-25 正好 25.3.1 build_tools_version="27.0.3"

达尔维克消息:

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)

我不期待这样的警告,因为这些方法列在 classes.dex 中

4

1 回答 1

0

任何被引用的方法(即被调用指令使用)都将“存在”在 dex 文件中。例如,该方法的方法 ID 列表中将有一个条目。这并不意味着该方法本身存在。

如果您查看TypedArray 的 api 文档,您会注意到 getType() 方法仅在 api 21 中添加。 api 19/20 (kitkat) 是包含 dalvik 的最后一个平台版本,因此您的设备肯定更少比 api 21,因此不会有该TypedArray.getType()方法。

于 2019-05-08T18:16:44.327 回答