使用ProGuard7.3.2混淆Cordova-android12.0.1遇ParseException错误求助
错误原因与修复方案
错误原因
ProGuard 7.3.2的语法校验比R8更严格,consumer-rules.pro第63行的规则写法不符合ProGuard的语法规范:
private static final * sProcessGlobalConfig;
ProGuard中单个*仅用于匹配类名的部分片段,不能直接用来匹配字段类型。这种写法会导致解析器无法识别,抛出"Expecting separator ';' before 'sProcessGlobalConfig'"的语法错误,而R8对该写法做了兼容,因此之前用R8时不会触发报错。
修复步骤
需要修改这条规则的语法以适配ProGuard,有两种可行方式:
方式一:使用ProGuard支持的通配符匹配任意类型
将第63行的规则修改为:
private static final ** sProcessGlobalConfig;
**是ProGuard中用来匹配任意类型(包括基本类型、引用类型)的通配符,完全覆盖原规则的意图。
方式二:指定具体字段类型
如果你明确知道sProcessGlobalConfig的类型(它是ProcessGlobalConfig的实例),也可以直接写具体类型:
private static final androidx.webkit.ProcessGlobalConfig sProcessGlobalConfig;
注意事项
由于consumer-rules.pro是构建过程中生成的中间文件,直接修改后可能会在下次构建时被覆盖。建议将修正后的规则添加到你项目自定义的ProGuard规则文件(比如proguard-rules.pro)中,确保每次构建都能应用正确的规则。
修改完成后,重新执行Release或Debug构建即可解决该解析错误。
内容的提问来源于stack exchange,提问作者Yeetjia
相关产品推荐
相关产品推荐

