天天看點

android多管道打包一、為什麼要進行多管道打包?二、怎麼樣統計各個管道的下載下傳量呢?三、Gradle打包(本例以友盟統計為例)四、指令行打包(本例以友盟統計為例)五、文章參考

美團多管道打包以快出名,早有耳聞,但總覺得神龍見首不見尾,大多文章都是講原理的東西,卻始終難懂到底怎麼樣用,今天就以初學者的姿态一邊探索,一邊總結,也希望能幫住大家少走寫冤枉路。

首先,明白幾個問題:

一、為什麼要進行多管道打包?

安卓應用商店(一個商店也叫做一個管道,如360,baidu,xiaomi)衆多,大大小小幾百個,我們釋出應用之後需要統計各個管道的使用者下載下傳量,是以才有了多管道打包。

二、怎麼樣統計各個管道的下載下傳量呢?

現在有比較成熟的第三方應用幫我們實作統計功能(比如友盟、騰訊統計分析),統計的本質就是收集使用者資訊傳輸到背景,背景生成報表,幫助我們跟蹤分析并完善app。通過系統的方法已經可以擷取到,版本号,版本名稱,系統版本,機型,地區等各種資訊,唯獨應用商店(管道)的資訊我們是沒有辦法從系統擷取到的,是以我們就人為的在apk裡面添加管道資訊(其實就用一個字段進行辨別,如360,baidu),我們隻要把這些資訊打包到apk檔案并将資訊傳輸到背景,背景根據這個辨別,可以統計各個管道的下載下傳量了,并沒有多麼的高大上。

說了那麼多,其實多管道打包隻需要關注兩件事情:

  • 将管道資訊寫入apk檔案
  • 将apk中的管道資訊傳輸到統計背景

其實網上大多數文章都隻是告訴讀者“怎麼樣将管道資訊寫入apk檔案”這一個步驟,導緻一些初學者摸不着頭腦(我就是其中一個),那麼,然後呢?這樣就行了嗎?總覺得缺了點什麼。

三、Gradle打包(本例以友盟統計為例)

1:在AndroidMainfest.xml配置可動态替換的管道參數**

<meta-data
    android:name="UMENG_CHANNEL"
    android:value="xiaomi" /><!--管道号為:小米-->
           

如果想動态的替換管道号怎麼辦呢?

<meta-data

android:name="UMENG_CHANNEL"

android:value="${CHANNEL_ID}" /><!--動态替換管道号-->
           

${CHANNEL_ID}

為占位符,其中的

CHANNEL_ID

可以自己任意定義

2:在build.gradle設定productFlavors

android {  
    productFlavors {
        xiaomi {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
        }
        _360 {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "_360"]
        }
        baidu {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
        }
        wandoujia {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
        }
    }  
}
           

或者批量修改

android {  
    productFlavors {
        xiaomi {}
        _360 {}
        baidu {}
        wandoujia {}
    }  

    productFlavors.all { 
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] 
    }
}
           

3:使用gradle打包

AS為我們提供了圖形界面的方式,點選菜單欄 —> Build —> Generate Signed APK (輸入相關的簽名證書路徑和密碼)—> 一步步下去 —> Flavors中全選—> Finish.

android多管道打包一、為什麼要進行多管道打包?二、怎麼樣統計各個管道的下載下傳量呢?三、Gradle打包(本例以友盟統計為例)四、指令行打包(本例以友盟統計為例)五、文章參考
android多管道打包一、為什麼要進行多管道打包?二、怎麼樣統計各個管道的下載下傳量呢?三、Gradle打包(本例以友盟統計為例)四、指令行打包(本例以友盟統計為例)五、文章參考

四、指令行打包(本例以友盟統計為例)

1:在AndroidMainfest.xml配置可動态替換的管道參數

<meta-data
    android:name="UMENG_CHANNEL"
    android:value="xiaomi" /><!--管道号為:小米-->
           

如果想動态的替換管道号怎麼辦呢?

<meta-data

android:name="UMENG_CHANNEL"

android:value="${CHANNEL_ID}" /><!--動态替換管道号-->
           

${CHANNEL_ID}

為占位符,其中的

CHANNEL_ID

可以自己任意定義

2:在項目的build.gradle檔案中設定打包簽名資訊 signingConfigs:

新浪微網誌SSO登入,微信分享這些都需要簽名打包,才能看到效果,設定預設簽名檔案為自己的簽名jks,這樣就不需要打包了直接運作起來就是正式的簽名。

在android.signingConfigs{}下定義一個或者多個簽名資訊,然後在buildTypes{}配置使用即可。

在app目錄下添加你的.jks,然後app的build.gradle檔案中的增加以下内容:

(1)debug版本

android {  
    signingConfigs {  
        debug {  
            storeFile file("WuXiaolong.jks")
            storePassword 'android'
            keyAlias 'android'
            keyPassword 'android'
        }          
    }   
}
           

buildTypes沒有配置,也是直接取得debug,是不是不配置預設取得是debug呢?

(2)release版本

android {  
    signingConfigs {  
        release {  
            storeFile file("WuXiaolong.jks")
            storePassword 'android'
            keyAlias 'android'
            keyPassword 'android'
        }          
    }  
    buildTypes {
        debug {
            signingConfig signingConfigs.release
        }        
    }
}
           

3:在build.gradle設定productFlavors

android {  
    productFlavors {
        xiaomi {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
        }
        _360 {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "_360"]
        }
        baidu {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
        }
        wandoujia {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
        }
    }  
}
           

或者批量修改

android {  
    productFlavors {
        xiaomi {}
        _360 {}
        baidu {}
        wandoujia {}
    }  

    productFlavors.all { 
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] 
    }
}
           

4:使用指令行打包

在AS的内置終端Terminal工具中執行指令:

./gradlew assembleRelease
(所有生成的apk在項目的build\outputs\apk下)
           

五、文章參考

http://www.jianshu.com/p/2f2ce33e670f

http://stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/

http://wuxiaolong.me/2016/04/01/gradle4android3/

https://as.quanke.name/%E5%A4%9A%E6%B8%A0%E9%81%93%E6%89%93%E5%8C%85.html

繼續閱讀