bytedance / ByteX

ByteX is a bytecode plugin platform based on Android Gradle Transform API and ASM. 字节码插件开发平台
Apache License 2.0
3.13k stars 462 forks source link

使用 shrink-r-plugin 遇到 java.lang.RuntimeException: R styleable class #110

Closed developerHaoz closed 3 years ago

developerHaoz commented 3 years ago

在使用 shrink-r-plugin 遇到 java.lang.RuntimeException: R styleable class,想请教下这里是需要对 R.styleable 做 keep 是么?具体的写法是怎样的呀?我是在 keepList 将报错的 R 给加了上去,发现还是有问题,感觉是姿势不对,麻烦有空解答下哈,感谢

keepList = [
        // keep android.support.constraint.R里所有id
        "android.support.constraint.R.id",
        "com.tencent.qqlive.R.id",
        "com.tencent.qqmini.sdk.launcher.R.id",
        "com.tencent.qqmini.miniganme.R.id",
        "com.tencent.qqmini.sdk.R.id",
        // keep 所有以im_e为前缀的drawable字段
        "R.drawable.im_e+",
]

Task :app_publish:transformClassesWithShrinkRFileForRelease Process init cost time = [8 ms] Process loading cache cost time = [8 ms]

java.lang.RuntimeException: R styleable class [com/tencent/qqlive/R$styleable], field [ActionBar] size check error: The size we calculated is 0, but in opcode size is -1 at com.ss.android.ugc.bytex.shrinkR.visitor.AnalyzeStyleableClassVisitor.visitFieldInsn(AnalyzeStyleableClassVisitor.java:78) at org.objectweb.asm.tree.FieldInsnNode.accept(FieldInsnNode.java:101) at org.objectweb.asm.tree.InsnList.accept(InsnList.java:162) at com.ss.android.ugc.bytex.common.visitor.CheckedInsnList.accept(CheckedInsnList.java:93) at org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:817) at com.ss.android.ugc.bytex.common.visitor.SafeMethodNode.accept(SafeMethodNode.java:26) at org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:727) at org.objectweb.asm.tree.ClassNode.accept(ClassNode.java:452) at com.ss.android.ugc.bytex.common.visitor.ClassVisitorChain.accept(ClassVisitorChain.java:65) at com.ss.android.ugc.bytex.common.processor.ClassFileAnalyzer.handle(ClassFileAnalyzer.java:102) at com.ss.android.ugc.bytex.transformer.processor.ClassFileProcessor.process(ClassFileProcessor.java:27) at com.ss.android.ugc.bytex.transformer.processor.ProcessorChain.proceed(ProcessorChain.java:30) at com.ss.android.ugc.bytex.transformer.processor.FilterFileProcessor.process(FilterFileProcessor.java:23) at com.ss.android.ugc.bytex.transformer.processor.ProcessorChain.proceed(ProcessorChain.java:30) at com.ss.android.ugc.bytex.transformer.processor.task.TraverseTask.compute(TraverseTask.java:31) at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189) at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157) java.lang.RuntimeException: R styleable class [com/tencent/qqmini/sdk/launcher/R$styleable], field [CoordinatorLayout] size check error: The size we calculated is 0, but in opcode size is -1 at com.ss.android.ugc.bytex.shrinkR.visitor.AnalyzeStyleableClassVisitor.visitFieldInsn(AnalyzeStyleableClassVisitor.java:78) at org.objectweb.asm.tree.FieldInsnNode.accept(FieldInsnNode.java:101) at org.objectweb.asm.tree.InsnList.accept(InsnList.java:162) at com.ss.android.ugc.bytex.common.visitor.CheckedInsnList.accept(CheckedInsnList.java:93) at org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:817) at com.ss.android.ugc.bytex.common.visitor.SafeMethodNode.accept(SafeMethodNode.java:26) at org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:727) at org.objectweb.asm.tree.ClassNode.accept(ClassNode.java:452) at com.ss.android.ugc.bytex.common.visitor.ClassVisitorChain.accept(ClassVisitorChain.java:65) at com.ss.android.ugc.bytex.common.processor.ClassFileAnalyzer.handle(ClassFileAnalyzer.java:102) at com.ss.android.ugc.bytex.transformer.processor.ClassFileProcessor.process(ClassFileProcessor.java:27) at com.ss.android.ugc.bytex.transformer.processor.ProcessorChain.proceed(ProcessorChain.java:30) at com.ss.android.ugc.bytex.transformer.processor.FilterFileProcessor.process(FilterFileProcessor.java:23) at com.ss.android.ugc.bytex.transformer.processor.ProcessorChain.proceed(ProcessorChain.java:30) at com.ss.android.ugc.bytex.transformer.processor.task.TraverseTask.compute(TraverseTask.java:31) at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189) at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) at java.util.concurrent.ForkJoinTask.doJoin(ForkJoinTask.java:389) at java.util.concurrent.ForkJoinTask.invokeAll(ForkJoinTask.java:851) at com.ss.android.ugc.bytex.transformer.processor.task.FileTraverseTask.compute(FileTraverseTask.java:40) at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189) at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157) java.lang.RuntimeException: R styleable class [com/tencent/qqmini/minigame/R$styleable], field [CoordinatorLayout] size check error: The size we calculated is 0, but in opcode size is -1 at com.ss.android.ugc.bytex.shrinkR.visitor.AnalyzeStyleableClassVisitor.visitFieldInsn(AnalyzeStyleableClassVisitor.java:78) at org.objectweb.asm.tree.FieldInsnNode.accept(FieldInsnNode.java:101) at org.objectweb.asm.tree.InsnList.accept(InsnList.java:162) at com.ss.android.ugc.bytex.common.visitor.CheckedInsnList.accept(CheckedInsnList.java:93) at org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:817) at com.ss.android.ugc.bytex.common.visitor.SafeMethodNode.accept(SafeMethodNode.java:26) at org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:727) at org.objectweb.asm.tree.ClassNode.accept(ClassNode.java:452) at com.ss.android.ugc.bytex.common.visitor.ClassVisitorChain.accept(ClassVisitorChain.java:65) at com.ss.android.ugc.bytex.common.processor.ClassFileAnalyzer.handle(ClassFileAnalyzer.java:102) at com.ss.android.ugc.bytex.transformer.processor.ClassFileProcessor.process(ClassFileProcessor.java:27) at com.ss.android.ugc.bytex.transformer.processor.ProcessorChain.proceed(ProcessorChain.java:30) at com.ss.android.ugc.bytex.transformer.processor.FilterFileProcessor.process(FilterFileProcessor.java:23) at com.ss.android.ugc.bytex.transformer.processor.ProcessorChain.proceed(ProcessorChain.java:30) at com.ss.android.ugc.bytex.transformer.processor.task.TraverseTask.compute(TraverseTask.java:31) at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189) at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157) java.lang.RuntimeException: R styleable class [com/tencent/qqmini/sdk/R$styleable], field [CoordinatorLayout] size check error: The size we calculated is 0, but in opcode size is -1 at com.ss.android.ugc.bytex.shrinkR.visitor.AnalyzeStyleableClassVisitor.visitFieldInsn(AnalyzeStyleableClassVisitor.java:78) at org.objectweb.asm.tree.FieldInsnNode.accept(FieldInsnNode.java:101) at org.objectweb.asm.tree.InsnList.accept(InsnList.java:162) at com.ss.android.ugc.bytex.common.visitor.CheckedInsnList.accept(CheckedInsnList.java:93) at org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:817) at com.ss.android.ugc.bytex.common.visitor.SafeMethodNode.accept(SafeMethodNode.java:26) at org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:727) at org.objectweb.asm.tree.ClassNode.accept(ClassNode.java:452) at com.ss.android.ugc.bytex.common.visitor.ClassVisitorChain.accept(ClassVisitorChain.java:65) at com.ss.android.ugc.bytex.common.processor.ClassFileAnalyzer.handle(ClassFileAnalyzer.java:102) at com.ss.android.ugc.bytex.transformer.processor.ClassFileProcessor.process(ClassFileProcessor.java:27) at com.ss.android.ugc.bytex.transformer.processor.ProcessorChain.proceed(ProcessorChain.java:30) at com.ss.android.ugc.bytex.transformer.processor.FilterFileProcessor.process(FilterFileProcessor.java:23) at com.ss.android.ugc.bytex.transformer.processor.ProcessorChain.proceed(ProcessorChain.java:30) at com.ss.android.ugc.bytex.transformer.processor.task.TraverseTask.compute(TraverseTask.java:31) at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189) at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

Task :app_publish:transformClassesWithShrinkRFileForRelease FAILED Total cost time = [5729 ms] :app_publish:transformClassesWithShrinkRFileForRelease took 6033ms ---buildFinished---

developerHaoz commented 3 years ago

问题已解决

GaoGates commented 3 years ago

问题已解决

您好,遇到了同样的问题,请问怎么解决的呢