在 jCenter 中分发 Android 库以在 gradle 中使用

distribute Android library in jCenter to use in gradle(在 jCenter 中分发 Android 库以在 gradle 中使用)
本文介绍了在 jCenter 中分发 Android 库以在 gradle 中使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我有一个库项目,其中包含一个仅用于库类和视图的模块.我一直在互联网上搜索如何在 jCenter 中分发它以用作 gradle 依赖项,但没有任何效果.

虽然这还没有完成,我如何在其他项目中使用这个模块?

PS:我在 Windows 10 上使用 Android Studio.

解决方案

网上的很多教程和指导已经过时或者很难理解.我自己刚刚学会了如何做到这一点,所以我添加了希望对您来说是一个快速解决方案的内容.它包括以下几点

  • 从您的 Android 库开始
  • 设置 Bintray 帐户
  • 编辑项目的 gradle 文件
  • 将您的项目上传到 Bintray
  • 将其链接到 jCenter

您要共享的库

现在您可能已经建立了一个库.为了这个示例,我在 Android Studio 中创建了一个包含一个 demo-app 应用程序模块和一个 my-library 库模块的新项目.

下面是同时使用 Project 和 Android 视图的样子:

设置 Bintray 帐户

Bintray 托管 jCenter 存储库.

将存储库命名为 maven.(不过,如果您想将多个库项目组合在一起,您可以将其命名为其他名称.如果这样做,您还需要在下面的 gradle 文件中更改 bintrayRepo 名称.)

选择 Maven 作为存储库类型.

您可以根据需要添加说明.然后点击创建.这就是我们现在在 Bintray 中需要做的所有事情.

编辑 gradle 文件

我将尽可能地进行剪切和粘贴,但不要忘记编辑必要的部分.您无需对演示应用模块的 build.gradle 文件进行任何操作,只需对项目和库的 gradle 文件进行操作即可.

项目构建.gradle

将 Bintray 和 Mavin 插件添加到您的项目 build.gradle 文件中.这是我的整个文件:

buildscript {存储库{中心()}依赖{类路径'com.android.tools.build:gradle:2.3.2'//添加这些行(将它们更新为最新版本)类路径'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'类路径'com.github.dcendents:android-maven-gradle-plugin:1.5'}}所有项目{存储库{中心()}}任务清理(类型:删除){删除 rootProject.buildDir}

上传项目到 Bintray

打开终端并转到项目的根文件夹.或者只使用 Android Studio 中的终端.

输入以下命令

./gradlew install./gradlew bintray上传

如果一切设置正确,它应该将您的库上传到 Bintray.如果失败,请谷歌解决方案.(我第一次尝试时必须更新我的 JDK.)

转到您在 Bintray 中的帐户,您应该会看到在您的存储库下输入的库.

链接到 jCenter

在您的 Bintray 库中,有一个 添加到 jCenter 按钮.

点击它并发送您的请求.如果您获得批准(需要一两天时间),那么您的库将成为 jCenter 的一部分,世界各地的开发人员只需在应用程序 build.gradlebuild.gradle 中添加一行即可将您的库添加到他们的项目中code> 依赖块.

依赖项{编译 'com.example:my-library:1.0.0'}

恭喜!

注意事项

  • 您可能想要添加 PGP 加密,尤其是当您将其链接到 Maven Central 时.(不过,jCenter 已将 Maven Central 替换为 Android Studio 中的默认设置.)请参阅 本教程 寻求帮助.但也从 Bintray 阅读此.

如何添加新版本

您最终会希望将新版本添加到您的 Bintray/jCenter 库中.请参阅此答案了解如何操作.

进一步阅读

  • 如何分发您的通过 Android Studio 中的 jCenter 和 Maven Central 拥有自己的 Android 库
  • 创建和发布 Android 库

I have a library project with a module that is just for library classes and views. I've been searching over the internet how to distribute it in jCenter to use as a gradle dependency but nothing works.

While this isn't done yet, how can I use this module in others projects?

PS: I use Android Studio on Windows 10.

解决方案

Many of the tutorials and directions online are out of date or are very hard to follow. I just learned how to do this myself, so I am adding what will hopefully be a quick solution for you. It includes the following points

  • Start with your Android library
  • Set up a Bintray account
  • Edit your project's gradle files
  • Upload your project to Bintray
  • Link it to jCenter

The library you want to share

By now you probably already have a library set up. For the sake of this example I made a new project with one demo-app application module and one my-library library module in Android Studio.

Here is what it looks like using both the Project and Android views:

Set up a Bintray account

Bintray hosts the jCenter repositories. Go to Bintray and set up a free account.

After you sign in click Add New Repository

Name the repository maven. (You can call it something else, though, if you want to group several library projects together. If you do you will also need to change the bintrayRepo name in the gradle file below.)

Chose Maven as the repository type.

You can add a description if you want. Then click Create. That's all we need to do in Bintray for now.

Edit the gradle files

I'm going to make this as cut-and-paste as possible, but don't forget to edit the necessary parts. You don't need to do anything with the demo app module's build.gradle file, only the gradle files for the project and the library.

Project build.gradle

Add the Bintray and Mavin plugins to your project build.gradle file. Here is my whole file:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.2'

        // Add these lines (update them to whatever the newest version is)
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

The newest version for Bintray is here and Maven is here.

Library build.gradle

Edit everything you need to in the ext block below.

apply plugin: 'com.android.library'

// change all of these as necessary
ext {
    bintrayRepo = 'maven'  // this is the same as whatever you called your repository in Bintray
    bintrayName = 'my-library' // your bintray package name. I am calling it the same as my library name.

    publishedGroupId = 'com.example'
    libraryName = 'my-library'
    artifact = 'my-library' // I'm calling it the same as my library name

    libraryDescription = 'An example library to make your programming life easy'

    siteUrl = 'https://github.com/example/my-library'
    gitUrl = 'https://github.com/example/my-library.git'

    libraryVersion = '1.0.0'

    developerId = 'myID' // Maven plugin uses this. I don't know if it needs to be anything special.
    developerName = 'My Name'
    developerEmail = 'myemail@example.com'

    licenseName = 'The MIT License (MIT)'
    licenseUrl = 'https://opensource.org/licenses/MIT'
    allLicenses = ["MIT"]
}

// This next section is your normal gradle settings
// There is nothing special that you need to change here
// related to Bintray. Keep scrolling down.

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    testCompile 'junit:junit:4.12'
}

// Maven section
// You shouldn't need to change anything. It just uses the
// values you set above.

apply plugin: 'com.github.dcendents.android-maven'

group = publishedGroupId // Maven Group ID for the artifact

install {
    repositories.mavenInstaller {
        // This generates POM.xml with proper parameters
        pom {
            project {
                packaging 'aar'
                groupId publishedGroupId
                artifactId artifact

                // Add your description here
                name libraryName
                description libraryDescription
                url siteUrl

                // Set your license
                licenses {
                    license {
                        name licenseName
                        url licenseUrl
                    }
                }
                developers {
                    developer {
                        id developerId
                        name developerName
                        email developerEmail
                    }
                }
                scm {
                    connection gitUrl
                    developerConnection gitUrl
                    url siteUrl

                }
            }
        }
    }
}

// Bintray section
// As long as you add bintray.user and bintray.apikey to the local.properties
// file, you shouldn't have to change anything here. The reason you 
// don't just write them here is so that they won't be publicly visible
// in GitHub or wherever your source control is.

apply plugin: 'com.jfrog.bintray'

version = libraryVersion

if (project.hasProperty("android")) { // Android libraries
    task sourcesJar(type: Jar) {
        classifier = 'sources'
        from android.sourceSets.main.java.srcDirs
    }

    task javadoc(type: Javadoc) {
        source = android.sourceSets.main.java.srcDirs
        classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
    }
} else { // Java libraries
    task sourcesJar(type: Jar, dependsOn: classes) {
        classifier = 'sources'
        from sourceSets.main.allSource
    }
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
    archives javadocJar
    archives sourcesJar
}

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())

bintray {
    user = properties.getProperty("bintray.user")
    key = properties.getProperty("bintray.apikey")

    configurations = ['archives']
    pkg {
        repo = bintrayRepo
        name = bintrayName
        desc = libraryDescription
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        licenses = allLicenses
        publish = true
        publicDownloadNumbers = true
        version {
            desc = libraryDescription
            gpg {
                // optional GPG encryption. Default is false.
                sign = false
                //passphrase = properties.getProperty("bintray.gpg.password")
            }
        }
    }
}

local.properties

The library build.gradle file above referenced some values in the local.properties file. We need to add those now. This file is located in the root of your project. It should be included in .gitignore. (If it isn't then add it.) The point of putting your username, api key, and encryption password here is so that it won't be publicly visible in version control.

## This file is automatically generated by Android Studio.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file should *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
sdk.dir=/home/yonghu/Android/Sdk

# Add these lines (but change the values according to your situation)
bintray.user=myusername
bintray.apikey=1f2598794a54553ba68859bb0bf4c31ff6e71746

There is a warning about not modifying this file but it seems to work well anyway. Here is how you get the values:

  • bintray.user: This is your Bintray username.
  • bintray.apikey: Go to Edit Profile in the Bintray menu and choose API Key. Copy it from here.

Upload project to Bintray

Open a terminal and go to your project's root folder. Or just use the terminal in Android Studio.

Enter the following commands

./gradlew install
./gradlew bintrayUpload

If everything is set up right it should upload your library to Bintray. If it fails then Google the solution. (I had to update my JDK the first time I tried.)

Go to your account in Bintray and you should see the library entered under your repository.

Link to jCenter

In your library in Bintray there is an Add to jCenter button.

Click it and send your request. If you are approved (which takes a day or two), then your library will be a part of jCenter and developers around the world can add your library to their projects simply by adding one line to the app build.gradle dependencies block.

dependencies {
    compile 'com.example:my-library:1.0.0'
}

Congratulations!

Notes

  • You may want to add PGP encryption, especially if you are linking it to Maven Central. (jCenter has replaced Maven Central as the default in Android Studio, though.) See this tutorial for help with that. But also read this from Bintray.

How to add a new version

You will eventually want to add a new version to your Bintray/jCenter library. See this answer to directions on how to do it.

Further Reading

  • How to distribute your own Android library through jCenter and Maven Central from Android Studio
  • Creating and Publishing an Android Library

这篇关于在 jCenter 中分发 Android 库以在 gradle 中使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Android release APK crash with java.lang.AssertionError: impossible in java.lang.Enum(Android 发布 APK 因 java.lang.AssertionError 崩溃:在 java.lang.Enum 中不可能)
Finished with Non Zero Exit Value 3(以非零退出值 3 结束)
On gradle:3.0.0 More than one file was found with OS independent path #39;META-INF/ASL2.0#39;(在 gradle:3.0.0 上找到多个文件,其独立于操作系统的路径为“META-INF/ASL2.0)
Android : app loading library at runtime on Lollipop but not IceCreamSandwich(Android:运行时在 Lollipop 上而不是 IceCreamSandwich 上的应用程序加载库)
buildConfigField depending on flavor + buildType(buildConfigField 取决于风味 + buildType)
How do I suppress warnings when compiling an android library with gradle?(使用 gradle 编译 android 库时如何抑制警告?)