Closed malinkang closed 1 year ago
插件添加implementation 'com.google.android.gms:play-services-ads:22.0.0'
可以复现问题。
类com.google.android.gms.internal.ads.zzceh
反编译片段:
public final boolean onCreateWindow(android.webkit.WebView, boolean, boolean, android.os.Message);
descriptor: (Landroid/webkit/WebView;ZZLandroid/os/Message;)Z
flags: (0x0011) ACC_PUBLIC, ACC_FINAL
Code:
stack=2, locals=5, args_size=5
0: aload 4
2: getfield #236 // Field android/os/Message.obj:Ljava/lang/Object;
5: checkcast #30 // class android/webkit/WebView$WebViewTransport
8: astore_2
9: new #32 // class android/webkit/WebView
12: astore_3
13: aload_3
14: aload_1
15: invokevirtual #237 // Method android/webkit/WebView.getContext:()Landroid/content/Context;
18: invokespecial #240 // Method android/webkit/WebView."<init>":(Landroid/content/Context;)V
21: aload_0
其中9: new
下一行不是dup
,不符合 https://github.com/jboss-javassist/javassist/blob/700be6f6f9546e8af049b1a763ce27f1fde5955d/src/main/javassist/convert/TransformNewClass.java#L59 的预期。
错误在哪边还不确定。
根据:https://stackoverflow.com/a/8594701/11616914
可知dup是为了接下来调用init方法和areturn时返回值。
但我们这里遇到的代码并不需要把webview返回。通过测试发现,我们的javac确实会不管后面用不用这个new出来的对象,都跟上一个dup指令。但看起来理论上来说确实不是必要的。
也许这个有问题的类就是proguard等工具把这个无用的dup给优化掉了。那么问题就是javassist实现错误了。
集成Admob sdk报错