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

如何阻止ProGuard混淆从JAR文件导入的Android库?

这个问题的核心在于你通过「从JAR/AAR文件导入」生成的build.gradle过于简化了——它仅仅声明了库的artifact,完全没有配置ProGuard相关的参数,所以你创建的proguard-rules.pro根本没被Gradle加载。下面给你两个可行的解决办法:

方法一:直接在主应用模块的ProGuard规则中添加保留配置(最快捷)

既然库模块的规则没被识别,不如直接把保留规则放到主app模块的混淆配置里,这样主模块的ProGuard在处理整个项目时会生效:

  • 打开你主app模块下的proguard-rules.pro文件
  • 添加这条规则:
    -keep class com.merchant.lib.** { *; }
    
  • 这条规则会强制ProGuard保留com.merchant.lib包下所有类的所有方法和字段,不会对它们进行混淆。

方法二:修改库模块的build.gradle为标准Android Library配置(更规范)

如果你希望把混淆规则和库模块绑定在一起,可以把自动生成的极简build.gradle替换成标准的Android Library配置,让它明确加载你的proguard-rules.pro:

  1. 打开库模块目录下的build.gradle,替换原有内容为:
    plugins {
        id 'com.android.library'
    }
    
    android {
        // 可以设置库的命名空间,和你的包名对应即可
        namespace 'com.merchant.lib'
        // 改成你项目使用的compileSdk版本
        compileSdk 34
    
        defaultConfig {
            // 改成你项目的minSdk版本
            minSdk 21
        }
    
        buildTypes {
            release {
                // 如果不需要混淆库本身,这里可以设为false;如果要混淆其他部分但保留指定类,设为true并绑定规则
                minifyEnabled true
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
            debug {
                minifyEnabled false
            }
        }
    }
    
    // 保留原有artifact声明,确保其他模块能正常引用这个JAR
    configurations.maybeCreate("default")
    artifacts.add("default", file("merchant-lib.jar"))
    
  2. 保存后同步Gradle,现在你的proguard-rules.pro会被库模块的构建流程正确加载,release构建时会应用你设置的保留规则。

额外验证步骤

构建release版本后,你可以通过以下方式确认规则生效:

  • 查看主模块build目录下的outputs/mapping/release/mapping.txt,搜索com.merchant.lib相关类,确认它们没有被重命名
  • 用反编译工具打开生成的APK,检查com.merchant.lib包下的类和方法是否保留了原名称

内容的提问来源于stack exchange,提问作者Sri Harsha Chilakapati

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:56:54