美文网首页Android开发Android技术知识Android进阶之路
如何使用AndroidStudio上传Library到JCent

如何使用AndroidStudio上传Library到JCent

作者: 码农大表哥 | 来源:发表于2017-12-14 19:44 被阅读106次

    一、前言

    该篇文章主要是面向使用AndroidStudio开发Android且有开源精神的小伙伴们~
    环境:Windows 7 + AndroidStudio 2.3.3
    第二部分会直接开始从0开始直到上传jcenter成功
    第三部分会说如何更新Library版本
    第四部分会贴一些大家在上传可能遇到的问题及解决办法
    笔者我是于2017.12.14测试上传完成~


    二、步骤

    1. 注册Bintray账号
      这里是Bintray的官方网站:https://bintray.com/
      Bintray.png
      这里我们要注意:很多人都会误点绿色的那个按钮,然后注册成了一个组织!这里我们是要去注册个人账户,应该点击图中的地方
    Regist.png

    填写注册页面要注意:很多人注册不了,多是因为邮箱是不支持的,推荐使用gmail邮箱,若你有Google账户也可以直接通过Google账号注册或者使用Github注册

    注册完成之后会自动跳转到这个页面,这样你的Bintray账号注册已经完成:


    index.png
    1. 添加仓库


      step1 添加仓库.png
    step2 填写仓库信息.png step3 添加包.png
    step4 为了方便大家理解,我翻译成了中文(带*为必填项).png

    添加仓库这里需要大家注意:step3 - step4 是直接在线通过网站生成包,这一步不是必须的。
    若通过step3 - step4生成包,可以直接通过包名 和你的账号信息上传代码
    若不经过step3 - step4 ,我们通过AndroidStudio上传时候,Bintray会自动为我们创建~

    3.配置项目信息

    • a.配置app项目下的build.gradle配置
    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:2.3.3'
            //上传bintray需要的插件
            classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2'
            classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
    }
    
    allprojects {
        repositories {
            jcenter()
            mavenCentral()
        }
        // 防止中文乱码
        tasks.withType(Javadoc) {
            options.addStringOption('Xdoclint:none', '-quiet')
            options.addStringOption('encoding', 'UTF-8')
        }
    }
    
    task clean(type: Delete) {
        delete rootProject.buildDir
    }
    
    
    • b. 配置library Module的build.gradle
    apply plugin: 'com.android.library'
    
    // 版本号,下次更新是只需要更改版本号即可
    version "1.0.0"
    android {
        compileSdkVersion 26
        buildToolsVersion "26.0.1"
    
        defaultConfig {
            minSdkVersion 14
            targetSdkVersion 26
            versionCode 1
            versionName "${version}"
    
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
        //这里要添加 去除代码规范报错
        lintOptions {
            abortOnError false
        }
    }
    allprojects {
        repositories {
            jcenter()
        }
        //加上防止中文错乱 报错
        tasks.withType(Javadoc) {
            options{ encoding "UTF-8"
                charSet 'UTF-8'
                links "http://docs.oracle.com/javase/7/docs/api"
            }
        }
    }
    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:26.+'
        testCompile 'junit:junit:4.12'
    }
    
    apply plugin: 'com.github.dcendents.android-maven'
    apply plugin: 'com.jfrog.bintray'
    
    //项目主页
    def siteUrl = 'https://github.com/AnthonyCoder/CustomCamera'    // project homepage
    //项目的版本控制地址
    def gitUrl = 'https://github.com/AnthonyCoder/CustomCamera.git' // project git
    
    //发布到组织名称名字,必须填写
    group = "cn.geek.anthony"
    //发布到JCenter上的项目名字,必须填写
    def libName = "CustomCamera"
    
    //生成源文件
    task sourcesJar(type: Jar) {
        from android.sourceSets.main.java.srcDirs
        classifier = 'sources'
    }
    //生成文档
    task javadoc(type: Javadoc) {
        source = android.sourceSets.main.java.srcDirs
        classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
        options.encoding "UTF-8"
        options.charSet 'UTF-8'
        options.author true
        options.version true
        failOnError false
    }
    
    //文档打包成jar
    task javadocJar(type: Jar, dependsOn: javadoc) {
        classifier = 'javadoc'
        from javadoc.destinationDir
    }
    //拷贝javadoc文件
    task copyDoc(type: Copy) {
        from "${buildDir}/docs/"
        into "docs"
    }
    
    //上传到jcenter所需要的源码文件
    artifacts {
        archives javadocJar
        archives sourcesJar
    }
    
    // 配置maven库,生成POM.xml文件
    install {
        repositories.mavenInstaller {
            // This generates POM.xml with proper parameters
            pom {
                project {
                    packaging 'aar'
                    name 'This is a rapidly used custom camera library'
                    url siteUrl
                    licenses {
                        license {
                            name 'This is a rapidly used custom camera library'
                            url 'https://github.com/AnthonyCoder/CustomCamera'
                        }
                    }
                    developers {
                        developer {
                            id 'anthonyCoder'
                            name 'anthonycode'
                            email 'hacker_maple@163.com'
                        }
                    }
                    scm {
                        connection gitUrl
                        developerConnection gitUrl
                        url siteUrl
                    }
                }
            }
        }
    }
    
    //上传到jcenter
    Properties properties = new Properties()
    properties.load(project.rootProject.file('local.properties').newDataInputStream())
    bintray {
        user = properties.getProperty("bintray.user")    //读取 local.properties 文件里面的 bintray.user
        key = properties.getProperty("bintray.apikey")   //读取 local.properties 文件里面的 bintray.apikey
        configurations = ['archives']
        pkg {//这里就是我们的包的初始信息!!
            userOrg = "anthonycode" //对应JCenter的你的组织或个人名字
            repo = "maven" //对应JCenter的你的库名
            name = libName    //对应JCenter上的项目(包)名字,必须填写
            desc = 'This is a rapidly used custom camera library'    //项目描述
            websiteUrl = siteUrl
            vcsUrl = gitUrl
            licenses = ["Apache-2.0"]
            publish = true
        }
    }
    
    
    • c. app项目下local.properties的配置
    ## This file is automatically generated by Android Studio.
    # Do not modify this file -- YOUR CHANGES WILL BE ERASED!
    #
    # This file must *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.
    #Mon Nov 20 11:48:35 CST 2017
    ndk.dir=D\:\\android-sdk\\ndk-bundle
    sdk.dir=D\:\\android-sdk
    bintray.user=这里是bintray的注册账号
    bintray.apikey=这里是bintray的apikey
    

    如何查看ApiKey


    step1.png step2.png

    3.gradlew 安装编译上传步骤

    mac环境下使用gradlew命令如./gradlew install命令,若出现类似Permission Denied提示,则试试加上执行标志,命令为:chmod +x gradlew install
    若mac环境还是有问题,请检查adb环境是否配置成功:adb version 命令试试能不能看到adb版本,解决方案

    • a.安装命令:
      Windows环境下 : gradlew install
      Mac环境下 : ./gradlew install

      当命令滚动到 BUILD SUCCESSFUL则执行成功
      成功后会在build文件看到会生成如下内容:


      show.png
    • b.若上一步无问题,则我们可以开始上传jar包到Bintray
      执行命令:
      Windows 环境下: gradlew bintrayUpload
      Mac 环境下: ./gradlew bintrayUpload
      当命令滚动到 BUILD SUCCESSFUL 说明上传成功,然后你可以登录Bintray查看你的包就可以开始去添加到JCenter上面了

    • c.若前两部无问题,我们这一步就该开始把jar包添加到JCenter了
      点击进入你的包详情


      add jcenter.png

      填写包的简单介绍


      send.png
      • d.审核成功后


        image.png

        如果审核通过了,我们就可以在项目中去远程依赖了~

    三、更新版本

    更新版本之前,最好要确保你的代码都上传完整,能够达到你的更新要求。
    更新这一步极其简单,步骤如下:

    • a. 完成版本更新的代码修改或添加
    • b. 重复第二部分的第3节步骤(gradlew 安装编译上传步骤)
    • c. 若无问题,便可以登录Bintary查看上传记录了。
      注意:只要你的library通过了jcenter的审核,更新之后就不用再次add jcenter,直接引入就可以使用了~

    四、以上步骤中可能会遇到的问题

    按道理来说,按照以上的步骤一步步来 是完全没问题的,不过有时候粗心少填或填错一些内容也不好排查,以下我整理一下容易遇见的问题

    1. 错误: 编码GBK的不可映射字符->请正确配置javadoc编码
      在项目下的build.gradle 下添加如下,将中文注释改成英文,别问我怎么知道的~

      tasks.withType(Javadoc) {
      options.addStringOption('Xdoclint:none', '-quiet')
      options.addStringOption('encoding', 'UTF-8')
      }
      
    2. Could not create version ‘0.1’: HTTP/1.1 401 Unauthorized [message:This resource requires authentication]
      原因:没有正确配置API key,检查app项目下local.properties的bintray.apikey是否正确

    3. Could not create package 'fighter/xxx/xxx': HTTP/1.1 404 Not Found [message:Repo 'xxx' was not found]
      原因:这个错误的原因是因为在网站直接创建的包,然后本地项目和网站的包信息匹配错误,请参考下图对照:


      image1.png
      image2.png

      图2中红色框中的UserOrg 、repo 、name必须和图1从左到右的红框的名字一样~
      图2 pkg{}中就是包的所有配置,可以一一比对一下有什么异常没有!

    4. 找不到Add to JCenter按钮,如果是这个问题的同学,恭喜你,你注册成为了一个组织,请你向上滚动看文章开篇的注册方式,点击上面的链接重新注册~

    5. 403 [message:forbidden] 这种情况往往出现在粗心的同学把项目中的部分配置字段写错了,如大小写、单词错误等~(如:userOrg写成了UserOrg)

    相关文章

      网友评论

        本文标题:如何使用AndroidStudio上传Library到JCent

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