记一次DCloud和穿山甲广告的问题

因为项目包体要求,采用DCloud中的wap2app模块,而广告采用的是穿山甲。整个过程还算顺利。但是最后在编译release
包的时候,出现了crash

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
06-04 18:46:38.681 23320 23320 E AndroidRuntime: FATAL EXCEPTION: main
06-04 18:46:38.681 23320 23320 E AndroidRuntime: Process: com.orangesky.fish, PID: 23320
06-04 18:46:38.681 23320 23320 E AndroidRuntime: java.lang.VerifyError: Verifier rejected class com.androidquery.callback.DrawableAjaxCallback: android.graphics.drawable.Drawable com.androidquery.callback.DrawableAjaxCallback.getResizedImage(java.lang.String, byte[], int, boolean, int, boolean) failed to verify: android.graphics.drawable.Drawable com.androidquery.callback.DrawableAjaxCallback.getResizedImage(java.lang.String, byte[], int, boolean, int, boolean): [0x10] register v1 has type Conflict but expected Precise Reference: java.lang.String (declaration of 'com.androidquery.callback.DrawableAjaxCallback' appears in /data/app/com.orangesky.fish-VlxMWgN4XJz0OljJrLz9vQ==/base.apk)
06-04 18:46:38.681 23320 23320 E AndroidRuntime: at com.androidquery.callback.DrawableAjaxCallback.async(Unknown Source:0)
06-04 18:46:38.681 23320 23320 E AndroidRuntime: at com.androidquery.callback.AQuery2.a(AQuery2.java:64)
06-04 18:46:38.681 23320 23320 E AndroidRuntime: at com.androidquery.callback.AQuery2.image(AQuery2.java:19)
06-04 18:46:38.681 23320 23320 E AndroidRuntime: at com.androidquery.AbstractAQuery.image(AbstractAQuery.java:775)
06-04 18:46:38.681 23320 23320 E AndroidRuntime: at com.androidquery.AbstractAQuery.image(AbstractAQuery.java:755)
06-04 18:46:38.681 23320 23320 E AndroidRuntime: at com.androidquery.AbstractAQuery.image(AbstractAQuery.java:733)
06-04 18:46:38.681 23320 23320 E AndroidRuntime: at com.androidquery.AbstractAQuery.image(AbstractAQuery.java:701)
06-04 18:46:38.681 23320 23320 E AndroidRuntime: at com.bytedance.sdk.openadsdk.activity.TTRewardVideoActivity.a(TTRewardVideoActivity.java:194)
06-04 18:46:38.681 23320 23320 E AndroidRuntime: at com.bytedance.sdk.openadsdk.activity.TTRewardVideoActivity.onCreate(TTRewardVideoActivity.java:80)
06-04 18:46:38.681 23320 23320 E AndroidRuntime: at android.app.Activity.performCreate(Activity.java:7084)
06-04 18:46:38.681 23320 23320 E AndroidRuntime: at android.app.Activity.performCreate(Activity.java:7075)
06-04 18:46:38.681 23320 23320 E AndroidRuntime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1215)
06-04 18:46:38.681 23320 23320 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2767)
06-04 18:46:38.681 23320 23320 E AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
06-04 18:46:38.681 23320 23320 E AndroidRuntime: at android.app.ActivityThread.-wrap11(Unknown Source:0)
06-04 18:46:38.681 23320 23320 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1613)
06-04 18:46:38.681 23320 23320 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:106)
06-04 18:46:38.681 23320 23320 E AndroidRuntime: at android.os.Looper.loop(Looper.java:176)
06-04 18:46:38.681 23320 23320 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6635)
06-04 18:46:38.681 23320 23320 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
06-04 18:46:38.681 23320 23320 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
06-04 18:46:38.681 23320 23320 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)

通过关键信息java.lang.VerifyError,查阅互联网的一些博客,解决方法有很多,感觉应该是一个简单的问题。我在这个项目
中的表现是

  • debug包没有问题,release包在部分机器上有问题

  • release包在android 7.1.1中crash, 但是在android 9.0中没有问题

  • debug和release包的混淆和配置都一样

  • 穿山甲提供的demo在相同的环境下,没有crash


网络中给的此类问题的解决方法:

  • clean project & delete build finder & rebuild project

  • clean project and Invalidate Caches/Restart menu

  • 修改配置

    go to “File” > “Settings” > “Build, Execution, Deployment” > “Instant Run”,
    uncheck the box “Enable Instant Run…” and click “OK” button

  • 修改proguard

  • 换电脑编译


这个问题的主要意思是类是没有错误但是版本不统一

最会检查到穿山甲中依赖gif库, 版本为1.2.6

但是DCloud 5plus+中也依赖这个gif库, 但是版本为1.2.15

差距很大。

现在这个阶段的解决方法,只能出debug包,静等他们更新依赖库