如何在Android应用程序及其库之间共享渐变依赖关系?

如何在Android应用程序及其库之间共享渐变依赖关系?,android,gradle,android-gradle-plugin,google-play,Android,Gradle,Android Gradle Plugin,Google Play,在我的Android应用程序中,我有google play计费实现,我在build.gradle中将其定义为: 实现'com.android.billingclient:billing:1.2' 此外,我有自己创建的库,用于将一些共享代码集成到我的项目中。在该库中,我想实现GooglePlay计费实现代码。为此,我在library的build.gradle文件中定义了计费库 我使用的是gradle版本: 'com.android.tools.build:gradle:3.2.0' 是否可以选择只

在我的Android应用程序中,我有google play计费实现,我在build.gradle中将其定义为:

实现'com.android.billingclient:billing:1.2'

此外,我有自己创建的库,用于将一些共享代码集成到我的项目中。在该库中,我想实现GooglePlay计费实现代码。为此,我在library的build.gradle文件中定义了计费库

我使用的是gradle版本:

'com.android.tools.build:gradle:3.2.0'


是否可以选择只在一个位置(build.gradle)定义库并在两个位置使用它

从Gradle插件3.0.0版开始,有一种更好的方法可以做到这一点。我们可以控制每个依赖项是仅对当前模块可用,还是对当前模块和依赖它的任何模块可用。这将使我们能够轻松地在项目中跨模块共享依赖关系

下面是我们用来声明依赖项的方法:

compile 'com.android.billingclient:billing:1.2'
以下是应取代compile的新配置:

implementation 'com.android.billingclient:billing:1.2'
此依赖项仅在此modAPI中使用

api 'com.android.billingclient:billing:1.2' 
此依赖关系也将在依赖于此模块的任何构建中可用。假设有一个名为“library”的模块被“app”模块使用,我们可以使用api配置声明依赖关系应该与依赖它的任何模块共享

库模块
build.gradle

  dependencies {

        // dependencies marked 'implementation' will only be available to the current module    implementation 'com.squareup.okhttp:okhttp:2.4.0'


        // any dependencies marked 'api' will also be available to app module

api 'com.android.billingclient:billing:1.2' 

    }
    app module build.gradle:

    dependencies {

        // declare dependency on library module
        implementation project(':library')

        // only need to declare dependencies unique to app 
        implementation 'example.dependency:1.0.0'
    }
请参阅此以获取更多信息和图表。

从Gradle插件3.0.0版开始,有一种更好的方法可以做到这一点。我们可以控制每个依赖项是仅对当前模块可用,还是对当前模块和依赖它的任何模块可用。这将使我们能够轻松地在项目中跨模块共享依赖关系

下面是我们用来声明依赖项的方法:

compile 'com.android.billingclient:billing:1.2'
以下是应取代compile的新配置:

implementation 'com.android.billingclient:billing:1.2'
此依赖项仅在此modAPI中使用

api 'com.android.billingclient:billing:1.2' 
此依赖关系也将在依赖于此模块的任何构建中可用。假设有一个名为“library”的模块被“app”模块使用,我们可以使用api配置声明依赖关系应该与依赖它的任何模块共享

库模块
build.gradle

  dependencies {

        // dependencies marked 'implementation' will only be available to the current module    implementation 'com.squareup.okhttp:okhttp:2.4.0'


        // any dependencies marked 'api' will also be available to app module

api 'com.android.billingclient:billing:1.2' 

    }
    app module build.gradle:

    dependencies {

        // declare dependency on library module
        implementation project(':library')

        // only need to declare dependencies unique to app 
        implementation 'example.dependency:1.0.0'
    }
有关更多信息和图表,请参见此。

您可以在库中使用api而不是实现:
api'com.android.billingclient:billing:1.2'
连接库后,此依赖项将在您的项目中可用。如果您的库作为单独的模块位于项目中,您可以在应用程序级别使用ext变量来添加依赖项。将其标记为“api”非常有用!谢谢@p.alexey您可以在库中使用api而不是实现:
api'com.android.billingclient:billing:1.2'
连接库后,此依赖项将在您的项目中可用。如果您的库作为单独的模块位于项目中,您可以在应用程序级别使用ext变量来添加依赖项。将其标记为“api”非常有用!谢谢@p.alexey