Skip to content

[Bug]:开启混淆后,Kotlin的data class 内部类解析失败。 #43

Closed
@rejigtian

Description

@rejigtian

框架版本【必填】

9.6

问题描述【必填】

开启混淆后,Kotlin的data class 内部类解析失败。

复现步骤【必填】

创建一个kotlin 文件
在其中定义多个data class ,并且相互有所引用,使用@SerializedName方法进行注解。
开启混淆,解析对应代码。

是否必现【必填】

项目 targetSdkVersion【必填】

33

出现问题的手机信息【必填】

全部

出现问题的安卓版本【必填】

全部

问题信息的来源渠道【必填】

自己遇到的

是部分机型还是所有机型都会出现【必答】

全部

框架最新的版本是否存在这个问题【必答】

框架文档是否提及了该问题【必答】

是否已经查阅框架文档但还未能解决的【必答】

issue 列表中是否有人曾提过类似的问题【必答】

是否已经搜索过了 issue 列表但还未能解决的【必答】

是否可以通过 Demo 来复现该问题【必答】

提供报错堆栈

2024-04-09 19:18:54.732  6374-16483 System.err              com.wepie.wespy                      W  java.lang.ClassNotFoundException: Didn't find class "com.wepie.wespy.module.party.home.PartyShareData" on path: DexPathList[[zip file "/data/app/~~UzbQn9r_moNkE7-KSr4Snw==/com.wepie.wespy-PAPtm3RmfiEAj_iMkz4ovw==/base.apk"],nativeLibraryDirectories=[/data/app/~~UzbQn9r_moNkE7-KSr4Snw==/com.wepie.wespy-PAPtm3RmfiEAj_iMkz4ovw==/lib/arm64, /data/app/~~UzbQn9r_moNkE7-KSr4Snw==/com.wepie.wespy-PAPtm3RmfiEAj_iMkz4ovw==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]
2024-04-09 19:18:54.732  6374-6374  SurfaceControl          com.wepie.wespy                      I   setExtendedRangeBrightness sc=Surface(name=com.wepie.wespy/com.wepie.wespy.module.party.home.PartyHomeActivity)/@0x25d32fc,currentBufferRatio=1.0,desiredRatio=1.0
2024-04-09 19:18:54.732  6374-16483 System.err              com.wepie.wespy                      W  	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
2024-04-09 19:18:54.732  6374-16483 System.err              com.wepie.wespy                      W  	at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
2024-04-09 19:18:54.733  6374-16483 System.err              com.wepie.wespy                      W  	at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
2024-04-09 19:18:54.733  6374-16483 System.err              com.wepie.wespy                      W  	at kotlin.reflect.jvm.internal.KDeclarationContainerImpl.parseType(KDeclarationContainerImpl.kt:266)
2024-04-09 19:18:54.733  6374-16483 System.err              com.wepie.wespy                      W  	at kotlin.reflect.jvm.internal.KDeclarationContainerImpl.loadParameterTypes(KDeclarationContainerImpl.kt:257)
2024-04-09 19:18:54.733  6374-16483 System.err              com.wepie.wespy                      W  	at kotlin.reflect.jvm.internal.KDeclarationContainerImpl.findConstructorBySignature(KDeclarationContainerImpl.kt:228)
2024-04-09 19:18:54.733  6374-16483 System.err              com.wepie.wespy                      W  	at kotlin.reflect.jvm.internal.KFunctionImpl$caller$2.invoke(KFunctionImpl.kt:67)
2024-04-09 19:18:54.733  6374-16483 System.err              com.wepie.wespy                      W  	at kotlin.reflect.jvm.internal.KFunctionImpl$caller$2.invoke(KFunctionImpl.kt:36)
2024-04-09 19:18:54.733  6374-16483 System.err              com.wepie.wespy                      W  	at kotlin.reflect.jvm.internal.ReflectProperties$LazyVal.invoke(ReflectProperties.java:62)
2024-04-09 19:18:54.733  6374-16483 System.err              com.wepie.wespy                      W  	at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:31)
2024-04-09 19:18:54.733  6374-16483 System.err              com.wepie.wespy                      W  	at kotlin.reflect.jvm.internal.KFunctionImpl.getCaller(Unknown Source:7)
2024-04-09 19:18:54.733  6374-16483 System.err              com.wepie.wespy                      W  	at kotlin.reflect.jvm.ReflectJvmMapping.getJavaMethod(ReflectJvmMapping.kt:63)
2024-04-09 19:18:54.733  6374-16483 System.err              com.wepie.wespy                      W  	at kotlin.reflect.jvm.KCallablesJvm.setAccessible(KCallablesJvm.kt:82)
2024-04-09 19:18:54.733  6374-16483 System.err              com.wepie.wespy                      W  	at com.hjq.gson.factory.constructor.KotlinDataClassDefaultValueConstructor.construct(KotlinDataClassDefaultValueConstructor.kt:29)
2024-04-09 19:18:54.733  6374-16483 System.err              com.wepie.wespy                      W  	at com.hjq.gson.factory.constructor.l.construct(ReflectCreatorConstructor.java:29)
2024-04-09 19:18:54.733  6374-16662 BLASTBufferQueue        com.wepie.wespy                      D  [VRI[PartyHomeActivity]#15](f:0,a:1) acquireNextBufferLocked size=24x24 mFrameNumber=1 applyTransaction=true mTimestamp=108821324931038(auto) mPendingTransactions.size=0 graphicBufferId=27376121544767 transform=0
2024-04-09 19:18:54.733  6374-16483 System.err              com.wepie.wespy                      W  	at com.hjq.gson.factory.b.e.read(ReflectiveTypeAdapter.java:58)
2024-04-09 19:18:54.734  6374-16483 System.err              com.wepie.wespy                      W  	at com.hjq.gson.factory.c.c$1.a(ReflectiveTypeUtils.java:110)
2024-04-09 19:18:54.734  6374-16662 VRI[PartyHomeActivity]  com.wepie.wespy                      D  Received frameCommittedCallback lastAttemptedDrawFrameNum=1 didProduceBuffer=true syncBuffer=false
2024-04-09 19:18:54.734  6374-16483 System.err              com.wepie.wespy                      W  	at com.hjq.gson.factory.b.e.read(ReflectiveTypeAdapter.java:71)
2024-04-09 19:18:54.734  6374-16483 System.err              com.wepie.wespy                      W  	at com.hjq.gson.factory.c.c$1.a(ReflectiveTypeUtils.java:110)
2024-04-09 19:18:54.734  6374-16483 System.err              com.wepie.wespy                      W  	at com.hjq.gson.factory.b.e.read(ReflectiveTypeAdapter.java:71)
2024-04-09 19:18:54.734  6374-6374  VRI[PartyHomeActivity]  com.wepie.wespy                      D  draw finished.
2024-04-09 19:18:54.734  6374-6374  VRI[PartyHomeActivity]  com.wepie.wespy                      D  reportDrawFinished
2024-04-09 19:18:54.734  6374-16483 System.err              com.wepie.wespy                      W  	at com.google.gson.Gson.fromJson(Gson.java:1227)
2024-04-09 19:18:54.734  6374-16483 System.err              com.wepie.wespy                      W  	at com.google.gson.Gson.fromJson(Gson.java:1329)
2024-04-09 19:18:54.734  6374-16483 System.err              com.wepie.wespy                      W  	at com.google.gson.Gson.fromJson(Gson.java:1300)
2024-04-09 19:18:54.734  6374-16483 System.err              com.wepie.wespy                      W  	at com.three.http.callback.DataCallback.parseResponse(DataCallback.java:74)
2024-04-09 19:18:54.734  6374-6374  ViewRootImplExtImpl     com.wepie.wespy                      D  setMaxDequeuedBufferCount: 2
2024-04-09 19:18:54.734  6374-16483 System.err              com.wepie.wespy                      W  	at com.three.http.core.HttpUtil$3.onResponse(HttpUtil.java:288)
2024-04-09 19:18:54.734  6374-16483 System.err              com.wepie.wespy                      W  	at okhttp3.RealCall$AsyncCall.execute(RealCall.java:174)
2024-04-09 19:18:54.734  6374-16483 System.err              com.wepie.wespy                      W  	at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
2024-04-09 19:18:54.734  6374-16483 System.err              com.wepie.wespy                      W  	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
2024-04-09 19:18:54.735  6374-16483 System.err              com.wepie.wespy                      W  	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
2024-04-09 19:18:54.735  6374-16483 System.err              com.wepie.wespy                      W  	at java.lang.Thread.run(Thread.java:1012)

提供截图或视频

No response

提供解决方案

堆栈中的com.wepie.wespy.module.party.home.PartyShareData是原类名,但是被混淆了。通过反编译kotlin的字节码发现里面确实有一些反射代码,所以理论上keep一下就可以。

可以通过添加混淆规则解决,但是看堆栈还是报在了sdk这里,正常java类直接这样用没什么问题,还是想知道与根本原因.
目前使用8.0版本也无该问题。

根据demo差异,发现我们并未使用kotlin的kotlin-reflect库,有空后排查一下这里。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions