使用gradle多渠道打包

以友盟的多渠道打包爲例,假設我們需要打包出如下渠道:UMENG, WANDOUJIA, YINGYONGBAO。

第一種方法,是需要創建文件的。

我們在寫完我們的代碼之後,在app/src下面,分別創建和main同級目錄的文件夾umeng, wandoujia, yingyongbao,這三個文件夾裏面都各只有一個AndroidManifest.xml文件,文件只需要如下:

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     package="your.package.name">  
  3.     <application>  
  4.   
  5.           <meta-data android:name="UMENG_CHANNEL" android:value="UMENG"/>  
  6.   
  7.     </application>  
  8. </manifest>  
注意,上面的value的值要和你的渠道名所對應。比如wandoujia裏面要對應爲你豌豆莢上的渠道名(如WANDOUJAI)。

然後在你的build.gradle的android{}節點裏面,添加productFlavors節點,代碼如下:

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. android {  
  2.     // 這裏是你的其他配置  
  3.   
  4.     productFlavors{  
  5.         umeng{  }  
  6.         wandoujai {  }  
  7.         yingyongbao{  }  
  8.     }  
  9.     // 你的其他配置  
  10. }  
注意這裏的flavors的名字要和你的文件夾的名字對應。這樣配置之後,構建的就是多渠道的APK了。


第二種方法,不用創建那些文件,它使用的是Gradle Android插件裏的另一個功能,manifestPlaceholders。

在這種方法中,你只需要在AndroidManifest.xml中,對友盟的渠道進行這樣配置:

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. <meta-data  
  2.     android:name="UMENG_CHANNEL"  
  3.     android:value="${CHANNEL_NAME}" />  

然後同樣使用productFlavors,不過這時它的配置是這樣的:

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. android {  
  2.     // 你的其他配置代碼  
  3.   
  4.     productFlavors {  
  5.         yingyongbao {  
  6.             manifestPlaceholders = [ CHANNEL_NAME:"YINGYONGBAO"]  
  7.         }  
  8.         umeng {  
  9.             manifestPlaceholders = [ CHANNEL_NAME:"UMENG" ]  
  10.         }  
  11.         wandoujia {  
  12.             manifestPlaceholders = [ CHANNEL_NAME:"WANDOUJIA" ]  
  13.         }  
  14.   
  15.     }  
  16.     // 你的其他配置代碼  
  17. }  

在上面當中,我們也可以指定一個默認的渠道名,如果需要的話。指定默認的值是在defaultConfig節點當中添加如下內容:

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. manifestPlaceholders = [ CHANNEL_NAME:"Unspecified"]  
這裏的Unspecified換成你實際上的默認的渠道名。

使用manifestPlaceholders的這種配置,同樣適用於manifest的其他配置。比如你需要在不同渠道發佈的apk裏面,指定不同的啓動Activity。比如在豌豆莢裏面發佈的,啓動的Activity顯示的是豌豆莢首發的界面,應用寶裏面啓動的是應用寶首發的界面(哈哈,有點壞),你就可以對你的activity的值使用${activity_name}的方式,然後在productFlavors裏面配置這個${activity_name}的值。

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