1. 程式人生 > >Android開發之Gradle筆記整理2-Gradle常用命令及UMeng多渠道打包實戰

Android開發之Gradle筆記整理2-Gradle常用命令及UMeng多渠道打包實戰

Title:Android開發之Gradle筆記整理2——Gradle常用命令及UMeng多渠道打包實戰
Date:2015-04-06 21:54:47
Category:Android Develop
Tag:技術,生活,Android Develop
Author:EricTang

在前一篇部落格裡我們簡單快速的學習了一下Gradle的基本安裝和配置,以及解決了其中遇到的一些小的錯誤,這篇文章裡我們來小小的實踐一下,本身也是在Android開發中必不可少的技能。

修改build.gradle檔案

接著之前的專案繼續看,我們修改一下Module中的build.gradle檔案,這裡也不做過多講解了,註釋都在檔案中,慢慢看,還是比較容易懂的:

apply plugin: 'com.android.application'

repositories {
    jcenter()
}

android {
    compileSdkVersion 19
    buildToolsVersion "21.1.1"

    defaultConfig {
        applicationId "com.aiscot.gradle.test"
        minSdkVersion 9
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
// 修改dex 65536的限制 multiDexEnabled true // AndroidManifest.xml檔案中UMENG_CHANNEL的value為${UMENG_CHANNEL_VALUE} manifestPlaceholders = [UMENG_CHANNEL_VALUE: "channel_name"] } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } // 簽名檔案
signingConfigs { debug { // debug簽名 storeFile file("/path/xx-debug.jks") storePassword "密碼" keyAlias "別名" keyPassword "簽名金鑰的密碼" } release { // relase簽名 storeFile file("/path/xx-release.jks") storePassword "密碼" keyAlias "別名" keyPassword "簽名金鑰的密碼" } } // 構建型別 buildTypes { debug { // debug模式下,顯示log buildConfigField("boolean", "LOG_DEBUG", "true") // 版本名字首 versionNameSuffix "-debug" // 不開啟混淆 minifyEnabled false // 不開啟ZipAlign優化 zipAlignEnabled false // 不移除無用的resource檔案 shrinkResources false // 使用debug簽名 signingConfig signingConfigs.debug } release { // release模式下,不顯示log buildConfigField("boolean", "LOG_DEBUG", "false") // 版本名字首 versionNameSuffix "-relase" // 開啟混淆 minifyEnabled true // 開啟ZipAlign優化 zipAlignEnabled true // 移除無用的resource檔案 shrinkResources true // 使用release簽名 signingConfig signingConfigs.release // 混淆檔案位置 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } // 渠道Flavors,配置不同的渠道 productFlavors { GooglePaly {} xiaomi {} umeng {} _360 {} wandoujia {} yingyongbao {} whatever {} } // 批量配置渠道 productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] } applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { def fileName = outputFile.name.replace(".apk", "-${defaultConfig.versionName}.apk") output.outputFile = new File(outputFile.parent, fileName) } } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:19.+' }

重點需要講解的地方:

  1. signingConfigs中的debug簽名和release簽名,都可以寫絕對路徑,當然,也可以通過指定形如debug{storeFile file("xx-debug.jks")}這樣兒的配置,只不過需要注意,如果使用這樣兒的方式,簽名檔案需要放在專案中

  2. UMeng官方的多渠道打包整合文件中指定,如果使用Gradle打包的方式的話,需要在build.gradle檔案中的dependencies中新增如下的依賴:

    dependencies {
        compile 'com.umeng.analytics:analytics:latest.integration'
    }

這裡我的想法是,build.grade檔案中已經包含了libs目錄下所有的jar包了

    compile fileTree(dir: 'libs', include: ['*.jar'])

所以我們其實可以直接把UMeng的jar包丟到這個目錄下即可(寫這篇部落格的時候,我並不是很確定,寫完了之後,測試完了,是正常的,所以這裡應該是沒有問題的,暫時沒有做進一步的研究)

整合UMeng統計
  1. 配置manifest檔案,UMeng的渠道統計需要在manifest檔案中新增許可權,注意,需要跟應用中已有的全選做下對比,避免重複
    <!-- UMeng統計所需許可權 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <!-- UMeng統計所需許可權 -->

同時,還需要加入UMeng的AppKey,和Channel ID,需要注意的是,這裡的UMENG_CHANNEL的value需要寫成 ${UMENG_CHANNEL_VALUE},因為我們需要在build.gradle檔案中對其進行操作,自動替換的

    <!-- UMeng統計的Key和Channel -->
    <meta-data android:name=“UMENG_APPKEY” android:value="APPKEY"/>
    <meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}"/>
    <!-- UMeng統計的Key和Channel -->

然後需要在每個Activity的onResume方法中呼叫MobclickAgent.onResume(Context), onPause方法中呼叫MobclickAgent.onPause(Context)

  1. 然後看我們在build.gradle檔案中的配置:
    // 渠道Flavors,配置不同的渠道
    productFlavors {
        GooglePaly {}
        xiaomi {}
        umeng {}
        _360 {}
        wandoujia {}
        yingyongbao {}
    }
    // 批量配置渠道
    productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }

然後關於UMeng的多渠道配置就基本完成了,接下來我們需要做的,就是了解Gradle的常用命令,並且進行打包操作了。

Gradle自動打包

開啟終端,cd到Gradle專案所在的目錄,啊?等下,我們用的是Idea啊,沒必要的啊,來,跟我來,找到Idea專案介面最下方:

img

看到Terminal的字樣了麼?點它

img

自然就已經在專案的根目錄下了

這時候,我們只需要執行 ./gradlew assembleRelease 命令,就可以完成release版本的各渠道的打包工作了,這裡需要注意的是,如果是第一次執行該命令的話,會自動去下載Gradle。。額,沒錯兒,是自動去下載,即使是我們已經下載安裝過Gradle了。。所以第一次的話,可能時間稍長,當時我測試的情況是6個渠道包,大概耗時3分35秒左右的樣子,後面的話就會快很多了,大概耗時10秒左右。

其他的命令還有:

  1. ./gradlew assembleDebug —— 打包debug版本

  2. ./gradlew assembleXiaomiRelease —— 單獨打包小米應用市場渠道的release版本

  3. ./gradlew assembleXiaomi —— 單獨打包小米應用市場渠道的debug和release版本

關於Gradle多渠道打包的就暫時先寫到這裡,如果到時候渠道包太多,覺得Gradle速度太慢每次都要構建一次的話,也確實可以參考美團的打包方案,也是可行的。