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

升级AS 3.1后仅Release包出现Program type already present报错

解决Android Studio 3.1升级后Release构建重复类错误「Program type already present: com.android.vending.billing.IInAppBillingService」

这个问题我帮不少开发者排查过,核心就是Release构建时重复引入了com.android.vending.billing.IInAppBillingService类,Debug模式没触发是因为两种构建类型的依赖处理规则有差异。下面是具体的排查和解决步骤:

1. 检查本地libs目录的重复jar包

  • 先打开项目的libs文件夹,看看是不是同时存在你自己通过IInAppBillingService.aidl生成的jar,又引入了包含这个类的第三方支付SDK(比如某些聚合支付库)。
  • 可以临时移除libs里疑似重复的billing相关jar,再尝试构建Release版本,如果错误消失,就说明是本地jar和其他依赖的冲突。

2. 用Gradle依赖树定位重复依赖

  • 打开终端,执行Gradle命令查看完整依赖树:
    # Mac/Linux
    ./gradlew app:dependencies
    # Windows
    gradlew.bat app:dependencies
    
  • 在输出结果里搜索com.android.vending.billing,找到所有包含这个类的依赖库。如果发现某个第三方库自带了这个类,就用exclude语法排除重复部分,比如:
    implementation('com.example.thirdparty:payment-sdk:2.0.0') {
        exclude group: 'com.android.vending', module: 'billing'
    }
    

3. 对比Debug和Release的依赖配置差异

  • 检查你的build.gradle(Module: app)文件,看看是不是Debug模式下用debugImplementation引入了某些依赖,而Release模式用implementation引入了重复的库。
  • 比如有没有类似这样的配置:
    debugImplementation files('libs/debug-billing.jar')
    implementation files('libs/release-billing.jar')
    
    如果两个jar都包含同一个类,就会导致Release构建冲突。

4. 清理构建缓存

  • 有时候Gradle的缓存会遗留旧的类文件,导致奇怪的重复问题。执行以下操作清理缓存:
    1. 执行命令:./gradlew clean
    2. 删除项目根目录的.gradle文件夹
    3. 重新同步项目并构建Release版本

为什么Debug模式没问题?

Debug构建默认会开启一些宽松的处理规则,比如允许部分重复类存在(因为Debug不做严格的代码合并和压缩),而Release模式会启用R8/D8的代码优化和合并,这时候重复类就会被检测出来并报错。

内容的提问来源于stack exchange,提问作者Stepan Maksymov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:59:11