Android打包(一)
最近出了一點事,比較煩,所以很長一段時間沒怎么去寫文章。為了防止生疏,還是覺得隨便寫寫點什么,我覺得打包還是挺有意思的,所以打算試試看,因為以前的項目打包是不歸我管,既然沒做過,那就試試吧。
一.初試打包
看了下,其實打包不難理解(這里的打包就是多渠道那些了),有點難度的是理解它的原理,所以我覺得可以先玩玩打包,玩爽了,原理也容易懂了。
1.在gradle中添加代碼塊
要配置打包的話,需要在gradle中添加一個productFlavors方法
productFlavors{myOne{manifestPlaceholders = [APP_NAME: "myOne"]}myTwo{manifestPlaceholders = [APP_NAME: "myTwo"]}}比如我這里就分了兩個不同的包myOne和myTwo。
2.系統默認的打包
就一般情況下,androidstudio會默認配置幫你配好兩個包release和debug,比如我新創的一個項目,在gradle中就有一個這樣的代碼塊
buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}這里沒有debug了,因為如果直接調試就是debug了,沒必要再打包。
但是這兩個還是有區別的,在buildTypes方法中主要是配置release 和debug的包,在productFlavors方法中可以配置自定義的包,也可以做一些個性化的操作。
3.效果
其實效果是可以選的,androidstudio的打包到最后的可視化頁面中會讓用戶去選擇打什么包。
image.png手動打包到最后一步有選
DLP{X%%3%S6AB2FFS0LX$HL.png
可以看出Build Tyoe對應buildTypes ,Flavors對應productFlavors,命令打包下面說。我這里主要是為了說你在gradle的productFlavors方法中配置不同包的話,手動打包的時候可以選擇打哪個配置的包。
二.更改包名
為了區分不同的包,我決定更改包名,其實這里就是想說說怎么在gradle和manifests中傳值。
1.在manifests中設置變量
我先在manifests中設置變量。
image.png
我把label標簽的值設置成${APP_NAME} ,這是manifests里面的語法,我覺得語法這種東西沒必要解釋這么多,就像如果用過DataBinding的話會在manifests中寫更多的變量。
2.在編譯時設置
image.png可以在gradle中用manifestPlaceholders來設置manifest中的變量。原理比較抽象之后會說,先會用就行。
3.結果
image.png結果你會發現打出來的包中apk的名稱會不同,所以相應的我們同樣可以去換APP的icon之類的。
我覺得這就是打包的原理了,上面幾步都很簡單,我覺得唯一郁悶的就是它的這個命名,有一種翻譯不出中文味道的感覺。
對了,如果想換不同包調試的話,這里可以選
image.png
三.命令打包
在Terminal窗口中輸入命令gradlew assembleRelease可以把所有的包打出來,當然這個命令很多,需要用到哪個可以自己去查,打出來之后發現會是這樣子
后面顯示未簽名,所以我們需要在腳本中加入簽名的信息
先自己創建一個簽名,然后在代碼中配置這個簽名 signingConfigs {release {storeFile file("test.jks")storePassword "123456"keyAlias "test"keyPassword "123456"}}
然后再buildTypes的release添加這個簽名
image.png
之后就能導出簽名的包了
image.png
四.walle打包
這個是一個美團的多渠道打包的插件,為什么要用這個插件呢,直接用上面的方法不就行了嗎,有時候需要打包多,項目大,一個包要打很長時間,這種情況如果一個一個打就會花費很長時間。
好吧,我用walle的最大原因就是能節省打包的時間,而且修改的時候方便。
1.導入插件
這個應該直接上https://github.com/Meituan-Dianping/walle看,當前的版本的導入方法是。
在主模塊的gradle中
walle里面的意思在項目地址里面有詳細的說明,我就不再多解釋。
在項目的gradle中配置
buildscript {repositories {jcenter()}dependencies {classpath 'com.android.tools.build:gradle:2.2.3'classpath 'com.meituan.android.walle:plugin:1.1.5'} }然后寫個多渠道的文件
image.png
${project.getProjectDir()}是app目錄,我這是是在app目錄下創建一個channel.txt的文件,按照官方的做法寫渠道。
image.png
你取什么名都行,相應配置就行。目標文件也是,取什么名,放哪里,主要是在walle 方法中配置就行,我這里的目標文件是app文件夾下的outputs文件夾下的channels文件夾。
用命令打所有的包:gradlew clean assembleReleaseChannels , mac系統要在前面加./
這樣就可以導出所有包了,還有其它的命令可以在項目地址里面看,我這里只寫了導所有。
image.png然后channels文件夾下就有所有所配置的渠道的包。這個插件用起來還是很方便的。
總結
以上是生活随笔為你收集整理的Android打包(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多文件目录下makefile文件递归执行
- 下一篇: android sina oauth2.