美文网首页Android开发拾穗Android技术知识程序员
[Android] 使用Gradle发布项目到JCenter

[Android] 使用Gradle发布项目到JCenter

作者: wuzhen | 来源:发表于2016-05-10 09:33 被阅读130次

    IDE:
    Android Studio 2.0

    dependencies:
    com.android.tools.build:gradle:2.0.0
    com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0
    com.github.dcendents:android-maven-gradle-plugin:1.3

    一、申请Bintray账号

    先到 Bintray 注册一个账号,也可以使用 GitHub 等账号登录。

    账号登录后,点击账号名称进入个人页面

    Profile.png

    然后点击Edit,进入编辑页面

    Profile Edit.png

    接着点击 API key

    Edit API Key.png

    获取到 API KEY,记录下来

    API Key.png

    二、配置Bintray的账号信息

    在项目根目录的 local.properties 文件中添加 Bintray 的账号信息:

    bintray.user=用户名
    bintray.apikey=第一步获取到的API key
    

    三、声明插件依赖

    在项目的 build.gradle 中声明 maven 和 bintray 的插件依赖:

    buildscript {
        dependencies {
            classpath 'com.android.tools.build:gradle:2.0.0'
            // maven、bintray
            classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
            classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'
        }
    }
    

    四、配置Module

    配置要发布的 Module 的 build.gradle 文件,最终的文件:

    apply plugin: 'com.android.library'
    // 配置插件
    apply plugin: 'com.github.dcendents.android-maven'
    apply plugin: 'com.jfrog.bintray'
    
    android {
        compileSdkVersion 23
        buildToolsVersion "23.0.3"
        defaultConfig {
            minSdkVersion 11
            targetSdkVersion 23
            versionCode 1
            versionName "1.0.0"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'),
                        'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
    }
    
    // 设置项目的信息,需要根据需要自行修改下面的信息
    ext {
        bintrayRepo = 'maven' // bintray的仓库名
        bintrayName = 'projectName' // bintray上的项目名
    
        libraryGroupId = 'GroupId' // JCenter上的GroupId
        libraryVersion = '1.0.0' // 版本号
        libraryPackaging = 'aar' // 上传包的类型
        libraryDescription = 'something' // 项目描述
        siteUrl = 'projectUrl' // 项目的主页
        gitUrl = 'gitUrl' // Git仓库的地址
        issuesUrl = 'issuesUrl' // issues的URL地址
    
        // 配置开发者的信息
        developerId = 'Id' // ID
        developerName = 'Name' // 开发者名称
        developerEmail = 'Email' // 开发者邮箱
    
        // 设置开源证书的信息
        licenseName = 'The Apache Software License, Version 2.0'
        licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
        allLicenses = ["Apache-2.0"]
    }
    
    group = libraryGroupId // 指定项目的GroupId
    version = libraryVersion // 指定项目的版本号
    
    install {
        repositories.mavenInstaller {
            // 生成pom.xml的配置信息
            pom.project {
                packaging libraryPackaging // 打包的类型
                name bintrayName // 项目的名称
                description libraryDescription // 项目的描述
                url siteUrl // 项目的主页
    
                // 配置开源证书信息
                licenses {
                    license {
                        name licenseName
                        url licenseUrl
                    }
                }
    
                // 配置开发者信息
                developers {
                    developer {
                        id developerId
                        name developerName
                        email developerEmail
                    }
                }
    
                // 软件配置管理信息
                scm {
                    connection gitUrl
                    developerConnection gitUrl
                    url siteUrl
                }
            }
        }
    }
    
    // 上传源码的task
    task sourcesJar(type: Jar) {
        from android.sourceSets.main.java.srcDirs
        classifier = 'sources'
    }
    artifacts {
        archives sourcesJar
    }
    
    // 上传Javadoc
    android.libraryVariants.all { variant ->
        println variant.javaCompile.classpath.files
        if (variant.name == 'release') { // 我们只需 release 的 javadoc
            task("generate${variant.name.capitalize()}Javadoc", type: Javadoc) {
                source = variant.javaCompile.source
                classpath = files(variant.javaCompile.classpath.files,
                        project.android.getBootClasspath())
                options {
                    encoding "UTF-8"
                    charSet 'UTF-8'
                    author true
                    version true
                    title bintrayName
                    links "http://docs.oracle.com/javase/7/docs/api/"
                    linksOffline "http://d.android.com/reference",
                            "${android.sdkDirectory}/docs/reference"
                }
                exclude '**/BuildConfig.java'
                exclude '**/R.java'
            }
            task("javadoc${variant.name.capitalize()}Jar", type: Jar,
                    dependsOn: "generate${variant.name.capitalize()}Javadoc") {
                classifier = 'javadoc'
                from tasks.getByName("generate${variant.name.capitalize()}Javadoc")
                        .destinationDir
            }
            artifacts {
                archives tasks.getByName("javadoc${variant.name.capitalize()}Jar")
            }
        }
    }
    
    // 读取配置的bintray用户的信息
    Properties properties = new Properties()
    properties.load(project.rootProject.file('local.properties')
            .newDataInputStream())
    // 配置bintray的信息
    bintray {
        // 读取 local.properties 的 bintray.user
        user = properties.getProperty("bintray.user")
        // 读取 local.properties 的 bintray.apikey
        key = properties.getProperty("bintray.apikey")
        configurations = ['archives']
        pkg {
            repo = bintrayRepo
            name = bintrayName
            desc = libraryDescription
            websiteUrl = siteUrl
            vcsUrl = gitUrl
            issueTrackerUrl = issuesUrl
            licenses = allLicenses
            labels = ['android'] // 设置标签
            publish = true
            publicDownloadNumbers = true
        }
    }
    

    配置完成后调用 Gradle 命令上传即可:

    gradle bintrayUpload
    

    五、同步到JCenter

    打开个人页面,找到刚刚上传的项目

    Profile Maven Repository.png

    点击后打开刚刚上传的项目,点击右下角的 “Add to JCenter”,申请后等待审核通过

    Add to JCenter.png

    注:

    1. 上传到 Bintray 后使用 Module 的名称作为项目的 ArtifactId,即使在 build.gradle 中设置了 ArtifactId 也无效。

    参考

    1. Android 项目打包到 JCenter 的坑
    2. 库上传JCenter教程
    3. 如何使用Android Studio把自己的Android library分发到jCenter和Maven Central
    4. Android 项目打包到 JCenter 的坑

    相关文章

      网友评论

        本文标题:[Android] 使用Gradle发布项目到JCenter

        本文链接:https://www.haomeiwen.com/subject/zldjrttx.html