compileSdkVersion=28,对lambda表达式的兼容问题
Opened this issue · 4 comments
weimi-king commented
使用时发现在提升到28时,lambda不再未类生成新的 "类名+lambda"的类,改为在lambda的方法生成一个新的 "lambda&方法名" 的新方法,尴尬的是没有接口集合,不知大佬有什么好方法吗
rchaocai commented
这边刚刚试了下compileSdkVersion=28的,lambda表达试还是生成MainActivity$$Lambda$0类啊,但是你那边遇到的话,可以自己针对性反编译一下这些字节码,然后构建一套新的接口集合,我后续如果遇到的话也是这个解决思路了
weimi-king commented
应该跟我的gradle版本有关系 demo里用的是3.0.0,我使用3.2.1 就没有生成上述的类了,对应的会生成lambda的方法 “lambda$方法名$0 ” 这个方法是lambda表达式外层的方法名拼接,ASM访问该方法时我没拿到获取到该lambda表达式的特定接口。我现在在尝试使用ASM访问内部类的方法处理
weimi-king commented
还有发现LogMethodVisitor 里针对android.gradle 的 3.2.1 的lambda表达式做特殊处理的地方,只是针对methodDesc做了判断,只判断了参数和返回值,这样会导致很多情况下的误打点~
fupangzi commented
最后改了哪里啊
还有发现LogMethodVisitor 里针对android.gradle 的 3.2.1 的lambda表达式做特殊处理的地方,只是针对methodDesc做了判断,只判断了参数和返回值,这样会导致很多情况下的误打点~
最后可以了嘛~