Android Studio 多渠道打包、自动版本号及 gradlew 命令的基本使用
Android Studio 真可謂神器,詳細請點這里:打造安卓開發航空母艦
這里介紹其多渠道打包:
1 建立多渠道
這里介紹一種簡單的,直接as操作:
直接上圖咯,在項目結構你添加flavor就好了
確定后,項目會自動同步,完成后,渠道就配置好了。
當然,也可以直接在gradle腳本里操作:
android {productFlavors {dev {manifestPlaceholders = [channel: "dev"]}official {manifestPlaceholders = [channel: "official"]}xiaomi {manifestPlaceholders = [channel: "xiaomi"]}wandoujia {manifestPlaceholders = [channel: "wandoujia"]}"360" {manifestPlaceholders = [channel: "360"]}} }項目同步好后,會發現Build Variant會多了很多渠道
2 打包
上面的各種variant,你需要選擇一個,然后build和run的時候只會構建運行這一個variant,全部打包的話,這里采用命令行,我知道的as全部打包是需要簽名的,大家有知道的不需要簽名的方法麻煩告知。
gradlew build這樣就會把所有的包打好,每種渠道的debug和release版本都會打包。
上面幾個包一共用了半分鐘多點。這個包的文件名帶時間版本號等信息是怎么來的呢,當然這得益于gradle強大的功能,后面會講到的。
而as打包需要就是build --> Generated signed APK,這樣你選擇下就可以把所有渠道打包。
最近發現了個下一代Android打包工具,1000個渠道包只需要5秒鐘
自動版本號
昨天 2016.03.02 剛發現的好東西,更優雅的 Android 發布自動版本號方案
這里簡單總結下,配合 git 獲取軟件版本號和版本名
- 版本號 versionCode
使用 Git 中 commit 的數量來作為版本號——versionCode
def cmd = 'git rev-list HEAD --first-parent --count' def gitVersion = cmd.execute().text.trim().toInteger()android { defaultConfig {versionCode gitVersion} }- 版本名 versionName
使用 git describe,獲取從當期 commit 到距離它最近的 tag 的描述。默認都是 annoted tag,如果要指所有的類型的 tag 的話,就加 --tags 參數。
def cmd = 'git describe --tags' def version = cmd.execute().text.trim()android { defaultConfig {versionName version} }最終的腳本詳見后文。
gradlew 命令
gradlew 是什么東西呢,和gradle貌似不大一樣,肯定有關系。沒錯,他就是 gradle wrapper,意思是gradle的一個包裝,大家可以理解為在這個項目本地就封裝了gradle,比如我的項目是HelloWord, 在HelloWord/gradle/wrapper/gralde-wrapper.properties文件中聲明了它指向的目錄和版本,比如我的內容是:
#Thu Dec 28 20:02:55 CST 2015 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip如果你項目沒有該文件的話,那么gradlew會到~/.gradle/wrapper/dists/gradle-2.10-all下尋找,或者你新建給文件,內容復制到里面。其實你會發現是同一個目錄咯。里面會有個隨機數的文件夾,里面就是gradle,只要下載成功即可用grdlew wrapper的命令代替全局的gradle命令。
常用命令如下:(linux下是./gradlew,該腳本在項目下,windows直接gradlew即可)
- ./gradlew -v 版本號,首次運行,沒有gradle的要下載的哦。
gradlev
./gradlew clean 刪除HelloWord/app目錄下的build文件夾
./gradlew build 檢查依賴并編譯打包
這里注意的是 ./gradlew build 命令把debug、release環境的包都打出來,生成的包在目錄HelloWord/app/build/outputs/apk/下。如果正式發布只需要打release的包,該怎么辦呢,下面介紹一個很有用的命令?assemble, 如
./gradlew assembleDebug 編譯并打Debug包
./gradlew assemblexiaomiDebug 編譯并打xiaomi的debug包,其他類似
./gradlew assembleRelease 編譯并打Release的包
./gradlew assemblexiaomiRelease 編譯并打xiaomi的Release包,其他類似
./gradlew installRelease Release模式打包并安裝
./gradlew uninstallRelease 卸載Release模式包
補充
1?gradlew build 和 gradle build 有區別嗎?
使用gradle wrapper是gradle官方推薦的build方式,而gradlew正是運行了wrapper task之后生成的(運行wrapper task是Android Studio自動做的)。使用gralde wrapper的一個好處就是每個項目可以依賴不同版本的gradle,構建的時候gradle wrapper會幫你自動下載所依賴的版本的gradle。而如果你使用gradle build的話,同時你又有多個項目使用不同版本的gradle,那就需要你手動在自己的機器上配置多個版本的gradle,稍微麻煩一些
2 自定義apk包名
gradle腳本大法好:
def releaseTime() {return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC")) }def gitVersionCode() {def cmd = 'git rev-list HEAD --first-parent --count'cmd.execute().text.trim().toInteger() }def gitVersionTag() {def cmd = 'git describe --tags'def version = cmd.execute().text.trim()def pattern = "-(\\d+)-g"def matcher = version =~ patternif (matcher) {version = version.substring(0, matcher.start()) + "." + matcher[0][1]} else {version = version + ".0"}return version }//自定義apk安裝包名 applicationVariants.all { variant ->variant.mergedFlavor.versionCode = gitVersionCode()variant.mergedFlavor.versionName = gitVersionTag()variant.outputs.each { output ->output.outputFile = new File(output.outputFile.parent + "/${variant.buildType.name}","HelloWord-${variant.buildType.name}-v${variant.versionName}-${variant.productFlavors[0].name}-${releaseTime()}.apk".toLowerCase())} }參考文章:
Android Studio系列教程五--Gradle命令詳解與導入第三方包
Android打包的那些事
更優雅的 Android 發布自動版本號方案
總結
以上是生活随笔為你收集整理的Android Studio 多渠道打包、自动版本号及 gradlew 命令的基本使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 使用jarsigner给
- 下一篇: 四字成语什么猴捞月