gradle和Android Studio中调试和发布的不同依赖关系

Met*_*ite 48 java configuration dependencies gradle android-studio

我有一个Android项目,这取决于纯Java项目.它们都依赖于另一个Java库,也在Android Studio中的多项目gradle集中.我有两个版本的库,并希望Android和Java项目在调试模式下依赖于其中一个,另一个 - 在发布中.

Android项目有可能吗?对于纯Java项目?怎么样?

ath*_*hor 58

构建类型(调试,发布或自定义)可以具有自己的依赖项.

要指定特定于构建类型的依赖项,请执行以下操作:

dependencies {
    debugCompile "mydebugdependency"
    releaseCompile "myreleasedependency"
}
Run Code Online (Sandbox Code Playgroud)

如果你的java项目和android项目都使用gradle,你可以在他们的build.gradle文件中执行上述操作.

  • 我使用`releaseCompile project(':myLib:releaseVersion')`和`debugCompile project(':myLib:debugVersion')`,但Android Studio说:`构建脚本错误,找不到支持的Gradle DSL方法:'debugCompile()'!可能的原因可能是: - 您正在使用Gradle版本,其中方法不存在 - 您没有应用提供方法的Gradle插件 - 或者构建脚本中存在错误 (2认同)
  • 不幸的是,据我从 [here](http://www.gradle.org/docs/current/userguide/java_plugin.html) 判断,java 插件根本不支持构建类型。只有 android 和 android-library 插件才支持它们。我对此感到非常难过。不幸的是,我无法将我的纯 java 项目转换为 android 库,因为另一个非 android 项目依赖于它(也在我的 gradle 下的多项目集)。我发现唯一的解决方法是创建另一个 android-library 项目,该项目引用与纯 Java 项目相同的源代码:`java.srcDirs = ['../src']` (2认同)
  • 如果我指定一个新的 buildType(即 beta),我无法执行 betaCompile“mybetadependency”,有没有办法添加它?在调试中我想使用调试版本,在测试版和发布版本中使用发布版本。那可能吗? (2认同)

tak*_*are 36

我的buildDebug依赖也被忽略了.我的设置是应用程序模块和库模块,我需要将构建类型从应用程序传播到库模块,即,当我在应用程序上编译调试类型时,我也想获得库调试类型.

如上所述,我尝试对app gradle文件上的每个构建类型都有一个特定的依赖项,但无济于事:

buildTypes {
    debug {
        debuggable true
        applicationIdSuffix ".debug"

        dependencies {
            debugCompile project(":library")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

最终我的诀窍是:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Library-Publication

因此,现在库依赖项在app gradle文件的全局依赖项范围内进行管理(照常):

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    releaseCompile project(path: ':library', configuration: 'release')
    debugCompile project(path: ':library', configuration: 'debug')
}
Run Code Online (Sandbox Code Playgroud)

并且必须将它添加到库的gradle构建文件中:

android {
    publishNonDefault true
}
Run Code Online (Sandbox Code Playgroud)

这将发布所有依赖项的构建类型.请注意,如果编译依赖项需要花费大量时间,则此解决方案可能不适合您.


yoA*_*ex5 5

您可以使用下一个模式执行此操作

build_variant_name dependency_configurations "dependency"
build_variant_name dependency_configurations项目(路径:':libName',配置:'build_variant_name of libName')

例如

dependencies {

    FreeDebugImplementation "dependency"
    PaidReleaseApi project(path: ':libName', configuration: 'release')
}
Run Code Online (Sandbox Code Playgroud)

您可以阅读有关构建变体的更多信息 - https://developer.android.com/studio/build/build-variants 依赖项配置 - https://developer.android.com/studio/build/gradle-plugin-3-0- 0-迁移#new_configurations