【问题标题】:dalvik couldnt found methods, although they exist in classes.dexdalvik 找不到方法,尽管它们存在于 classes.dex 中
【发布时间】:2019-09-26 10:33:50
【问题描述】:

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

为什么dalvik找不到他们?

背景: 这个 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)

我不希望出现这样的警告,因为这些方法列在 classes.dex 中

【问题讨论】:

    标签: android methods dalvik methodnotfound


    【解决方案1】:

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

    如果您查看api documentation for TypedArray,您会注意到 getType() 方法仅在 api 21 中添加。api 19/20 (kitkat) 是包含 dalvik 的最后一个平台版本,因此您的设备是绝对小于 api 21,因此不会有 TypedArray.getType() 方法。

    【讨论】:

      猜你喜欢
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 2016-08-21
      相关资源
      最近更新 更多