Bunny Flop
Bunny Flop
1. 之前只判断LDC会导致方法中包含LDC指令的方法内联执行被跳过,已更正为在refine()方法最后对target进行判断 2. MethodVisitor已替换为MethodNode
大佬,pull request 求看一眼 Orz
还有一个对插件的思考,const-inline不会对带有PUT_STATIC指令操作的进行优化,(上面例子中的ARG_1理论上是可以优化的,也被忽略了),从字节码的角度过滤可能成本比较大,可以把这些情况做一个扫描上报,如果优化空间较大,可以从代码规范的角度来做(把ARG_1的写法换成 private val const ARG_1 = 1)
> 因为Lambda表达式desurge生成的class被留在的host中 > 这是dynamic feature dex split的坑,解决方案是自己改R8,让lambda class正确的放在split中 活捉
除了这个问题之外,你可能还会遇到 feature module单独依赖的 library module在引用宿主资源时候,能编译过但会触发运行时崩溃。这两种问题都能通过改R文件路径来解决。 除了改为全路径外,还可以从生成完的R文件下手,有两种策略: 1. 第一种是将 feature module 里生成的所有 R.java 类都继承 base module里面的 packageName/R.java 类 2. 第二种是手动将 base module里的 packageName/R.java 文件和 feature module 目录下所有生成的R文件全部合并