Android gradle 相關配置

有時候咱們須要重命名輸出apk文件名,在Android studio 3.0之前咱們是這樣寫的:android

applicationVariants.all { variant ->
            variant.outputs.each { output ->
                def outputFile = output.outputFile
                if (outputFile != null && outputFile.name.endsWith('.apk')) {
                    //這裏修改apk文件名
                    def fileName = getProject().name + "-" + variant.baseName + "-${defaultConfig.versionName}.apk"
                    output.outputFile = new File(outputFile.parent, fileName)
                }
            }
        }

可是在android studio 3.0以後這個寫法就會報錯:api

Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=debug, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl.
Open File

這個錯誤大概意思就是outputFile這個引用如今是「read-only 」(只讀)的,不能從新賦予新的對象。服務器

通過多方折騰驗證,最後正確的寫法是這樣的:app

applicationVariants.all { variant ->
            variant.outputs.all { output ->
                def outputFile = output.outputFile
                if (outputFile != null && outputFile.name.endsWith('.apk')) {
                    //這裏修改apk文件名
                    def fileName = getProject().name + "-" + variant.baseName + "-${defaultConfig.versionName}.apk"
                    outputFileName = fileName
                }
            }
        }

須要注意的是原先的 variant.outputs.each 必定要改爲 variant.outputs.all,否則也會報錯的哦。maven

那麼若是你的項目是SDK而不是app呢,那就騷味改動下:gradle

libraryVariants.all { variant ->
            variant.outputs.all { output ->
                def outputFile = output.outputFile
                if (outputFile != null && outputFile.name.endsWith('.aar')) {
                    //這裏修改apk文件名
                    def fileName = getProject().name + "-" + variant.baseName + "-${defaultConfig.versionName}.aar"
                    outputFileName = fileName
                }
            }
        }

嗯,沒錯就是把 applicationVariants改爲libraryVariants就行了。ui

 

接下來講說maven的發佈腳本:url

首先在頭部添加:spa

apply plugin: "maven"
apply plugin: 'signing'

而後:debug

//============發佈腳本=================
//maven 倉庫地址

//ext.RELEASE_URL = 'file://localhost/Users/Admin/mySDK'//本地倉庫
//ext.SNAPSHOT_URL = 'file://localhost/Users/Admin/maven-snapshots'

ext.RELEASE_URL =  'http://127.0.0.1:8081/repository/maven-releases/'
ext.SNAPSHOT_URL = 'http://127.0.0.1:8081/repository/maven-snapshots/'
//用戶名和密碼
ext.USERNAME = 'username'
ext.PWD = 'pwd'

// 判斷版本是Release or Snapshots
def isReleaseBuild() {
    return !android.defaultConfig.versionName.contains("SNAPSHOT")
}

// 獲取倉庫url
def getRepositoryUrl() {
    return isReleaseBuild() ? RELEASE_URL : SNAPSHOT_URL
}


uploadArchives {
    repositories {
        mavenDeployer {
            beforeDeployment {
                MavenDeployment deployment -> signing.signPom(deployment)
            }

            repository(url: RELEASE_URL) {
                authentication(userName: USERNAME, password: PWD)
            }

            snapshotRepository(url: SNAPSHOT_URL) {
                authentication(userName: USERNAME, password: PWD)
            }


            pom.project {
                version android.defaultConfig.versionName //版本號
                artifactId 'projectName' //項目名
                groupId 'com.demo.test' //包名,也能夠是其餘的惟一標識
                packaging 'aar' //打包方式
                description 'test' //描述
            }
        }
    }
}

// 進行數字簽名
signing {
    // 當 發佈版本 & 存在"uploadArchives"任務時,才執行
    required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") }
    sign configurations.archives
}

固然,maven倉庫地址也能夠改爲你本地地址,不用裝maven環境也能夠。

這裏說下碰到的一個坑,一旦你經過maven發佈後,發現有點小問題,改了下代碼,可是並無改版本號再執行腳本從新發布,雖然腳本執行成功,實際上服務器上的包並無更新,哪怕你把服務器上的包刪掉再發布也沒用,必需要更新版本號纔有效,因此在發佈release版本前先發SNAPSHOT版驗證,驗證好再發布release,以避免遇到沒必要要的問題。

 最後就是引用:

dependencies {
     .....
     implementation 'com.demo.test:test:1.0.0@aar'  
}
repositories {
//maven { url 'file://D:/Users/Admin/mySDK' }//本地倉庫
//maven { url 'file://D:/Users/Admin/maven-snapshots' } maven { url
'http://127.0.0.1:8081/repository/maven-releases/' } maven { url 'http://127.0.0.1:8081/repository/maven-snapshots/' } mavenCentral() }
相關文章
相關標籤/搜索