如何把 Android Library上传到JCenter仓库

由于公司需求,想把自己平常封装的一些控件或者收集的控件提交到JCenter仓库以便其他同事使用,废话不多,直接上步骤。

1. 注册bintray账号

你要想在bintray上发布自己的Library就必须有一个账号,这里建议使用github账号授权登录,这样以后你开源的仓库可以在github找到相应的源码,如果你不想使用其他登录方式的话就另外注册一个账号。( 想重新注册请自行脑补注册过程 )

《如何把 Android Library上传到JCenter仓库》 Bintray

登录成功之后,你会看到以下 不堪的画面。

《如何把 Android Library上传到JCenter仓库》 Bintray主页

2. 创建package

《如何把 Android Library上传到JCenter仓库》
《如何把 Android Library上传到JCenter仓库》
《如何把 Android Library上传到JCenter仓库》

这里示例创建一个mytestutils的包,如下图所示:

《如何把 Android Library上传到JCenter仓库》

关于github项目的创建 嗯 也请自行脑补

3. 创建一个Android Library

新建一个android project,然后new 一个module,选择android library,项目结构如下:

《如何把 Android Library上传到JCenter仓库》

这里为了演示,创建了一个简单的类:

《如何把 Android Library上传到JCenter仓库》

4. 应用bintray插件

如果想通过bintrayUpload命令上传library就必须在根gradle下引用相应的插件,配置如下:

dependencies {
      classpath 'com.android.tools.build:gradle:2.2.0-beta2'
      classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
      classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
}

然后在我们的Library工程的build.gradle引用插件,如下所示:

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

应用成功后,你会看到插件生成的task,如下图所示:

《如何把 Android Library上传到JCenter仓库》

通过这个task,我们可以将我们的library上传到maven仓库当中,不过我们还得继续完成我们的gradle配置。

5. build.gradle配置

我们需要在library工程的build.gradle配置我们的相应参数,下面是示例代码:

apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
// 这个version是区分library版本的,因此当我们需要更新library时记得修改这个version
version = "1.0.0"
android {
    compileSdkVersion 24
    buildToolsVersion "24.0.0"
    resourcePrefix "cherno"  // 随便填
    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 24
        versionCode 1
        versionName version

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

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:24.2.0'
    testCompile 'junit:junit:4.12'
}
def siteUrl = 'https://github.com/SanBeHappy/mytextlib' // 项目的主页
def gitUrl = 'https://github.com/SanBeHappy/mytextlib.git' // Git仓库的url
group = "com.cherno.mylibrary" //一般填你唯一的包名
install {
    repositories.mavenInstaller {
        // This generates POM.xml with proper parameters
        pom {
            project {
                packaging 'aar'
                // Add your description here
                description 'my utils for test'
                name 'Android Commonly used utils'  //项目描述
                url siteUrl
                // Set your license
                licenses {
                    license {
                        name 'The Apache Software License, Version 2.0'
                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    }
                }
                developers {
                    developer { // 开发者信息
                        id 'cherno'
                        name 'cherno'
                        email 'cherno@126.com'
                    }
                }
                scm {
                    connection gitUrl
                    developerConnection gitUrl
                    url siteUrl
                }
            }
        }
    }
}
task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}
task javadoc(type: Javadoc) {
    options.encoding = 'UTF-8'
    source = 'src/main/java'
}

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"  //发布到Bintray的那个仓库里,默认账户有四个库,我们这里上传到maven库
        name = "mytestlib"  //发布到Bintray上的项目名字
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        licenses = ["Apache-2.0"]
        publish = true
    }
}

你还需要在local.properties中定义两行代码:

bintray.user=YOUR_BINTRAY_USERNAME 
bintray.apikey=YOUR_BINTRAY_API_KEY

分别是你在bintray的用户名和apikey

《如何把 Android Library上传到JCenter仓库》

《如何把 Android Library上传到JCenter仓库》

《如何把 Android Library上传到JCenter仓库》

配置完成后,我们就可以执行bintrayUpload命令上传我们的库到bintray,可以直接执行task或者在studio里的命令行敲入以下命令:

gradlew bintrayUpload

如果上传成功,就会在bintray的网页看到你的library,例如我通过命令上传的mytestutils库:

《如何把 Android Library上传到JCenter仓库》

这个时候你已经实现通过gradle脚本上传library到maven仓库,你可以在本地验证以下,需要进行在根目录的build.gradle配置:
allprojects { 
     repositories { 
        jcenter() 
        maven { 
             url 'https://dl.bintray.com/sanbehappy/maven/' 
        } 
     } 
}

这样我们就可以访问上传到maven的library,在项目配置:

这里就是最坑的地方!!这里就是最坑的地方!!这里就是最坑的地方!!重要的事说三遍!!

路径最好是去library文件夹 → build文件夹 → poms文件夹 打开pom-default.xml文件 里找
路径 = groupId+artifactId+version

《如何把 Android Library上传到JCenter仓库》

完全体 如下图所示 :

《如何把 Android Library上传到JCenter仓库》

编译成功之后,可以在External Libraries看到我们从maven仓库下载下来的library:

《如何把 Android Library上传到JCenter仓库》

但如果你想让其他开发者直接使用,需要上传到Jcenter,而不需要配置maven的地址。

《如何把 Android Library上传到JCenter仓库》

《如何把 Android Library上传到JCenter仓库》

完成这些操作之后,你只需等待bintray团队审核通过,之后其他开发者只需配置一行代码就可以使用了。

如需提交新版本只需修改版本号再次执行提交命令即可。

6. 错误总结

我相信绝大多数人都会遇到BUILD FAILED 的情况的。
打包过程遇到的错误大致总结一下就是:

Javadoc generation failed. Generated Javadoc options file (useful for troubleshooting): ‘路径’

  • 错误: 编码GBK的不可映射字符 ——注释不要用中文,或者修改项目的字符编码
  • 错误: 找不到符号——删除javadoc里所有的html标签
    Could not create package ‘路径’: HTTP/1.1 401 Unauthorized [message:This resource requires authentication]
  • 你一定是用户名或者APIKey填错了。

在教同事实践的过程中 又得出以下报错 : could not creat HTTP 404

解决方法如下: repo的name必须与你创建maven仓库时命名的name一致

《如何把 Android Library上传到JCenter仓库》

修改完错误上传成功之后,就可以方便的使用compile了。以上

    原文作者:心里有颗小星星
    原文地址: https://www.jianshu.com/p/82147250ffe1
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞