使用AS-构建自己的仓库

首先声明,这个是在android studio中使用过程中搞出来的。

在as的项目里,经常会看到这样的代码:

compile 'com.quicktortoise:com-quicktortoise-dev:1.0.0'

或是这样的:

compile('com.afollestad.material-dialogs:core:0.8.4.2@aar') {
        transitive = true
    }

使用时,都是copy自其他开源项目中,虽然不知道为什么这么使用,但隐约知道,由于gradle的构建方式的使用,as在build.gradle文件中声明上述compile语句时,gradle会自动从网上找到相应的库(jar或aar等)加载到当前项目中,从而方便我们使用。

今天搞了一下午,终于弄明白了,这个就是好多高手在使用的中央仓库,maven,jcenter,rpm等。一句话:写好你自己的开源项目库,然后放到中央仓库中,供其他人或自己使用;使用也很方便,就是如上面那样子引入,然后gradle自动编译就好。

具体的使用方式:

  1. 到https://bintray.com  注册一个账号,记住你注册时的 账号和APIkey(个人信息编辑页面会看到)

  2. 创建你自己的开源项目,这个项目一般是库项目,也可以在一个主项目中创建一个module库项目

    接下来就是我们需要耐心和仔细注意的地方了:

  3. 首先在你的library项目中的build.gradle添加以下的构建脚本依赖:

  4. buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2'
            classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.1.1"
        }
    }

    5.然后,在当前gradle文件底部添加:

apply from: 'bintray.gradle'

    6.这个bintray.gradle文件放在library项目根目录下即可,内容为:

group = PROJ_GROUP
version = PROJ_VERSION
project.archivesBaseName = PROJ_ARTIFACTID

apply plugin: 'com.jfrog.bintray'
apply plugin: "com.jfrog.artifactory"
apply plugin: 'maven-publish'

task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}

task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += configurations.compile
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

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

javadoc {
    options{
        encoding "UTF-8"
        charSet 'UTF-8'
        author true
        version true
        links "http://docs.oracle.com/javase/7/docs/api"
        title PROJ_ARTIFACTID
    }
}


def pomConfig = {
    licenses {
        license {
            name "The Apache Software License, Version 2.0"
            url "http://www.apache.org/licenses/LICENSE-2.0.txt"
            distribution "repo"
        }
    }
    developers {
        developer {
            id DEVELOPER_ID
            name DEVELOPER_NAME
            email DEVELOPER_EMAIL
        }
    }
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            artifactId PROJ_ARTIFACTID
            artifact javadocJar
            artifact sourcesJar

            pom{
                packaging 'aar'
            }
            pom.withXml {
                def root = asNode()
                root.appendNode('description', PROJ_DESCRIPTION)
                root.children().last() + pomConfig
            }
        }
    }
}

afterEvaluate {
    publishing.publications.mavenJava.artifact(bundleRelease)
}

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
    user = properties.getProperty("bintray.user")
    key = properties.getProperty("bintray.apikey")

    //user = hasProperty("bintrayUser")?getProperty("bintrayUser"):getProperty("BINTRAY_USER")
    //key = hasProperty("bintrayKey")?getProperty("bintrayKey"):getProperty("BINTRAY_KEY")

    publications = ['mavenJava']
    publish = true

    pkg {
        repo = 'maven'
        name = PROJ_NAME
        desc = PROJ_DESCRIPTION
        websiteUrl = PROJ_WEBSITEURL
        issueTrackerUrl = PROJ_ISSUETRACKERURL
        vcsUrl = PROJ_VCSURL
        licenses = ['Apache-2.0']
        publicDownloadNumbers = true
    }
}

artifactory {
    contextUrl = 'http://oss.jfrog.org/artifactory'
    resolve {
        repository {
            repoKey = 'libs-release'
        }
    }
    publish {
        repository {
            repoKey = 'oss-snapshot-local' //The Artifactory repository key to publish to
            username = bintray.user
            password = bintray.key
            maven = true
        }
        defaults {
            //这里的名字和上面红色的名字一致即可,会将其包含的输出上传到jfrog上去
            publications('mavenJava')
            publishArtifacts = true
        }
    }
}

    7.配置library目录下的gradle.properties,详细的配置内容为:

PROJ_GROUP=com.quicktortoise
PROJ_VERSION=1.0.0
PROJ_NAME=quicktortoise
PROJ_WEBSITEURL=https://github.com/gao746700783/QuickTortoise
PROJ_ISSUETRACKERURL=
[email protected]:quicktortoise/QuickTortoise.git
PROJ_DESCRIPTION=android quick Dev
PROJ_ARTIFACTID=com-quicktortoise-dev

DEVELOPER_ID=tortoise
DEVELOPER_NAME=gaoxiaohui
[email protected]

#BINTRAY_USER=**************
#BINTRAY_KEY=**************

    8.执行命令,发布库到中央仓库

gradle bintray

     或分开执行 1.gradle bintrayUpload 将库发布到 bintray.com.

gradle bintrayUpload

     2.执行 gradle artifactoryPublish 可以发布版本到 oss.jfrog.org.

gradle artifactoryPublish

    9.包含到jcenter中央库

    先进入此页面:https://bintray.com/bintray/jcenter,点击Include My Package,然后在弹出的对话框中搜索并勾上你的项目,然后 send  即可。


    至此,你的仓库发布完毕,等待审核成功,任何人即可在项目中进行引用,比如上述我的库的使用方式为:

compile 'com.quicktortoise:com-quicktortoise-dev:1.0.0'

    ,因为我的库发布时间还短,尚未审核完毕,所以要等一段时间了。

好了,终于搞定这个了,加油



你可能感兴趣的:(android,studio;gradle;)