Android签名构建下Azure Blob Storage库Proguard混淆问题求助
问题分析
你的问题根源是R8混淆破坏了Azure Storage Blob依赖的Jackson XML序列化类结构:调试构建关闭混淆(minifyEnabled false)时类结构完整,运行正常;签名构建开启混淆后,Jackson相关类被错误裁剪/重命名,导致出现LinkageError(方法尝试覆盖final方法)。
解决方案
1. 补充Jackson与Azure的混淆规则
在app模块的proguard-rules.pro中添加以下规则,保护核心依赖类不被混淆破坏:
# 保护Jackson全系列核心类,避免R8错误处理 -keep class com.fasterxml.jackson.** { *; } -keep class com.fasterxml.jackson.databind.** { *; } -keep class com.fasterxml.jackson.dataformat.xml.** { *; } -keep class com.fasterxml.jackson.datatype.jsr310.** { *; } -keep class com.fasterxml.jackson.annotation.** { *; } # 保留Jackson类/接口的名称,防止重命名导致链接错误 -keepnames class com.fasterxml.jackson.** { *; } -keepnames interface com.fasterxml.jackson.** { *; } # 完整保护Azure Storage Blob相关类(不止core模块) -keep class com.azure.storage.** { *; } -keepnames class com.azure.storage.** { *; }
2. 确保utils模块的混淆规则正确传递
由于Azure依赖在utils模块,若utils模块开启了混淆,需在utils模块的build.gradle中配置规则传递,让app模块能识别utils的依赖保护规则:
android { buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' // 传递utils模块的混淆规则给主app模块 consumerProguardFiles 'consumer-rules.pro' } } }
同时在utils模块的consumer-rules.pro中加入和app模块一致的Jackson、Azure保护规则。
3. (可选)升级Azure Storage Blob版本
当前使用的12.14.1版本较旧,升级到最新稳定版(如12.25.0)可优化R8混淆兼容性,减少此类问题:
implementation 'com.azure:azure-storage-blob:12.25.0'
完成上述配置后,重新构建签名包并测试文件上传功能即可。
内容的提问来源于stack exchange,提问作者SaurabhG
相关产品推荐
相关产品推荐

