美文网首页Android知识Android开发程序员
Android Studio 中使用Gradle发布项目到JCe

Android Studio 中使用Gradle发布项目到JCe

作者: 路Promenade | 来源:发表于2017-07-13 23:11 被阅读460次
    目录.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

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

    image.png

    个人注册如上图

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


    image.png image.png

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

    二、获取 API Key

    image.png

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


    三、后台创建Maven仓库

    image.png 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 = 'git@github.com: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 'luguoqiang@yahoo.com' // 填写邮箱
                        }
                    }
                    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发布项目到JCe

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