Closed
Description
框架版本【必填】
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库,有空后排查一下这里。