我正在开发一款多味应用程序
。(下面是gradle文件)
它使用一个名为tracker
的库,遵循相同的风格内部
和外部
现在,对于棘手的部分,有一个名为功能
的新模块,这个模块没有味道,但它需要跟踪器
作为依赖项
app.gradle:
android {
buildTypes {
debug {
}
release {
}
}
flavorDimensions "target"
productFlavors {
internal {
dimension "target"
}
external {
dimension "target"
}
}
}
追踪器。格拉德尔:
android {
publishNonDefault true
buildTypes {
release {
}
debug {
}
}
flavorDimensions 'target'
productFlavors {
internal {
dimension "target"
}
external {
dimension "target"
}
}
}
特色格拉德尔:
android {
compileSdkVersion rootProject.ext.compileSdkVersion
defaultConfig {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath false
}
}
}
}
}
dependencies {
implementation(
[...]
project(':tracker')
)
}
以下是我尝试渐变同步时出现的错误
:
Unable to resolve dependency for ':feature@debug/compileClasspath': Could not resolve project :tracker.
Could not resolve project :tracker.
Required by:
project :feature
> Project :feature declares a dependency from configuration 'implementation' to configuration 'externalRelease' which is not declared in the descriptor for project :tracker.
Unable to resolve dependency for ':feature@debugAndroidTest/compileClasspath': Could not resolve project :tracker.
Could not resolve project :tracker.
[...]
好的,多亏了@ramin eftekhari,我才得以成功
https://github.com/luxsypher/gradle-flavor-dependency
从您的问题中,我得到的是您试图将库跟踪器
作为依赖项添加到功能
模块中。在您的功能中。gradle
尝试以下操作:
dependencies {
implementation project(':tracker')
}
在Gradle 3.0中,有两个新的关键字implementation
和api
compile
关键字已弃用。您可以使用实现
作为默认值。使用api
,尤其是当您的项目(模块)中存在可传递的依赖项时-
好的图片说明:
这是一篇很好的文章,讲述了实现
和api
关键字之间的区别:Android Gradle插件3.0中的实现与Api
官方文档解释:
以下是官方文档中使用新依赖项配置的简要说明:
>
实施:
当您的模块配置实现依赖项时,它会让Gradle知道该模块不希望在编译时将依赖项泄漏给其他模块。也就是说,依赖项仅在运行时对其他模块可用。使用此依赖项配置而不是api或编译可以显著提高构建时间,因为它减少了构建系统需要重新编译的项目数量。例如,如果一个实现依赖项更改了它的API,Gradle只重新编译该依赖项和直接依赖它的模块。大多数应用程序和测试模块都应使用此配置。
应用程序编程接口:
当一个模块包含api依赖项时,它让Gradle知道该模块想要将该依赖项传递导出到其他模块,以便在运行时和编译时都可以使用。此配置的行为就像编译(现在已被弃用),并且通常应该仅在库模块中使用此配置。这是因为,如果api依赖项更改了它的外部API,Gradle会在编译时重新编译所有可以访问该依赖项的模块。因此,拥有大量api依赖关系可以显著增加构建时间。除非您想将依赖项的API公开给单独的测试模块,否则应用模块应该使用实现依赖项。
希望这能有所帮助。
最新消息
为了完整性起见,gradle 4.1似乎存在一个已知的问题。使用版本4.3会有所帮助。多亏了达米恩。
我的gradle版本是4.4。
在文档中,Android开发者和Android插件DSL参考显示,应该添加以下代码。
missingDimensionStrategy 'external'
missingDimensionStrategy 'target'
Android开发者链接图片
Android Plugin DSL参考图片
但这对我不起作用。最后,我在feature.gradle.中添加了以下代码
flavorDimensions 'target'
productFlavors {
internal {
dimension "target"
}
}
我的应用程序有几种不同的口味,适用于几个市场的应用内计费系统。 问题是android库能有产品风味吗? 如果是的话,我如何在应用程序的不同口味中包含不同的口味? 我找了很多,但我没有找到任何关于这个场景的东西。我在http://tools.android.com/tech-docs/new-build-system/user-guide中找到的唯一接近的内容是: 我改变了配置到不同的东西,但它没有
我正在使用Android Studio 1.0.1 我试图使用具有相同名称(和相同的入口点,只是内部代码不同)的特定于味道的JNI库。 我得到了两种风格的“full”和“lite”,目前仍然指向相同的jni库“my lib.so”。 我有以下项目树: 我想为每种口味都有一个不同的“my-lib.so”库。口味之间的所有变化都是库内部的。 我试着做一些像这样的事情: 但这会引发以下错误消息: 错误:
我正在尝试将我的项目迁移到gradle。我的一个项目有多种产品风格,并且每个项目都必须在其发布版本中使用不同的进行签名。所以这是我到目前为止尝试的: 当我运行时,我得到一个和以下错误消息: 所以我假设。*Gradle脚本的一部分不是放置代码签名配置的正确位置。
我有一个Android应用程序,我已经能够用Gradle成功构建(使用Gradle0.7)。现在,我想设置Gradle来构建两个单独的.apk,一个只有ARM本机库,另一个只有Intel x86本机库。我尝试使用productFlavors,如下例所示: How to configure NDK with Android Gradle Plugin0.7 但是,在我的Gradle脚本中指定了pro
问题内容: 任何人都可以向我解释,除了主要的和特定于风味的java / src目录之外,我如何能更多地用于每种风味?我的目标是拥有不只一种口味但并非全部使用的目录。 例如,我有3种口味:A1,A2和B。 所有忙都使用main / src(默认的主src目录) A1使用A1 / src(默认的src目录) A2使用A2 / src(默认的src目录) B使用B / src(默认的src目录) A1和
null 我尝试过的相关帖子: 从单个生成类型生成使用不同密钥签名的多个生成 这需要为每种口味配置 它似乎没有使用我自定义的 null null 我的的重要部分如下所示: