Android Studio发布library到Jcenter

作者: _番茄沙司 | 来源:发表于2016-08-12 09:38 被阅读0次
    Android Studio发布library到Jcenter

    前言

    各位码友不知道有没有发现,不知道从何时,Android Studio的Gradle构建系统就已经把Jcenter作为默认的远程仓库了,如下:

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

    而这样做的好处就是我们只需要在dependencies脚本块中加入对应lib即可使用远程仓库,而不需要再像eclipse那样苦苦寻找jar包。

    dependencies {
        compile fileTree(include: ['*.jar'], dir: 'libs')
        testCompile 'junit:junit:4.12'
        compile 'com.android.support:appcompat-v7:23.+'
    }
    

    你应该在github上也看到过要使用别人的开源库只需要往dependencies脚本块中添加一行代码即可:

    github

    想象一下,别人往他们的build.gradle中添加了一行代码就可以使用你的开源库了,这是一件多么令人兴奋的事情。那么接下来我们就把想象变为现实,学习一下怎么将自己的Android Studio Library提交到Jcenter供他人使用。


    Bintray

    首先我们要了解一个叫做bintray的网站,它和github类似也是用来管理文件的,只不过它管理的是二进制文件,Jcenter就是它众多仓库中的一员。

    首先需要注册成为这个网站的用户,接着进入profile界面:


    profile

    点击Edit

    Edit

    选择API Key


    API Key

    这里的API Key和你之前注册的用户名在后面会用到。


    配置

    接着我们新建一个叫做CommitToJcenter的Android工程,并且添加一个叫做jad的android library模块,这个jad就是我们后面要提交到Jcenter的模块。

    project

    然后在工程目录下local.properties中添加如下内容:

    bintray.user=***
    bintray.apikey=***
    

    上面的usert填你注册时候的用户名,apikey就是上面拿到的那个。

    接着在工程目录下的build.gradle中添加如下内容:

    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:2.1.2'
    
            //添加一下两个classpath
            // for jcenter
            // version: https://bintray.com/jfrog/jfrog-jars/gradle-bintray-plugin
            classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.1'
            // version: https://bintray.com/dcendents/gradle-plugins/com.github.dcendents%3Aandroid-maven-gradle-plugin
            classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
        }
    }
    
    ...
    

    接着进入jad目录,在build.gradle中添加如下内容:

    ...
    
    apply plugin: 'com.github.dcendents.android-maven'
    apply plugin: 'com.jfrog.bintray'
    
    version = "1.0" //版本号,每次提交到Jcenter都要修改
    def siteUrl = *** // project homepage
    def gitUrl = ***  // project git
    group = "com.zql.android"
    
    install {
        repositories.mavenInstaller {
            // This generates POM.xml with proper parameters
            pom {
                project {
                    packaging 'aar'
                    name 'Just a demo for jcenter'
                    url siteUrl
                    licenses {
                        license {
                            name 'The Apache Software License, Version 2.0'
                            url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                        }
                    }
                    developers {
                        developer {
                            id *** //Jcenter id
                            name *** //Jcenter name
                            email *** //e-mail
                        }
                    }
                    scm {
                        connection gitUrl
                        developerConnection gitUrl
                        url siteUrl
                    }
                }
            }
        }
    }
    
    
    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))
    }
    
    
    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 = "maven"
            name = "jad" // project name in jcenter
            websiteUrl = siteUrl
            vcsUrl = gitUrl
            licenses = ["Apache-2.0"]
            publish = true
        }
    }
    

    当做完以上几步后所有的配置工作就完成了,这时候选择sync一下你的工程,建议在翻墙的情况下sync,成功率会高一点。


    提交

    接着在Gradle窗口找到如下几个task,并执行:

    • javadocJar
    • sourcesJar
    • install
    • bintrayUpload
    gradle gradle

    提交结束后我们再次打开bintray,在profile的last activity中可以看到这样的信息:

    last activity

    点击jad进入模块界面,点击add to Jcenter:

    add to jcenter

    接着填写一些相关申请信息即可,记得得是英文。我目前的通过率是100%。

    request

    接着就是等待了,差不多一天时间就能得到答复。

    response

    OK,进去了,这时候我们已经可以在其他项目中使用我们提交的模块了。


    使用

    上面我们新建了jad模块就直接提交了,并没有写代码,所以也不好在其他工程测试。接下来我们添加一个类JAD.java

    package android.zql.com.jad;
    
    import android.content.Context;
    import android.widget.Toast;
    
    /**
     * Created by scott on 8/11/16.
     */
    public final class JAD {
    
        public static final void sayHello(Context context){
            Toast.makeText(context,"hello man",Toast.LENGTH_LONG).show();
        }
    }
    

    很简单,使用Toast弹出Hello man这句话。
    由于第一次已经被允许加入Jcenter了,所以以后的提交都会默认加入Jcenter。接着我们修改一下这次我们需要提交的版本号为1.0.1:

    apply plugin: 'com.github.dcendents.android-maven'
    apply plugin: 'com.jfrog.bintray'
    version = "1.0.1"
    

    然后执行以下四步:

    • javadocJar
    • sourcesJar
    • install
    • bintrayUpload

    执行完成后我们看下bintray中的jad:

    我们刚提交的1.0.1已经出现在这里了,


    1.0.0

    这边给出了jad在gradle中的使用方法,是不是很熟悉?


    gradle usage

    下面我们就在项目中使用jad吧,在项目的build.gradle中添加如下代码:

    dependencies {
        ...
        compile 'com.zql.android:jad:1.0.1'
    }
    

    在Activity中使用:

      @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            JAD.sayHello(this);
        }
    

    运行结果如下:

    运行结果

    小结

    这个技能大神们普遍都会,写得不到位之处多多提点。还希望这篇总结对大家有所帮助。
    最后献上这个CommitToJcenter的github地址
    最后的最后放上我最敬佩的产品经理,哈哈。

    Steven Paul Jobs

    相关文章

      网友评论

        本文标题:Android Studio发布library到Jcenter

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