在應(yīng)用發(fā)布的時(shí)候诵棵,可能面臨多種渠道發(fā)布的問(wèn)題,為了對(duì)不同渠道做統(tǒng)計(jì)祝旷,需要在應(yīng)用中表明渠道履澳,要是一個(gè)一個(gè)去改效率很低。Android Studio為我們提供了簡(jiǎn)便的方法怀跛。
使用Android Studio為不同渠道打包
可視化方法
通過(guò)快捷鍵Command+;
,或者通過(guò)File->Project Structure
的方法打開(kāi)Project Structure對(duì)話框距贷,然后選擇上面的Flavors
標(biāo)簽,在里面添加渠道就可以了吻谋。見(jiàn)圖:
![](https://chacojack.github.io/2016/07/07/%E4%BD%BF%E7%94%A8Android-Studio%E7%BB%99%E5%A4%9A%E6%B8%A0%E9%81%93%E6%89%93%E5%8C%85/QQ20160707-0.png)
例如我在這里添加了百度忠蝗,華為,聯(lián)想漓拾,小米阁最,還有一個(gè)是默認(rèn)的戒祠,我們還看到還可以為不同的渠道設(shè)置不同的信息,這里我們就先空著速种。然后點(diǎn)擊OK姜盈。我們會(huì)在
build.gradle
中android
里面自動(dòng)生成了如下代碼:
productFlavors {
baidu {}
xiaomi {}
huawei {}
lenovo {}
}
然后再在打開(kāi)AndroidManifast.xml
,在其中的application
中添加一個(gè)meta-data
配阵,這里使用友盟統(tǒng)計(jì)為例馏颂,代碼如下:
<meta-data android:name="UMENG_CHANNEL" android:value="${CHANNEL_VALUE}"/>
之后回到build.gradle
文件,在android
中添加如下代碼:
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
}
然后打開(kāi)右側(cè)的gradle
控制欄棋傍,可以看到多出了以下幾項(xiàng)饱亮。
![](https://chacojack.github.io/2016/07/07/%E4%BD%BF%E7%94%A8Android-Studio%E7%BB%99%E5%A4%9A%E6%B8%A0%E9%81%93%E6%89%93%E5%8C%85/84B161B4-3290-430B-836F-83F23FAAEB6E.png)
其中assembleBaidu
就是對(duì)百度渠道打包,其他渠道一樣舍沙。雙擊其中一個(gè)近上,就是對(duì)一個(gè)渠道單獨(dú)打包。
為了驗(yàn)證確實(shí)替換了我們?cè)O(shè)置的meta-data
的值拂铡,我創(chuàng)建了一個(gè)Activity來(lái)展示結(jié)果壹无,布局代碼省略,Activity代碼如下感帅。
public class ChannelActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_channel);
ApplicationInfo info= null;
TextView textView = (TextView) findViewById(R.id.tv_channel);
try {
info = this.getPackageManager()
.getApplicationInfo(getPackageName(),
PackageManager.GET_META_DATA);
String msg =info.metaData.getString("UMENG_CHANNEL");
textView.setText(msg);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
}
現(xiàn)在雙擊assembleXiaomi
斗锭,為小米渠道打包;
![](https://chacojack.github.io/2016/07/07/%E4%BD%BF%E7%94%A8Android-Studio%E7%BB%99%E5%A4%9A%E6%B8%A0%E9%81%93%E6%89%93%E5%8C%85/QQ20160708-0.png)
打包成功之后失球,在工程目錄的app/build/outputs/apk文件夾下可以安裝包岖是,安裝程序之后。
![](https://chacojack.github.io/2016/07/07/%E4%BD%BF%E7%94%A8Android-Studio%E7%BB%99%E5%A4%9A%E6%B8%A0%E9%81%93%E6%89%93%E5%8C%85/QQ20160707-1.png)
驗(yàn)證確實(shí)成功了实苞。
說(shuō)明一下assemble
是打所有的包豺撑,各個(gè)渠道的,debug和release包黔牵,如果只打release包就選擇assembleRelease
聪轿。正常開(kāi)發(fā)過(guò)程中,調(diào)試點(diǎn)擊運(yùn)行是打的productFlavors
列表的第一個(gè)渠道的包猾浦。