webView混淆的时候的注意

本文分享了一次解决Android release包启动即崩溃的经验,通过调整混淆配置和正确处理WebView JS接口,解决了因混淆不当导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在打release包的时候出现一个问题,打开应用就崩溃,但是debug包就没有这个问题,因为刚转到AndroidStudio下面还没有熟悉,所有很自然的想到哪里配置出了问题,折腾了一个小时,实在没辙了,就请教前辈,然后就被打脸了,我的问题是这样的

    1.出现了这个的问题,怎么才能打出log尼,没有log我追踪不到这个问题
    2.debug包没有问题,release包有问题,难道是我的密码libsinger.so放错了?

前辈是这样回答的: 你如果libsinger.so没有放错,密码也对的,那只有可能是打包配置的问题了,你先把build.gradle中的buildTypes-》release-》debuggable true

照做了,打出了log,一看是出现了a(input…) 的log,一看就是混淆的问题,

你是不是用了webview的js接口?

对啊

哦,那就知道了,你可能是混淆的时候把webview也混淆了,你怎么不看混淆配置的说明,巴拉巴拉。。

我就郁闷了,混淆上面的

If your project uses WebView with JS, uncomment the following
 and specify the fully qualified class name to the JavaScript interface
 class:

结果很明显了,就是这个问题,查了一下找到了解决方案

    把注释解除,把fqcn.of.javascript.interface.for.webview换成你自己定义的那个类名(包名也必须有,如果定义的是内部类,则是cn.wj.ui.WebViewActivity$myInterface),在4.1的系统上是没有问题了,但4.2的机子上还是不行,再找找,哦,原来是4.2以上版本调用js接口需要在方法使用声明@JavascriptInterface,然后混淆时可能会弄丢该声明导致,程序无法调用js,需要继续再配置文件中添加条件,

-keepattributes *Annotation*
-keepattributes *JavascriptInterface*

混淆的实例:

-keepclassmembers class cn.xx.xx.Activity$AppAndroid {
  public *;
}

-keepattributes *Annotation*
-keepattributes *JavascriptInterface*

对技术不求甚解,一直是我的老毛病,这样的细节,如果不碰到,我是自己看不到的,被打脸也是应该的。让我先哭会。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值