Android Studio 中使用Gradle发布项目到JCenter仓库

Android Studio 中使用Gradle发布项目到JCenter仓库_第1张图片
目录.png

前言

在Android Studio 中使用aar库非常方便,在模块化开发中尤为重要。在项目中经常从网络上获取公开的第三方类库进行开发,而这个网络位置就是JCenter。在在gradle中使用:

repositories {
    jcenter()
}

jCenter是Bintray提供的公开下载服务,使用自身开发的artifactory开源应用搭建,后绪会介绍如何使用artifactory来搭建团队内部的私有仓库。

dependencies {
    compile 'com.facebook.fresco:fresco:0.14.1'
}
在 Android Studio 中引用一个 Module  Library 是不是很方便,类似于这样格式的开源库都是上传到了`bintray`上的,然后在发布成开源。

JCenter 是全世界最大的 Java 仓库,也是 Android Studio 中 repositories 的默认节点。JCenter 支持 Maven, Gradle, lvy , SBT 等大部分构建工具。

需要注意,发布到JCenter上面的库是开源的或是经过混淆的,否则就放弃这种想法,直接提供Jar包给第三方好了。


一、注册 Bintray 账号

 JCenter是由 [Bintray](https://bintray.com/) 公司在维护,所以先注册一个Bintray账号。

bintray上注册一个账号 建议注册个人账号。可以使用github账号直接授权登录。

由于 Bintray网站 改版了,增加了Organization的概念。如果点击中间那个大大的绿色按钮,用那个点了注册就错了!! 变成了注册一个组织,注册地址是 https://bintray.com/signup 提交aar的时候就会出现Unauthorized这个错误 注意:个人的注册地址为https://bintray.com/signup/oss
注意一点:不能使用国内的邮箱注册。

image.png

上图:点击首页默认注册的是组织号

Android Studio 中使用Gradle发布项目到JCenter仓库_第2张图片
image.png

个人注册如上图

注册完了不知道自己注册是个人账号还是组织账号?


Android Studio 中使用Gradle发布项目到JCenter仓库_第3张图片
image.png
Android Studio 中使用Gradle发布项目到JCenter仓库_第4张图片
image.png

如果不小心注册成了组织账号了怎么办?
用国外的邮箱谷歌、雅虎等。新注册个账号即可。

二、获取 API Key

Android Studio 中使用Gradle发布项目到JCenter仓库_第5张图片
image.png

然后输入登录密码就可以获取到API KEY了。


三、后台创建Maven仓库

Android Studio 中使用Gradle发布项目到JCenter仓库_第6张图片
image.png
Android Studio 中使用Gradle发布项目到JCenter仓库_第7张图片
image.png

上图中注意:创建的maven仓库名字和类型都要写成maven。


四、添加依赖

添加 maven-gradle和gradle-bintray插件

项目的Project下的build.gradle中添加:

classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'   
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'

android-maven-gradle-plugin插件是用来打包Maven所需文件的。
gradle-bintray-plugin插件是用来将生成的Maven所需文件上传到Bintray的。


五、Gradle配置

1.在library model下创建一个bintrayUpload.gradle文件,文件内容如下:

apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
// This is the library version used when deploying the artifact
// 配置版本
version = "1.0.0"

// 定义相关网站
def siteUrl = 'https://github.com/lugq/permissionDemo'  // 项目的主页
def gitUrl = '[email protected]:lugq/permissionDemo.git'   // Git仓库的url
group = "com.lugq.jcenterdemo"                          // Maven Group ID for the artifact,一般填你唯一的包名

// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓定义 pom 并打包 aar↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
install {
    repositories.mavenInstaller {
        // This generates POM.xml with proper parameters
        pom {
            project {
                packaging 'aar'
                // Add your description here
                name 'JCenter Demo'
                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 'luguoqiang'        //填写的一些基本信息
                        name 'luguoqiang'
                        email '[email protected]' // 填写邮箱
                    }
                }
                scm {
                    connection gitUrl
                    developerConnection gitUrl
                    url siteUrl
                }
            }
        }
    }
}
// ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑定义 pom 并打包 aar↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

// 打包 javadocjar 和 sourcejar
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 = "JcenterDemo"    //发布到JCenter上的项目名字
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        licenses = ["Apache-2.0"]
        publish = true
    }
}
javadoc { //jav doc采用utf-8编码否则会报“GBK的不可映射字符”错误
    options{
        encoding "UTF-8"
        charSet 'UTF-8'
    }
}

2.在library modelbuild.gradle追加如下代码:

apply from: "bintrayUpload.gradle"

3.在local.properties文件中添加从Bintray申请到的API Key

#bintray
bintray.user=your bintray username
bintray.apikey=your apikey

建议将local.properties文件加入忽略文件中不上传,以保护你的apikey。


六、将项目提交到Bintray

如果你一完成了上述的配置后,下面只需要一行代码就可以完成将项目提交到Bintray。

打开终端进入项目目录下,执行gradlew bintrayUpload命令即可。
或者双击Tasts文件夹下的publishing下的bintrayUpload文件;

执行完成后,打开你的bintray主页如果在Owned Repositories下的maven选中看到你的仓库,则说明你已经将你的仓库成功上传到bintray了。


最后、中途遇到的坑

坑一

Error:Execution failed for task ':module:bintrayUpload'.
> java.io.FileNotFoundException: /Users/peter/AndroidStudioProjects/JCenterDemo/module/build/poms/pom-default.xml (No such file or directory)

如果是这样的话说明你执行bintrayUpload的方式是在Android Studio的Gradle窗口中选择"Run *** bintrayUpload",请不要用这种方式执行bintrayUpload
正确的姿势应该是在命令行中执行gradlew bintrayUpload

坑二

peter:JCenterDemo peter$ gradlew bintrayUpload
bash: gradlew: command not found

解决:
macwindows不同 要在gradlew命令下加上./
于是添加上了./,开始执行./gradlew bintrayUpload命令

坑三

peter:botbrain-sdk-video peter$ ./gradlew bintrayUpload
bash: ./gradlew: Permission denied
peter:botbrain-sdk-video peter$ 

解决:改变gradlew的权限

chmod +x gradlew

你可能感兴趣的:(Android Studio 中使用Gradle发布项目到JCenter仓库)