Meituan-Dianping / Meituan-Dianping/Robust
当要修复有2个类同名或者混淆后同名,补丁制作失败
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 4.5k
- Forks
- 806
- PR merge metrics
- No merged PRs in 30d
Description
问题描述:当要修复有2个类同名或者混淆后同名,补丁制作失败 (如com.test.app.a.class 和 com.test.app.b.a.class),异常如下
异常类型:java.lang.RuntimeException
Robust版本:如:0.4.87
堆栈/日志:
Caused by: java.lang.RuntimeException: com.test.app.patch.aPatchControl: frozen class (cannot edit)
at javassist.ClassPool.checkNotFrozen(ClassPool.java:617)
at javassist.CtClassType.setName(CtClassType.java:338)
at javassist.ClassPool.getAndRename(ClassPool.java:408)
at com.meituan.robust.autopatch.PatchesControlFactory.createControlClass(PatchesControlFactory.java:29)
at com.meituan.robust.autopatch.PatchesControlFactory.createPatchesControl(PatchesControlFactory.java:182)
at com.meituan.robust.autopatch.PatchesControlFactory$createPatchesControl.call(Unknown Source)
at robust.gradle.plugin.AutoPatchTransform.createControlClass(AutoPatchTransform.groovy:271)
at robust.gradle.plugin.AutoPatchTransform$createControlClass$2.callCurrent(Unknown Source)
at robust.gradle.plugin.AutoPatchTransform.generatPatch(AutoPatchTransform.groovy:193)
at robust.gradle.plugin.AutoPatchTransform$generatPatch$0.callCurrent(Unknown Source)
at robust.gradle.plugin.AutoPatchTransform.autoPatch(AutoPatchTransform.groovy:138)
at robust.gradle.plugin.AutoPatchTransform$autoPatch.callCurrent(Unknown Source)
at robust.gradle.plugin.AutoPatchTransform.transform(AutoPatchTransform.groovy:97)
at com.android.build.api.transform.Transform.transform(Transform.java:288)
at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:221)
at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:217)
at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:212)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:46)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:121)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOp
erationExecutor.java:336)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOp
erationExecutor.java:328)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.ja
va:110)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.j
ava:92)
... 29 more
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with PatchesControlFactory.java, especially createControlClass and createPatchesControl, then trace the calls from AutoPatchTransform.groovy. Reproduce patch generation using the two same-named classes described in the issue and inspect Javassist's ClassPool.getAndRename/checkFrozen path. Done means patch generation handles the duplicate names without the reported frozen-class exception.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, java
- Domain
- build-system, mobile-dev
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100