Android组件化之JFrogBintray上传

打包jar

  • 对项目执行Make project,执行操作后我们可以在build目录下看到相关Class文件,在generated下看到AIDL文件生成的Class文件
image
image
  • 配置Android library的build.gradle文件

    task makeJar(type: org.gradle.api.tasks.bundling.Jar) {
                          /**
         * 指定生成的jar名
         */
        baseName 'shopcart'
        /**
         * 从哪里打包class文件
         */
        from('build/intermediates/classes/debug/com/wz/cartlib')
        /**
         * 打包AIDL生成文件
         */
        from('build/generated/source/aidl/debug/com.wz.cartlib/')
        /**
         * 打包到jar后的目录结构
         */
        into('com/wz/cartlib/')
        /**
         * 去掉不需要打包的目录和文件
         */
        exclude('BuildConfig.class', 'R.class')
        /**
         * 去掉R$开头的文件
         */
        exclude { it.name.startsWith('R$'); }
        }
        
        /**
        在终端执行生成JAR包 gradlew makeJar
        *
         */
        makeJar.dependsOn(clearJar,build)
    
  • 通过AndroidStudio的命令终端执行gradlew makeJar,等待出现BUILD SUCCESSFUL之后代表打包成功

  • 打包成功后会在libary的build/libs目录下生成jar包

  • 带有资源文件.aar文件

    1.将aar包复制到lib目录下

    2.配置工程app的build.gradle文件中加入声明

    repositories {
      flatDir {
        dirs 'libs'
      }
    compile(name:'httputils-debug', ext:'aar')
    
  • 在其他app中使用该aar文件时需要在该app的build.gradle文件的dependencies节点进行aar库build.gradle文件中依赖声明

  • 参考文章

    http://blog.csdn.net/hard_working1/article/details/52639776

    上传Android libray 至JFrogBintray

  • 注册JForgBintray账号

    1.Jcentre官网企业用户 https://bintray.com 个人版:https://bintray.com/signup/oss

    image

    2.登录Jcentre个人中心,在Originsation下创建Repository

    image
    image

    Repository类似一个大的项目,在这个项目下可以容纳多个子项目,子项目可以进行版本控制 注册成功后可以看到Repositroy主界面

  • 配置Gradle相关文件

    1.配置Android项目下Gradle文件

    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:2.2.3'
            classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1' //用于打包Maven所需文件
            classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6' //用于上传Maven生成的文件到Bintray
            classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.1.1" //用于上传JFrog Artifactory本地
    
            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
    }
    

    2.在Module下创建bintray.properties文件配置Bintray相关信息

    配置bintray账号相关信息
    bintray用户名,不是登陆邮箱,是个人中心右上角显示的名字
    bintray.user=xiaozhu
    bintray的ApiKey
    bintray.apiKey=a1015537bc3d32d94dcdf455e60a0421edee43e2
    bintray的Organization Id(组织Id)
    bintray.organizationId=xiaozhu
    配置开发者信息
    昵称
    developer.id=xiaozhu
    姓名
    developer.name=xiaozhu
    邮箱
    developer.email=zy1301529626@gmail.com
    

    3.在Module下创建project.properties文件配置project相关信息

    仓库名称,就是在bintray官网建立的仓库的名称
    project.repositoryName=maven
    项目名称
    project.name=cartlib //注意:project名字 与 library名字一致 否则会出现上传文件目录结构问题
    项目组id
    project.groupId=com.wz.cartlib
    项目id,一般同project.name
    project.artifactId=cartlib
    打包类型
    project.packaging=aar
    项目官方网站地址
    project.siteUrl=https://github.com/zy1301529626/MakerJcentre
    项目git地址
    project.gitUrl=https://github.com/zy1301529626/MakerJcentre.git
    生成的javadoc名称
    javadoc.name=cartlib
    

    4.在Moudle下Gradle文件下配置打包上传相关内容

    apply plugin: 'com.github.dcendents.android-maven'
    apply plugin: 'com.jfrog.bintray'
    
    /**
     * 加载bintray属性文件
     */
    Properties properties = new Properties()
    File localPropertiesFile = project.file("bintray.properties");
    if (localPropertiesFile.exists()) {
        properties.load(localPropertiesFile.newDataInputStream())
    }
    /**
     * 加载项目属性文件
     */
    File projectPropertiesFile = project.file("project.properties");
    if (projectPropertiesFile.exists()) {
        properties.load(projectPropertiesFile.newDataInputStream())
    }
    
    /**
     * 读取项目属性
     */
    def projectRepositoryName = properties.getProperty("project.repositoryName") //仓库名称
    def projectName = properties.getProperty("project.name")//项目名称
    def projectGroupId = properties.getProperty("project.groupId")//项目Id
    def projectArtifactId = properties.getProperty("project.artifactId")//一般与项目名称相同
    def projectVersionName = android.defaultConfig.versionName //项目版本号
    def projectPackaging = properties.getProperty("project.packaging") //项目打包类型
    def projectSiteUrl = properties.getProperty("project.siteUrl") //项目地址
    def projectGitUrl = properties.getProperty("project.gitUrl")  //项目git地址
    
    /**
     * 读取bintray属性
     */
    def bintrayUser = properties.getProperty("bintray.user")  //bintray用户名
    def bintrayApikey = properties.getProperty("bintray.apiKey") //bintray Api Key
    def bintrayOrganizationId = properties.getProperty("bintray.organizationId") //组织Id
    def developerId = properties.getProperty("developer.id") //开发者Id
    def developerName = properties.getProperty("developer.name") //开发者名称
    def developerEmail = properties.getProperty("developer.email") //开发者email地址
    def javadocName = properties.getProperty("javadoc.name") //javadoc名字
    
    /**
     * 这句代码一定要加否则会出现如下错误
     * Could not upload to 'https://api.bintray.com/content/coolcode/maven/LibUiBase/1.0.0/CommonLibrary/LibUiBase/1.0.0/LibUiBase-1.0.0.pom': HTTP/1.1 400 Bad Request [
     message:Unable to upload files: Maven group, artifact or version defined in the pom file do not match the file path 'CommonLibrary/LibUiBase/1.0.0/LibUiBase-1.0.0.p
     om']
     */
    group = projectGroupId
    
    /**
     * 配置生成POM.xml文件的参数
     */
    install {
        repositories.mavenInstaller {
            pom {
                project {
                    name projectName //项目名
                    groupId projectGroupId //项目Id(一般为唯一包名)
                    artifactId projectArtifactId //一般与项目名相同
                    version projectVersionName //项目版本号
                    packaging projectPackaging //打包类型
                    url projectSiteUrl  //项目地址
                    licenses {
                        license {
                            name 'The Apache Software License, Version 2.0'
                            url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                        }
                    }
                    developers {
                        developer {
                            id developerId //开发者id
                            name developerName //开发者名字
                            email developerEmail //开发者email地址
                        }
                    }
                    scm {
                        connection projectGitUrl
                        developerConnection projectGitUrl
                        url projectSiteUrl
                    }
                }
            }
        }
    }
    
    /**
     * 生成sources.jar
     */
    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))
    }
    
    /**
     * 生成javadoc.jar
     */
    task javadocJar(type: Jar, dependsOn: javadoc) {
        classifier = 'javadoc'
        from javadoc.destinationDir
    }
    
    artifacts {
        archives javadocJar
        archives sourcesJar
    }
    
    /**
     * javadoc的配置
     */
    javadoc {
        options {
            encoding "UTF-8"
            charSet 'UTF-8'
            author true
            version projectVersionName
            links "http://docs.oracle.com/javase/7/docs/api"
            title javadocName
        }
    }
    
    /**
     * userOrg为bintray账号信息里面的Organization Id
     * repo为你创建的仓库名称
     * 如果上述两个字段写错了,则会出现下面类似的错误
     * Could not create package 'huangxuanheng/maven/fragmentstack': HTTP/1.1 404 Not Found [message:Repo 'maven' was not found]
     *
     */
    bintray {
        user = bintrayUser
        key = bintrayApikey
        configurations = ['archives']
        pkg {
            userOrg = bintrayUser //组织Id
            repo = projectRepositoryName  //代码仓库Id
            name = projectName //项目名称
            websiteUrl = projectSiteUrl
            vcsUrl = projectGitUrl
            licenses = ['Apache-2.0']
            publish = true
        }
    }
    

    5.在Terminal窗口下收入如下指令上传到Bintray

    gradlew install
    gradlew bintrayUpload
    
  • 参考文章

    1.http://blog.csdn.net/huang_cai_yuan/article/details/53215131

    2.http://blog.csdn.net/lmj623565791/article/details/51148825

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容