android - dalvik 找不到方法,尽管它们存在于 classes.dex 中
问题描述
在设备上启动我的 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 中
解决方案
任何被引用的方法(即被调用指令使用)都将“存在”在 dex 文件中。例如,该方法的方法 ID 列表中将有一个条目。这并不意味着该方法本身存在。
如果您查看TypedArray 的 api 文档,您会注意到 getType() 方法仅在 api 21 中添加。 api 19/20 (kitkat) 是包含 dalvik 的最后一个平台版本,因此您的设备肯定更少比 api 21,因此不会有该TypedArray.getType()
方法。
推荐阅读
- java - 如何在 java 中从 excel 应用自定义日期格式?
- typescript - Firebase 部署功能“发生意外错误”
- javascript - Javascript:仅在特定的 .html 文件上将元素附加到类
- firebase - Firebase 升级替换配置方法
- amazon-web-services - 是否可以直接访问亚马逊工作区卷?
- visual-studio-code - 你如何在 VSCode 中找到 unicode 字符?
- ruby-on-rails - 如果在注册过程中测试失败,Rails 会阻止用户帐户
- javascript - 您将如何更改此功能以检查 XY 或 YZ 而不仅仅是 XZ
- elasticsearch - 设置 OIDC 身份验证时如何在 ELK 中找到“部署菜单”
- c# - Chart C# 删除数字并添加范围