当前位置: 首页 > 知识库问答 >
问题:

基于Gradle多味库的单味模块

吕俊美
2023-03-14

我正在开发一款多味应用程序。(下面是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.
[...]

共有3个答案

匡晟
2023-03-14

好的,多亏了@ramin eftekhari,我才得以成功

https://github.com/luxsypher/gradle-flavor-dependency

戈睿识
2023-03-14

从您的问题中,我得到的是您试图将库跟踪器作为依赖项添加到功能模块中。在您的功能中。gradle尝试以下操作:

dependencies {
    implementation project(':tracker')
}

在Gradle 3.0中,有两个新的关键字implementationapicompile关键字已弃用。您可以使用实现作为默认值。使用api,尤其是当您的项目(模块)中存在可传递的依赖项时-

好的图片说明:

这是一篇很好的文章,讲述了实现api关键字之间的区别:Android Gradle插件3.0中的实现与Api

官方文档解释:

以下是官方文档中使用新依赖项配置的简要说明:

>

  • 实施:

    当您的模块配置实现依赖项时,它会让Gradle知道该模块不希望在编译时将依赖项泄漏给其他模块。也就是说,依赖项仅在运行时对其他模块可用。使用此依赖项配置而不是api或编译可以显著提高构建时间,因为它减少了构建系统需要重新编译的项目数量。例如,如果一个实现依赖项更改了它的API,Gradle只重新编译该依赖项和直接依赖它的模块。大多数应用程序和测试模块都应使用此配置。

    应用程序编程接口:

    当一个模块包含api依赖项时,它让Gradle知道该模块想要将该依赖项传递导出到其他模块,以便在运行时和编译时都可以使用。此配置的行为就像编译(现在已被弃用),并且通常应该仅在库模块中使用此配置。这是因为,如果api依赖项更改了它的外部API,Gradle会在编译时重新编译所有可以访问该依赖项的模块。因此,拥有大量api依赖关系可以显著增加构建时间。除非您想将依赖项的API公开给单独的测试模块,否则应用模块应该使用实现依赖项。

    希望这能有所帮助。

    最新消息

    为了完整性起见,gradle 4.1似乎存在一个已知的问题。使用版本4.3会有所帮助。多亏了达米恩。

  • 归松
    2023-03-14

    我的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 我的的重要部分如下所示: