美文网首页
发布自己的Android开源项目

发布自己的Android开源项目

作者: aqiansunboy | 来源:发表于2016-07-26 16:21 被阅读0次

    随着移动开发技术的发展,越来越多的开源框架和开源库诞生了,尤其是以iOS下的PodAndroid下的Gradle为代表的构建系统的发展,使得开发者能非常方便和优雅的组织和管理自己项目中的第三方库依赖,也能很方便的发布自己的开源项目。我们既然处在一个好的时代,就一定要学会利用资源,要既能通过优秀的开源项目,武装自己的项目,也要能思考,为这个开源时代,贡献自己的一份力量。我以Android开源项目的发布为例,详细介绍一下~

    需要准备什么

    • 一台电脑
    • Android Studio
    • Gradle
    • 改变世界的点子

    其实任何自己在工作中封装或抽象的代码,经过一定的整理和优化,都是可以作为开源库,发布出去,造福劳动人民。这里假设我们已经写好了自己高大上的库。并上传到了自己的Github仓库。

    申请Bintray账号

    通过JFrog Bintray,可以将自己的库,发布到JCenter里,供全球的开发者使用。想想是不是有点小激动。申请完账号,登录后,应该是长这样的:

    JFrog Bintray主页

    点击Maven按钮进入

    Maven主页

    并点击Add New Package创建好自己的库。

    配置自己的Android Studio工程

    local.properties

    我们需要设置Bintray的Username和API Key来进行Bintray的加密认证。这些信息将写在local.properties文件里。如下:

    BINTRAY_USER=xxx
    BINTRAY_KEY=xxx
    

    其中,BINTRAY_USER就是自己Bintray上注册的账户名,BINTRAY_KEY可以在个人信息编辑里找到。

    gradle.properties

    这里定义一些全局变量,供后续的gradle脚本使用

    PROJ_GROUP=com.m4399
    
    PROJ_VERSION=1.0.0.1
    
    PROJ_NAME=GridViewLayout
    
    PROJ_WEBSITEURL=https://github.com/aqiansunboy/GridViewLayout
    
    PROJ_ISSUETRACKERURL=https://github.com/aqiansunboy/GridViewLayout/issues
    
    PROJ_VCSURL=https://github.com/aqiansunboy/GridViewLayout.git
    
    PROJ_DESCRIPTION=A light Grid Layout instead for Android GridView
    
    PROJ_ARTIFACTID=gridviewlayout
    
    DEVELOPER_ID=aqiansunboy
    
    DEVELOPER_NAME=Chaoqian Wu
    
    DEVELOPER_EMAIL=wuchaoqian@4399inc.com
    

    对应项更改为自己的值即可。

    publish.gradle

    自己的库模块下(比如gridviewlayout),创建publish.gradle文件,这里文件名命名随意,你也可以命名为自己女神的名字也行,但注意文件的脚本代码就不能随意了噢。

    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_NAME $PROJ_VERSION"
        }
    }
    
    
    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.withXml {
                    def root = asNode()
                    root.appendNode('description', PROJ_DESCRIPTION)
                    root.children().last() + pomConfig
    
                    def dependenciesNode = root.appendNode('dependencies')
                    configurations.compile.allDependencies.each {
                        if (it.group && it.name && it.version) {
                            def dependencyNode = dependenciesNode.appendNode('dependency')
                            dependencyNode.appendNode('groupId', it.group)
                            dependencyNode.appendNode('artifactId', it.name)
                            dependencyNode.appendNode('version', it.version)
                        }
                    }
                }
            }
        }
    }
    
    afterEvaluate {
        publishing.publications.mavenJava.artifact(bundleRelease)
    }
    
    bintray {
        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
            }
        }
    }
    
    

    build.gradle

    自己的库模块下(比如gridviewlayout),修改build.gradle,添加buildscript下的dependencies,以及apply publish.gradle

    apply plugin: 'com.android.library'
    
    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"
        }
    }
    
    android {
        compileSdkVersion 22
        buildToolsVersion "22.0.1"
    
        defaultConfig {
            minSdkVersion 9
            targetSdkVersion 22
            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'])
    
    }
    
    apply from: 'publish.gradle'
    
    

    射精

    经过一系列辛苦的劳动后,终于迎来了收获的季节。项目目录下Terminal执行:

    gradlew bintrayUpload
    

    就可以把我们的库发射出去了。最后,不要忘记了在Bintray上把自己的库提交JCenter审核。审核通过后,通过类似方式

    compile 'com.m4399:gridviewlayout:1.0.0.1'
    

    就可以让更多的开发者,使用上自己的库。甚至可以像运营一款产品一样,去运营自己的库,随着库功能的升级,Github Star数的增加,自己的影响力也会慢慢的提高。这也是在这个动不动就拼爹和拼颜值的时代,程序猿们成为网红的一个最佳途径。

    相关文章

      网友评论

          本文标题:发布自己的Android开源项目

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