Cordova Android正式包Ajax请求失效(调试包、iOS端均正常)
可尝试的解决方向
- 检查Release构建的混淆规则配置
该问题仅出现在Release包,大概率是ProGuard/R8压缩混淆时误删了Ajax请求相关的Cordova插件类/方法。在你的proguard-rules.pro文件中添加以下保留规则:# 保留Cordova核心类 -keep class org.apache.cordova.** { *; } # 保留你所用的Ajax/网络请求插件对应的类,比如如果用的是cordova-plugin-advanced-http: -keep class com.communote.plugin.httpplugin.** { *; } # 保留JS接口对应的注解类 -keepclassmembers class * { @org.apache.cordova.JavascriptInterface <methods>; } -keepattributes JavascriptInterface - 修复Let's Encrypt证书在旧安卓系统的信任链问题
Android 7.0以下系统默认不信任Let's Encrypt的ISRG Root X1根证书,你测试用的Android 6.0.1正好在这个区间。虽然你验证过证书有效,但旧系统识别不到新根证书,Release包下不会走调试阶段的宽松证书校验规则。解决方案:- 把ISRG Root X1证书内置到APP的网络安全配置中
- 或者在后端证书链配置中兼容旧根证书,不要只返回默认的短链
- 检查Cordova WebView的设置差异
部分Cordova版本在Release构建时会默认开启WebView的安全限制,你可以在主Activity的onCreate方法中手动添加WebView配置:WebView webView = (WebView) appView.getView(); WebSettings webSettings = webView.getSettings(); webSettings.setDomStorageEnabled(true); webSettings.setAllowFileAccess(true); webSettings.setJavaScriptEnabled(true); // 关闭Release模式下默认开启的混合内容限制 webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); - 排查证书锁定相关配置
检查你的项目中有没有配置证书锁定(Certificate Pinning)的相关代码或者插件,Release包如果开启了证书锁定但配置的证书指纹不对,也会直接拦截HTTPS请求。 - 临时开启Release包的调试权限定位问题
在AndroidManifest的application节点添加android:debuggable="true",打Release包后连接Chrome调试工具看Network面板的请求具体报错信息,比盲调效率高很多。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

