Android---Android Studio開發技巧:(命令行打包)

一、用Gradle命令行進行打包

1.配置Gradle渠道包
// 渠道包
productFlavors {
    default_channel {}
    wandoujia {}
    _360 {}
    yingyongbao {}
    xiaomi {}
    baidu {}
    huawei {}
    jifeng {}
}
productFlavors.all { flavor ->
    flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE:name]
}

2.配置Gradle環境變量
   打開bash.profile

   設置gradle的目錄
    
    保存退出bash文件。

3.簽名設置
    build.gradle文件
// 簽名設置
signingConfigs {
    release {
       //簽名文件路徑,絕對路徑
       storeFile file('/Users/Bill/CODE/OLDSVN/PhysicianAssistant/assistant_key.jks')
       storePassword '123456' //密碼
       keyAlias 'assistant'
       keyPassword '123456'  //密碼
   }
}
buildTypes {

    release {
       signingConfig signingConfigs.release

       // 混淆
       minifyEnabled true
       proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'

       // 不顯示Log
       buildConfigField "boolean", "LOG_DEBUG","false"

       //Zipalign優化
       zipAlignEnabled true

       // 移除無用的resource文件
       shrinkResources true

       //打包是替換指定manifest文件中節點的數據
       manifestPlaceholders= [UMENG_APPKEY_VALUE:'5795f876e0f55a612f000c45']
    }

    debug {
       minifyEnabled false
       proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'

       buildConfigField "boolean", "LOG_DEBUG","true"

       zipAlignEnabled true
       shrinkResources false

       //打包是替換指定manifest文件中節點的數據
       manifestPlaceholders= [UMENG_APPKEY_VALUE:'571d8695e0f55a2bc0000776']
    }
}

4.命令行應用
   進入項目所在根目錄;
    
  執行命令:gradle assembleRelease  生成release版本     或者: ./gradlew assemableRelease
                    gradle assembleDebug    生成debug版本      

 如果我們想打包wandoujia渠道的release版本,執行如下命令就好了:
gradlew assembleWandoujiaRelease
 如果我們想打包wandoujia渠道的debug版本,執行如下命令就好了:
    gradlew assembleWandoujiaDebug
    
 如果我們只打wandoujia渠道版本,則:
    gradlew assembleWandoujia
     
    
   最終生成的文件在項目根目錄,build—outputs—apk目錄下;

自定義打包名稱:
**************************************** 分 割 線 *********************************************************

    AndroidStudio 一鍵多渠道打包實現方法,如果你還在手動的對每個市場進行打包,先不說 Low 不 Low,自己也會覺得很痛苦對吧,甚至有的同學使用 Windows build 打包一次就得 3-5min;打 6 個市場包半個小時就過去了,最重要的是這個過程中還有可能出現錯誤,增加測試的難度與成本。
多渠道打包也有很多種方式;有遠程的 jenkins + gradle +github 等方法;網上資料很多,由於這種方式需要的配置環境比較繁瑣;適用於需要大量打包的企業,並且需要遠程打包的需求;本文將介紹 Android Studio 本地一鍵打包與自動配置簽名的方法;
廢話說這個多,現在開始搞定多渠道打包;

一、在 AndroidManifest.xml 裏設置動態渠道變量

?
1
2
3
<!-- 自動升級類型  self、_360、baidu -->
        <meta-data android:name="sdk_key_version_update_type"android:value="${CHANNEL_VALUE}">
</meta-data>

二、在 build.gradle 設置 productFlavors

這裏假定我們需要打包的渠道爲 360、google、百度 以及本公司

方法 1:直接在 app:gradle 下配置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
android { 
 
    defaultConfig {
        ...
        flavorDimensions"versionCode"
    }
    productFlavors {
        google {
            manifestPlaceholders = [CHANNEL_VALUE: "google"]
        }
        qh360 {
            manifestPlaceholders = [CHANNEL_VALUE: "360"]
        }
        baidu {
            manifestPlaceholders = [CHANNEL_VALUE: "baidu"]
        }
        self {
            manifestPlaceholders = [CHANNEL_VALUE: "self"]
        }
    
}
 
或者批量修改
 
defaultConfig {
        ...
        flavorDimensions"versionCode"
    }
 
android { 
    productFlavors {
        kuan {}
        xiaomi {}
        qh360 {}
        baidu {}
        wandoujia {}
    
 
    productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
    }
}
上面這個配置的作用就是,爲每個渠道包產生不同的 CHANNEL_VALUE 的值。這裏需要注意的是你對應的標籤與配置的 Name 獲取邏輯一定要保持一致,否則會出現找不到的邏輯異常。

方法 2:通過快捷鍵 command + ; 打開配置界面。( Windows 對應的快捷鍵 Ctrl + Alt + Shift + S )並添加對應的配置渠道。如下圖:


注意:這裏僅修改 Name 即可,其他信息無特別需求不要修改

三、執行打包操作

打開 Build App 界面:

輸入對應的信息點擊 Next:

選中對應的渠道版本點擊 Finish 即可在項目的 app: 目錄 下看到對應的apk文件。

四、執行打包命令 ./gradlew assembleRelease

除了使用 AndroidStudio 圖形打包操作以外,我們也可以使用命令行進行打包操作,具體步驟如下:
在 AndroidStudio 窗口左下角打開 Terminal 面板,輸入 gradlew assembleRelease 命令即可。

五、配置簽名文件

由於使用命令時打出的包是未簽名的文件,這個和我們的一鍵打包還有些瑕疵。對此我們需要配置下簽名文件。
首先在項目目錄下的 gradle.properies 下配置簽名文件的 keyPassWord 與 storePassWord 。
?
1
2
APK_SIGN_KEY_PASSWORD=******
APK_SIGN_STORE_PASSWORD=******

這樣做得好處是沒必要把對應的密碼暴露出去
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//簽名
signingConfigs {
    release{
        keyAlias'1'
        keyPassword APK_SIGN_KEY_PASSWORD
        storeFile file('../snaillove.keystore')
        storePassword APK_SIGN_STORE_PASSWORD
    }
    debug{
        keyAlias'1'
        keyPassword APK_SIGN_KEY_PASSWORD
        storeFile file('../snaillove.keystore')
        storePassword APK_SIGN_STORE_PASSWORD
    }
 
}
 
buildTypes {
    release {
        //啓用混淆代碼的功能
        minifyEnabledfalse
        //指定混淆規則,需要壓縮優化的混淆要把proguard-android.txt換成proguard-android.txt
        proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
        signingConfig signingConfigs.release
    }
}
注意:一定要把 signingConfigs 文件配置到 buildTypes 前面 否則會編譯時拋出異常 Could not find property ‘debugConfig’ on SigningConfig container.

配置自定義打包路徑與名稱

生成對應的 APK 後,如果還需要我們手動的去修改對應的名稱或者路徑,是否根標題的一鍵還有些距離?OK,接着來,這裏我們輸出 apk 名稱爲 com_biniusports_app_bnsports_v1.0.0_20171205_baidu.apk 的路徑:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    android {
        // 自定義APK輸出配置
        applicationVariants.all { variant ->
        variant.outputs.all { output ->
            def outputFile = output.outputFile
            if(outputFile != null && outputFile.name.endsWith('.apk')) {
                // 輸出apk名稱爲com_biniusports_app_bnsports_v1.0.0_20171205_baidu.apk
                def fileName = "com_biniusports_app_bnsports_v${defaultConfig.versionName}_${getNowTime()}_${variant.productFlavors[0].name}.apk"
                outputFileName = fileName
                }
            }
        }
    }
 
//獲取時間戳
def getNowTime() {
    def date = new Date()
    def now = date.format('yyyyMMdd')
    returnnow
}

注意:Android Studio 版本大於 3.0 時不要使用v ariant.outputs.each 進行查找內容並且不要使用 new File(outputFile.parent, fileName),否則會拋出異常 Android Gradle 3.0.0-alpha2 plugin, Cannot set the value of read-only property ‘outputFile’。
完成以上配置後,即可開心的點擊運行按鈕進行簽名打包了;

如出現如圖的路徑與對應的 APK 名稱,恭喜你,本地一鍵多渠道打包已收入囊中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章