Android 多渠道打包

爲什麼要有多渠道打包?

答:由於現在應用市場繁多,爲了統計各個應用市場用戶的下載量、活躍量,還可以分析用戶操作習慣,優化我們的APP。


以友盟爲例(因爲我用的就是它),需要在AndroidManifest.xml裏面添加:

<meta-data
            android:name="UMENG_CHANNEL"
            android:value="Channel_ID" />

我們的原理就是用各個渠道的標識來替換“Channel_ID”值。

1、對AndroidManifest.xml中的“Channel_ID”使用placeHolder

<meta-data
        android:name="UMENG_CHANNEL"
        android:value="${UMENG_CHANNEL_VALUE}" />


2、在模塊下的build.gradle文件中的defaultConfig中添加下面代碼

 manifestPlaceholders = [ UMENG_CHANNEL_VALUE:"_default" ]

 注意:在Plugin 3.0.0之後有一種自動匹配消耗庫的機制,便於debug variant 自動消耗一個庫,然後就是必須要所有的flavor 都屬於同一個維度。需要多添加一句:flavorDimensions "versionCode"

android {
    ...

    defaultConfig {
        ...
    flavorDimensions "versionCode"
        manifestPlaceholders = [ UMENG_CHANNEL_VALUE:"_default" ]
    }   
}

 其中,“_default”是指默認值。

3、在build.gradle中的android{}中添加ProductFlavors配置
 
注意:渠道名不能以數字開頭

productFlavors {
        _default{}
        wandoujia{}
        _360{}
        yingyongbao{}
        xiaomi{}
        huawei{}
    }
    productFlavors.all { flavor ->
        flavor.manifestPlaceholders = [ UMENG_CHANNEL_VALUE:name ]
    }
4、這樣我們就可以通過圖形界面或Terminal進行多渠道打包了

 
1、使用圖形界面的話,按住ctrl點中你想要打的渠道,然後點擊Finish開始打包


 
2、使用Terminal的話,輸入 gradlew assembleRelease ,打出所有正式版的包;
 
如果想單獨打某一個渠道的,輸入 gradlew assemble_360Release 即可


 
如果你還沒有生成密鑰庫,打出來的包名中會有“unsigned”的標識,也就是未簽名。

不知道如何給應用簽名的話,可以看我的上一遍博客:Android項目簽名、打包(使用圖形界面和Terminal)


 3、通過Gradle tasks面板進行打包

  打開Android Studio的Gradle tasks面板(右邊側邊欄),會發現模塊多了很多任務,想打哪個包,就雙擊哪個。

 

 

 Gradle常用命令

 gradlew代表 gradle wrapper,意思是gradle的一層包裝,大家可以理解爲在這個項目本地就封裝了gradle,即gradle wrapper。

 下面列舉了幾個常見的命令:

 gradlew -v:版本號

 gradlew clean:把之前打包所產生的所有文件全部清除

 gradlew build:檢查依賴並編譯打包

 這裏注意的是 gradlew build 命令把debug、release環境的包都打出來

 gradlew assembleDebug 編譯並打Debug包

 gradlew assembleRelease 編譯並打Release的包


參考:

http://www.cnblogs.com/shanpow/p/4097320.html

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