Skip to content

在OPPO的机器上,子进程会出现NoSuchMethodError #1773

@xiangtailiang

Description

@xiangtailiang

问题描述

在OPPO的机器上出现崩溃,而且只在子进程中出现,主要集中在Android 13、14、15的机器上。

java.lang.NoSuchMethodError: No static method b()Ljava/lang/String; in class La4/b; or its super classes (declaration of 'a4.b' appears in base.apk)
	at com.example.business.stat.UtStatAgent$UtStatAgentImpl.getUtPublicArgs(UtStatAgent.java:460)
	at com.example.business.stat.UtStatAgent$UtStatAgentImpl.utStatCustom(UtStatAgent.java:401)
	at com.example.business.stat.UtStatAgent.lambda$utStatCustom$11(UtStatAgent.java:153)

崩溃中提到的 b()Ljava/lang/String 是部署包中的方法:

Image

这个方法在未部署的base apk中是另外一个名称:

Image

看加载dex的情况是UtStatAgent使用了动态部署后的新dex,但依赖的a4.b这类又从base apk中寻找。

这里顺便解释一下为什么同一个方法,前后名称不一致的原因:升级AGP 7.4.2 + R8后,使用applymapping 打patch的时候,出现了很多 java.lang.AbstractMethodError 的错误,可能是R8对applymapping存在bug,尝试过一些方法无法解决,因此禁用了applymapping,缺点是打包动态部署产物体积变大。

使用的tinker版本

最早使用 1.9.14.25 存在问题,升级到v1.9.15.1 依旧。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions