Android組件化之JFrogBintray上傳

打包jar

  • 對(duì)項(xiàng)目執(zhí)行Make project,執(zhí)行操作后我們可以在build目錄下看到相關(guān)Class文件,在generated下看到AIDL文件生成的Class文件
image
image
  • 配置Android library的build.gradle文件

    task makeJar(type: org.gradle.api.tasks.bundling.Jar) {
                          /**
         * 指定生成的jar名
         */
        baseName 'shopcart'
        /**
         * 從哪里打包c(diǎn)lass文件
         */
        from('build/intermediates/classes/debug/com/wz/cartlib')
        /**
         * 打包AIDL生成文件
         */
        from('build/generated/source/aidl/debug/com.wz.cartlib/')
        /**
         * 打包到j(luò)ar后的目錄結(jié)構(gòu)
         */
        into('com/wz/cartlib/')
        /**
         * 去掉不需要打包的目錄和文件
         */
        exclude('BuildConfig.class', 'R.class')
        /**
         * 去掉R$開頭的文件
         */
        exclude { it.name.startsWith('R$'); }
        }
        
        /**
        在終端執(zhí)行生成JAR包 gradlew makeJar
        *
         */
        makeJar.dependsOn(clearJar,build)
    
  • 通過AndroidStudio的命令終端執(zhí)行g(shù)radlew makeJar,等待出現(xiàn)BUILD SUCCESSFUL之后代表打包成功

  • 打包成功后會(huì)在libary的build/libs目錄下生成jar包

  • 帶有資源文件.aar文件

    1.將aar包復(fù)制到lib目錄下

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

    repositories {
      flatDir {
        dirs 'libs'
      }
    compile(name:'httputils-debug', ext:'aar')
    
  • 在其他app中使用該aar文件時(shí)需要在該app的build.gradle文件的dependencies節(jié)點(diǎn)進(jìn)行aar庫(kù)build.gradle文件中依賴聲明

  • 參考文章

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

    上傳Android libray 至JFrogBintray

  • 注冊(cè)JForgBintray賬號(hào)

    1.Jcentre官網(wǎng)企業(yè)用戶 https://bintray.com 個(gè)人版:https://bintray.com/signup/oss

    image

    2.登錄Jcentre個(gè)人中心,在Originsation下創(chuàng)建Repository

    image
    image

    Repository類似一個(gè)大的項(xiàng)目,在這個(gè)項(xiàng)目下可以容納多個(gè)子項(xiàng)目,子項(xiàng)目可以進(jìn)行版本控制 注冊(cè)成功后可以看到Repositroy主界面

  • 配置Gradle相關(guān)文件

    1.配置Android項(xiàng)目下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下創(chuàng)建bintray.properties文件配置Bintray相關(guān)信息

    配置bintray賬號(hào)相關(guān)信息
    bintray用戶名,不是登陸郵箱,是個(gè)人中心右上角顯示的名字
    bintray.user=xiaozhu
    bintray的ApiKey
    bintray.apiKey=a1015537bc3d32d94dcdf455e60a0421edee43e2
    bintray的Organization Id(組織Id)
    bintray.organizationId=xiaozhu
    配置開發(fā)者信息
    昵稱
    developer.id=xiaozhu
    姓名
    developer.name=xiaozhu
    郵箱
    developer.email=zy1301529626@gmail.com
    

    3.在Module下創(chuàng)建project.properties文件配置project相關(guān)信息

    倉(cāng)庫(kù)名稱,就是在bintray官網(wǎng)建立的倉(cāng)庫(kù)的名稱
    project.repositoryName=maven
    項(xiàng)目名稱
    project.name=cartlib //注意:project名字 與 library名字一致 否則會(huì)出現(xiàn)上傳文件目錄結(jié)構(gòu)問題
    項(xiàng)目組id
    project.groupId=com.wz.cartlib
    項(xiàng)目id,一般同project.name
    project.artifactId=cartlib
    打包類型
    project.packaging=aar
    項(xiàng)目官方網(wǎng)站地址
    project.siteUrl=https://github.com/zy1301529626/MakerJcentre
    項(xiàng)目git地址
    project.gitUrl=https://github.com/zy1301529626/MakerJcentre.git
    生成的javadoc名稱
    javadoc.name=cartlib
    

    4.在Moudle下Gradle文件下配置打包上傳相關(guān)內(nèi)容

    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())
    }
    /**
     * 加載項(xiàng)目屬性文件
     */
    File projectPropertiesFile = project.file("project.properties");
    if (projectPropertiesFile.exists()) {
        properties.load(projectPropertiesFile.newDataInputStream())
    }
    
    /**
     * 讀取項(xiàng)目屬性
     */
    def projectRepositoryName = properties.getProperty("project.repositoryName") //倉(cāng)庫(kù)名稱
    def projectName = properties.getProperty("project.name")//項(xiàng)目名稱
    def projectGroupId = properties.getProperty("project.groupId")//項(xiàng)目Id
    def projectArtifactId = properties.getProperty("project.artifactId")//一般與項(xiàng)目名稱相同
    def projectVersionName = android.defaultConfig.versionName //項(xiàng)目版本號(hào)
    def projectPackaging = properties.getProperty("project.packaging") //項(xiàng)目打包類型
    def projectSiteUrl = properties.getProperty("project.siteUrl") //項(xiàng)目地址
    def projectGitUrl = properties.getProperty("project.gitUrl")  //項(xiàng)目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") //開發(fā)者Id
    def developerName = properties.getProperty("developer.name") //開發(fā)者名稱
    def developerEmail = properties.getProperty("developer.email") //開發(fā)者email地址
    def javadocName = properties.getProperty("javadoc.name") //javadoc名字
    
    /**
     * 這句代碼一定要加否則會(huì)出現(xiàn)如下錯(cuò)誤
     * 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文件的參數(shù)
     */
    install {
        repositories.mavenInstaller {
            pom {
                project {
                    name projectName //項(xiàng)目名
                    groupId projectGroupId //項(xiàng)目Id(一般為唯一包名)
                    artifactId projectArtifactId //一般與項(xiàng)目名相同
                    version projectVersionName //項(xiàng)目版本號(hào)
                    packaging projectPackaging //打包類型
                    url projectSiteUrl  //項(xiàng)目地址
                    licenses {
                        license {
                            name 'The Apache Software License, Version 2.0'
                            url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                        }
                    }
                    developers {
                        developer {
                            id developerId //開發(fā)者id
                            name developerName //開發(fā)者名字
                            email developerEmail //開發(fā)者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賬號(hào)信息里面的Organization Id
     * repo為你創(chuàng)建的倉(cāng)庫(kù)名稱
     * 如果上述兩個(gè)字段寫錯(cuò)了,則會(huì)出現(xiàn)下面類似的錯(cuò)誤
     * 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  //代碼倉(cāng)庫(kù)Id
            name = projectName //項(xiàng)目名稱
            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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容