当构建类型相同时,为什么发布构建抛出错误而不是调试?(Android gradle构建类型)
我试图弄明白为什么我不能使用Android Studio正确安装发布版本。这是我的buildTypes块:当构建类型相同时,为什么发布构建抛出错误而不是调试?(Android gradle构建类型),android,android-gradle-plugin,build.gradle,android-build-flavors,android-build-type,Android,Android Gradle Plugin,Build.gradle,Android Build Flavors,Android Build Type,我试图弄明白为什么我不能使用Android Studio正确安装发布版本。这是我的buildTypes块: buildTypes { debug { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } release { shrinkRe
buildTypes {
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
release {
shrinkResources false
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
以下是我的产品风格:
flavorDimensions "version"
productFlavors {
free {
applicationId "com.example.app.free"
dimension "version"
signingConfig signingConfigs.config
}
paid {
applicationId "com.example.app.paid"
dimension "version"
signingConfig signingConfigs.config
}
}
当我安装调试付费或免费版本时,一切都很好。一点问题也没有。当我尝试安装发布版本(付费或免费)时,我得到:
'Execution failed for task ':app:transformDexArchiveWithDexMergerForFreeRelease'. com.android.build.api.transform.TransformException: java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: ... Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes. Program type already present: com.google.android.youtube.player.YouTubeApiServiceUtil'
我的问题是:为什么重复类异常只发生在发行版期间,而发行版和调试构建类型之间的定义没有什么不同
编辑我通过删除gradle中的YouTubeplyer库依赖项解决了这个问题(b/c显然我的google YT服务实现导致创建了一个内部库,因此依赖导入的库是多余的?)。这仍然使我的问题有效。为什么调试工作正常,但发布时没有任何不同的声明?我在与另一个模块链接时遇到了同样的问题,因为我在其
汇编上添加了另一个(间接)依赖项(Protobuf模块需要从.proto
文件生成Java文件,然后应用模块才能生成其JSON模型)。似乎assembleerelease
优化了代码,根据调用位置,它可能会生成稍有不同的类
文件,而Dex合并则无法决定使用哪个类
文件。assembleedebug
生成的总是相同的(未优化)它可以合并的代码
(对于任何与Protobuf有相同问题的人,解决方法是依赖于:Protobuf:GenerateProto
,而不是:Protobuf:assembly
)我也面临着同样的问题——是否有幸找到解决方案?我想这与gradle中的依赖关系以及不同版本生成类文件的方式有关,请参见@StenSoft的回答。这很可能是调试分配了不同的类名,但发行版不是。