You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 09:30:40