在库模块中使用 Google Play Services Gradle 插件

Posted

技术标签:

【中文标题】在库模块中使用 Google Play Services Gradle 插件【英文标题】:Use Google Play Services Gradle plugin in library module 【发布时间】:2019-10-26 23:01:08 【问题描述】:

我正在将我的单体应用程序重构为多模块应用程序,但我在使用 Google Play Services gradle 插件时遇到了困难。我使用一些播放服务功能,如地图或谷歌登录,它们需要一些由 GPS gradle 插件方便地生成到 android 资源的 api 密钥或客户端 ID,我可以在我的代码中使用它们。但是,如果我把这条神奇的线放在一边

apply plugin: 'com.google.gms.google-services'

到我的base 模块build.gradle 的底部我得到一个神秘的错误


FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':base'.
> java.lang.NullPointerException

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

CONFIGURE FAILED in 0s
Cause: java.lang.NullPointerException

我已经阅读了一些线程,我必须将此插件应用于***应用程序模块。但是如何在我的功能/库模块中访问插件提供的这些生成的资源?

【问题讨论】:

请看我更新的答案。我不是 100% 确定问题是什么,但很乐意提供帮助。 【参考方案1】:

在您的库模块中,您应该添加 google play 服务依赖项:

   dependencies 
           api 'com.google.android.gms:play-services-auth:16.0.1'
           api 'com.google.android.gms:play-services-games:17.0.0'
        

发布后,您在 app 模块中添加依赖项:

 dependencies 
       api project(':yourlibrary')
    

在app模块底部添加插件

apply plugin: 'com.google.gms.google-services'

确保 settings.gradle 也有你的库:

include ':app', ':yourlibrary'

并且还在你的项目级gradle中添加依赖

   classpath 'com.google.gms:google-services:4.2.0'

确保您拥有 google-services.json 在 app/ 目录中(Android Studio 应用模块的根目录)

我相信这应该可行。通过这种方式,您可以从您的库模块访问您应用中的 google play 服务。

另外,添加

dependencies 
   api project(':yourlibrary')

到任何其他需要播放服务的模块,如果它们不依赖于应用程序模块。

如果这不起作用,您能否向我简要介绍一下您的用例?

【讨论】:

以上是关于在库模块中使用 Google Play Services Gradle 插件的主要内容,如果未能解决你的问题,请参考以下文章

带有 2 个模块的 Android TV 应用,在 Google Play 中排除

Google Play 新增安全模块,让应用对数据的使用更透明

google play支付如何用php验证订单完成的合法性

play-services-vision 库中没有 Frame.java

在库模块中使用 Kotlin,而不在 app 模块中使用它

Kotlin Android Extensions 在库类型模块中不起作用