java - 如何在 aar 包中的 android 库模块中包含 google-play-services 库作为可选

标签 java android gradle android-gradle-plugin

我正在创建一个 android 库模块,它仅对 google-play-service ads 和 gcm 包有一些代码依赖。
我希望它们在为 jcenter 创建包期间标记为可选包。

以下是我希望我的 pom.xml 包含的内容 <optional>true</optional>在包创建期间。

<dependencies>
    <dependency>
      <groupId>com.google.android.gms</groupId>
      <artifactId>play-services-ads</artifactId>
      <version>[7.8,)</version>
      <scope>compile</scope>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>com.google.android.gms</groupId>
      <artifactId>play-services-gcm</artifactId>
      <version>[7.8,)</version>
      <scope>compile</scope>
      <optional>true</optional>
    </dependency>
  </dependencies>

下面是我用来从 android studio 创建我的 android 库的包。

我还希望将 source 和 javadocs jar 创建为空文件,以便我也可以将我的 repo 同步到 maven-central。为此,要在下面的脚本中更新什么?

还有这个./gradlew clean build generateRelease是我目前用来在打包脚本下运行的。
apply plugin: 'maven'
def groupId = project.PUBLISH_GROUP_ID
def artifactId = project.PUBLISH_ARTIFACT_ID
def version = project.PUBLISH_VERSION
def localReleaseDest = "${buildDir}/release/${version}"
task androidJavadocs(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    ext.androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
    classpath += files(ext.androidJar)
}
task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
    classifier = 'javadoc'
    from androidJavadocs.destinationDir
}
task androidSourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.srcDirs
}
uploadArchives {
    repositories.mavenDeployer {
        pom.groupId = groupId
        pom.artifactId = artifactId
        pom.version = version
        // Add other pom properties here if you want (developer details / licenses)
        repository(url: "file://${localReleaseDest}")
    }
}
task zipRelease(type: Zip) {
    from localReleaseDest
    destinationDir buildDir
    archiveName "release-${version}.zip"
}
task generateRelease << {
    println "Release ${version} can be found at ${localReleaseDest}/"
    println "Release ${version} zipped can be found ${buildDir}/release-${version}.zip"
}
generateRelease.dependsOn(uploadArchives)
generateRelease.dependsOn(zipRelease)
artifacts {
    archives androidSourcesJar
    archives androidJavadocsJar
}

最佳答案

在寻找答案后想出了下面这是完美的工作。

只需在上述 gradle 文件下方添加即可为 jcenter 创建包。

最后,您将在项目库模块的构建文件夹中拥有 zip 文件,其中 google-play-service ads 和 gcm 是可选的。

它将帮助您将任何 google play 服务版本与您的应用程序一起使用,而不管用于构建库的版本是什么。

def deployer = uploadArchives.repositories.mavenDeployer

[deployer]*.pom*.whenConfigured {
    pom -> pom.dependencies.find {dep -> dep.groupId == 'com.google.android.gms' && dep.artifactId == 'play-services-ads' }.optional = true
}
[deployer]*.pom*.whenConfigured {
    pom -> pom.dependencies.find {dep -> dep.groupId == 'com.google.android.gms' && dep.artifactId == 'play-services-gcm' }.optional = true
}

关于java - 如何在 aar 包中的 android 库模块中包含 google-play-services 库作为可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40029765/

相关文章:

java - 堆外缓存 DirectMemory 是否已准备好投入生产?活跃吗?

java - 如何在 NetBeans 中显示构建结果中的错误汇总表?

java - 帮助在 Android 中获取 HTML 文件

gradle - 如何将依赖项部分中的所有源jar复制到gradle中的目录

jenkins - Gradle "gradle-wrapper.properties"动态/可配置的 distributionUrl

Android gradle库项目: package extra modules and jars

java - 如何使用分类器访问 jar?

java - 应用程序级别的@SuppressWarnings注释

android - 如何获取从 onReceive() 触发的 Intent 的名称或类型

android - 清楚地识别是否在后台启用了android服务位置和gps