欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Android Library 发布到 Jcenter 库

程序员文章站 2022-03-03 20:09:01
将 Android Library 发布到 Jcenter 库专注于Android开发,分享经验总结,欢迎加入Android Studio , build.gradle 集成依赖包,方便快捷,只需一行代码就可以搞定,如下:implementation “com.squareup.retrofit2:retrofit:2.9.0”打开项目的build.gradle,能看到如下配置repositories { google() jcenter()mavenCentr...

将 Android Library 发布到 Jcenter 库

专注于Android开发,分享经验总结,欢迎加入

Android Library 发布到 Jcenter 库

Android Studio , build.gradle 集成依赖包,方便快捷,只需一行代码就可以搞定,如下:

implementation “com.squareup.retrofit2:retrofit:2.9.0”

打开项目的build.gradle,能看到如下配置

repositories {
    google()
    jcenter()
	mavenCentral()
}

Android 中依赖库有 google , maven , jcenter , 今天给大家讲讲如何将自己的项目发布到 jcenter 上

Android Library 发布到 Jcenter 库

点击去注册

Android Library 发布到 Jcenter 库

账号注册完成后进去新建一个 repository

Android Library 发布到 Jcenter 库

新建 repository

Android Library 发布到 Jcenter 库

  • 2.新建项目将 Android Studio 项目发布到 Jcenter 库中

借助于: https://github.com/bintray/gradle-bintray-plugin

*	首先在项目的 build.gradle 中配置如下

dependencies 中加入

classpath “com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5”

dependencies {
    classpath "com.android.tools.build:gradle:4.0.0"
    // Gradle Bintray Plugin
    classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5"
}

再加入

allprojects {
    tasks.withType(Javadoc) {
        options.addStringOption('Xdoclint:none', '-quiet')
        options.addStringOption('encoding', 'UTF-8')
    }
}

allprojects {
    tasks.withType(Javadoc) {
        options {
            encoding "UTF-8"
            charSet 'UTF-8'
            links "http://docs.oracle.com/javase/7/docs/api"
        }
    }
}

项目 build.gradle 完整配置

apply from: "config.gradle"
buildscript {
    repositories {
        google()
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.0.0"
        // Gradle Bintray Plugin
        classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5"

    }
}

allprojects {
    repositories {
        google()
        jcenter()
        mavenCentral()
    }
}

allprojects {
    tasks.withType(Javadoc) {
        options.addStringOption('Xdoclint:none', '-quiet')
        options.addStringOption('encoding', 'UTF-8')
    }
}

allprojects {
    tasks.withType(Javadoc) {
        options {
            encoding "UTF-8"
            charSet 'UTF-8'
            links "http://docs.oracle.com/javase/7/docs/api"
        }
    }
}

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

依赖包 build.gradle 配置

/*************************** bintray start ***************************/

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

// Bintray 相关的信息
group = rootProject.ext.bintray_groupId // groupId
version = rootProject.ext.bintray_publishVersion // 版本号

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
    user = properties.getProperty("bintray.user") // Bintray 用户名
    key = properties.getProperty("bintray.apikey") // Bintray ApiKey
    configurations = ['archives']
    pkg {
        // 项目简介
        repo = rootProject.ext.bintray_repoName // 仓库名称
        userOrg = rootProject.ext.bintray_userOrg // 用户名
        name =  rootProject.ext.bintray_groupId // 项目名称
        desc = rootProject.ext.bintray_project_desc // 项目描述
        issueTrackerUrl = rootProject.ext.bintray_issueTrackerUrl // issue 网址
        websiteUrl = rootProject.ext.bintray_website // git 网址
        vcsUrl = rootProject.ext.bintray_gitUrl // git 网址
        licenses = rootProject.ext.bintray_licenses // 协议
        labels = rootProject.ext.bintray_labels // 标签
        publish = true // 是否是公开项目
        version {
            name = rootProject.ext.bintray_publishVersion // 版本号 1.0.0
            desc = rootProject.ext.bintray_version_desc // 版本描述
            released = new Date()
            vcsTag = 'v' + rootProject.ext.bintray_publishVersion // v1.0.0
            attributes = rootProject.ext.bintray_attributes
        }
    }
}

install {
    repositories.mavenInstaller {
        // 生成pom.xml和参数
        pom.project {
            packaging rootProject.ext.bintray_packaging
            name rootProject.ext.bintray_artifactId// 项目名称
            description rootProject.ext.bintray_project_desc // 项目描述
            url rootProject.ext.bintray_website // 项目主页

            // 软件开源协议,一般都是Apache License2.0
            licenses {
                license {
                    name 'The Apache Software License, Version 2.0'
                    url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                }
            }

            //填写开发者基本信息
            developers {
                developer {
                    id rootProject.ext.bintray_developer_id
                    name rootProject.ext.bintray_developer_name
                    email rootProject.ext.bintray_developer_email
                }
            }

            scm {
                connection rootProject.ext.bintray_gitUrl // Git仓库地址
                developerConnection rootProject.ext.bintray_gitUrl // Git仓库地址
                url rootProject.ext.bintray_website // 项目主页
            }
        }
    }
}

// 生成jar包的task
task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}

// 生成jarDoc的task
task javadoc(type: Javadoc) {
    failOnError false // 忽略注释语法错误,如果用jdk1.8你的注释写的不规范就编译不过
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

// 生成javaDoc的jar
task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
//    archives javadocJar
    archives sourcesJar
}

/*************************** bintray end ***************************/

此配置调用的变量全部来自 config.gradle 中


config.gradle 配置

// jcenter push config
bintray_userOrg = 'xxxxxx'// 用户名
bintray_repoName = 'taxiao'// 远程仓库名称
bintray_groupId = 'com.taxiao.library'// groupId 名称
bintray_artifactId = 'common-library'// 项目名称
bintray_publishVersion = versionName// 版本号
bintray_project_desc = 'Android Dependent library MVP'// 项目描述
bintray_version_desc = 'version 1.0.0'// 项目描述
bintray_website = 'https://github.com/taxiao213/common_library'// 项目主页
bintray_gitUrl = 'https://github.com/taxiao213/common_library.git'// Git仓库的地址
bintray_issueTrackerUrl = 'https://github.com/taxiao213/common_library/issues'// issues地址
bintray_labels = ["Tools", "Library", "Java", "Android"]// 标签
bintray_licenses = ["Apache-2.0"] // 协议
bintray_attributes = ['gradle-plugin': 'com.use.less:com.use.less.gradle:gradle-useless-plugin']
bintray_packaging = 'aar'

// developer info
bintray_developer_id = 'taxiao'// 开发者 id
bintray_developer_name = 'taxiao'// 开发者姓名
bintray_developer_email = 'yin13753884368@163.com'// 开发者邮箱

需要注意的地方,新建的依赖库名称要和 bintray_artifactId 一致

这两处很重要记得配置

// Bintray 相关的信息
group = rootProject.ext.bintray_groupId // groupId
version = rootProject.ext.bintray_publishVersion // 版本号

一般的依赖包都是 xyz 这种方式,x 是 group, y 是 bintray_artifactId,z 是 bintray_publishVersion

比如我自己的依赖包: implementation ‘com.taxiao.library:common-library:1.0.0’


依赖包的完整配置 build.gradle


apply plugin: 'com.android.library'

/*************************** bintray start ***************************/

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

// Bintray 相关的信息
group = rootProject.ext.bintray_groupId // groupId
version = rootProject.ext.bintray_publishVersion // 版本号

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
    user = properties.getProperty("bintray.user") // Bintray 用户名
    key = properties.getProperty("bintray.apikey") // Bintray ApiKey
    configurations = ['archives']
    pkg {
        // 项目简介
        repo = rootProject.ext.bintray_repoName // 仓库名称
        userOrg = rootProject.ext.bintray_userOrg // 用户名
        name =  rootProject.ext.bintray_groupId // 项目名称
        desc = rootProject.ext.bintray_project_desc // 项目描述
        issueTrackerUrl = rootProject.ext.bintray_issueTrackerUrl // issue 网址
        websiteUrl = rootProject.ext.bintray_website // git 网址
        vcsUrl = rootProject.ext.bintray_gitUrl // git 网址
        licenses = rootProject.ext.bintray_licenses // 协议
        labels = rootProject.ext.bintray_labels // 标签
        publish = true // 是否是公开项目
        version {
            name = rootProject.ext.bintray_publishVersion // 版本号 1.0.0
            desc = rootProject.ext.bintray_version_desc // 版本描述
            released = new Date()
            vcsTag = 'v' + rootProject.ext.bintray_publishVersion // v1.0.0
            attributes = rootProject.ext.bintray_attributes
        }
    }
}

install {
    repositories.mavenInstaller {
        // 生成pom.xml和参数
        pom.project {
            packaging rootProject.ext.bintray_packaging
            name rootProject.ext.bintray_artifactId// 项目名称
            description rootProject.ext.bintray_project_desc // 项目描述
            url rootProject.ext.bintray_website // 项目主页

            // 软件开源协议,一般都是Apache License2.0
            licenses {
                license {
                    name 'The Apache Software License, Version 2.0'
                    url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                }
            }

            //填写开发者基本信息
            developers {
                developer {
                    id rootProject.ext.bintray_developer_id
                    name rootProject.ext.bintray_developer_name
                    email rootProject.ext.bintray_developer_email
                }
            }

            scm {
                connection rootProject.ext.bintray_gitUrl // Git仓库地址
                developerConnection rootProject.ext.bintray_gitUrl // Git仓库地址
                url rootProject.ext.bintray_website // 项目主页
            }
        }
    }
}

// 生成jar包的task
task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}

// 生成jarDoc的task
task javadoc(type: Javadoc) {
    failOnError false // 忽略注释语法错误,如果用jdk1.8你的注释写的不规范就编译不过
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

// 生成javaDoc的jar
task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
//    archives javadocJar
    archives sourcesJar
}

/*************************** bintray end ***************************/

def support = rootProject.ext.commonDependencies
def annotation = rootProject.ext.annotationProcessor

android {
    compileSdkVersion rootProject.compileSdkVersion

    defaultConfig {
        minSdkVersion rootProject.minSdkVersion
        targetSdkVersion rootProject.targetSdkVersion
        versionCode rootProject.versionCode
        versionName rootProject.versionName
    }

    buildTypes {
        release {
            minifyEnabled false
            consumerProguardFiles 'proguard-rules.pro'
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    support.each { k, v -> api v }
    annotation.each { k, v -> annotationProcessor v }
}
  • 3.项目配置完成后 依次执行如下命令:

    gradlew clean

    gradlew install

    gradlew bintrayUpload


gradlew clean

Android Library 发布到 Jcenter 库


gradlew install

Android Library 发布到 Jcenter 库


gradlew bintrayUpload

Android Library 发布到 Jcenter 库

  • 错误最多的就是第三个,常见错误如下:

Could not upload to ‘https://api.bintray.com/content/yin13753884368/taxiao/com.taxiao.cn/1.0.0/common_library/common-library/unspecified/common-library-unspecified.pom’: HT
TP/1.1 400 Bad Request [message:Unable to upload files: Maven group, artifact or version defined in the pom file do not match the file path ‘common_library/common-library/uns
pecified/common-library-unspecified.pom’]

Android Library 发布到 Jcenter 库


报 404 这个问题,困扰我好长时间,解决方案:依赖库的名称 和 rootProject.ext.bintray_artifactId 需要一致

Android Library 发布到 Jcenter 库

    1. gradlew bintrayUpload 执行完提示 successful ,说明上传成功

Android Library 发布到 Jcenter 库

  • 5.上传完成后,将依赖包上传到 jcenter 库,大概 2 小时左右会出结果

Android Library 发布到 Jcenter 库

  • 6.如果未上传到 Jcenter 库 ,要用时需要这样去配置

在 Andoid build.gradle 配置:

repositories {
    google()
    jcenter()
    mavenCentral()
    maven{url "https://dl.bintray.com/yin13753884368/taxiao/" }
}

然后再去依赖依赖包 build.gradle 配置:

[implementation ‘com.taxiao.library:common-library:1.0.0’]

  • 7.上传到 Jcenter 后,build.gradle 配置:

[implementation ‘com.taxiao.library:common-library:1.0.0’]

Android Library 发布到 Jcenter 库

Android Library 发布到 Jcenter 库

源码查看,关注公众号回复 jcenter ,获取

微信公众号 -->> 他晓 (欢迎加入)

Android Library 发布到 Jcenter 库

本文地址:https://blog.csdn.net/yin13753884368/article/details/107993920