[轉]Android Studio系列教程六--Gradle多渠道打包

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

Android Studio系列教程六--Gradle多渠道打包

本文為個人原創,歡迎轉載,但請務必在明顯位置注明出處!

由于國內Android市場眾多渠道,為了統計每個渠道的下載及其它數據統計,就需要我們針對每個渠道單獨打包,如果讓你打幾十個市場的包豈不煩死了,不過有了Gradle,這再也不是事了。

友盟多渠道打包

廢話不多說,以友盟統計為例,在AndroidManifest.xml里面會有這么一段:

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

里面的Channel_ID就是渠道標示。我們的目標就是在編譯的時候這個值能夠自動變化。

  • 第一步 在AndroidManifest.xml里配置PlaceHolder
<meta-dataandroid:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" />
  • 第二步 在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] } }

很簡單清晰有沒有?直接執行?./gradlew assembleRelease?, 然后就可以靜靜的喝杯咖啡等待打包完成吧。

assemble結合Build Variants來創建task

上一篇博客介紹了?assemble?這個命令,會結合?Build Type?創建自己的task,如:

  • ./gradlew assembleDebug

  • ./gradlew assembleRelease

除此之外?assemble?還能和?Product Flavor?結合創建新的任務,其實?assemble?是和?Build Variants?一起結合使用的,而?Build Variants?=?Build Type?+?Product Flavor?, 舉個例子大家就明白了:

如果我們想打包wandoujia渠道的release版本,執行如下命令就好了:

  • ./gradlew assembleWandoujiaRelease

如果我們只打wandoujia渠道版本,則:

  • ./gradlew assembleWandoujia

此命令會生成wandoujia渠道的Release和Debug版本

同理我想打全部Release版本:

  • ./gradlew assembleRelease

這條命令會把Product Flavor下的所有渠道的Release版本都打出來。

總之,assemble?命令創建task有如下用法:

  • **assemble**: 允許直接構建一個Variant版本,例如assembleFlavor1Debug。

  • **assemble**: 允許構建指定Build Type的所有APK,例如assembleDebug將會構建Flavor1Debug和Flavor2Debug兩個Variant版本。

  • **assemble**: 允許構建指定flavor的所有APK,例如assembleFlavor1將會構建Flavor1Debug和Flavor1Release兩個Variant版本。

完整的gradle腳本

最后福利大放送,來一份我在項目中使用的完整的gradle文件配置:

apply plugin: 'com.android.application'def releaseTime() { return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC")) } android { compileSdkVersion 21 buildToolsVersion '21.1.2' defaultConfig { applicationId "com.boohee.*" minSdkVersion 14 targetSdkVersion 21 versionCode 1 versionName "1.0" // dex突破65535的限制 multiDexEnabled true // 默認是umeng的渠道 manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng"] } lintOptions { abortOnError false } signingConfigs { debug { // No debug config } release { storeFile file("../yourapp.keystore") storePassword "your password" keyAlias "your alias" keyPassword "your password" } } buildTypes { debug { // 顯示Log buildConfigField "boolean", "LOG_DEBUG", "true" versionNameSuffix "-debug" minifyEnabled false zipAlignEnabled false shrinkResources false signingConfig signingConfigs.debug } release { // 不顯示Log buildConfigField "boolean", "LOG_DEBUG", "false" minifyEnabled true zipAlignEnabled true // 移除無用的resource文件 shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { // 輸出apk名稱為boohee_v1.0_2015-01-15_wandoujia.apk def fileName = "boohee_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk" output.outputFile = new File(outputFile.parent, fileName) } } } } } // 友盟多渠道打包 productFlavors { wandoujia {} _360 {} baidu {} xiaomi {} tencent {} taobao {} ... } productFlavors.all { 

轉載于:https://www.cnblogs.com/DarkMaster/p/4745440.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/459006.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/459006.shtml
英文地址,請注明出處:http://en.pswp.cn/news/459006.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

服務器上裝filezilla server后,本地的ftp客戶端連接不上去

公司一臺服務器&#xff0c;上面裝了filezilla server后&#xff0c;按平常配置好了&#xff0c;但是在本地用FTP客戶端不管怎么連接都連接不上&#xff0c;本地FTP客戶端總提示連接失敗&#xff0c;遠程filezilla server的界面也沒有提示有人連接&#xff0c; 仔細看了一下&am…

數據結構與算法之堆與堆排序

在數據結構中&#xff0c;堆其實就是一棵完全二叉樹。我們知道內存中也有一塊叫做堆的存儲區域&#xff0c;但是這與數據結構中的堆是完全不同的概念。在數據結構中&#xff0c;堆分為大根堆和小根堆&#xff0c;大根堆就是根結點的關鍵字大于等于任一個子節點的關鍵字&#xf…

非法操作 login.php,閱文游戲中心 h5游戲接入wiki

閱文游戲中心《h5游戲 CP接口規范》接口要求規范游戲方接口說明&#xff1a;游戲方需按照規范提供&#xff0c;閱文進行調用閱文接口說明&#xff1a;閱文提供&#xff0c;游戲方調用參數 time 為Unix 時間戳(January 1 1970 00:00:00 GMT 起的秒數) &#xff0c;單位為秒編碼統…

串口通信與編程:串口基礎知識

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 串口是串行接口&#xff08;serial port&#xff09;的簡稱&#xff0c;也稱為串行通信…

jmeter上傳文件搞了一天,才搞定,沒高人幫忙效率就是低,趕緊記下來,以備后用...

jmeter上傳文件搞了一天&#xff0c;才搞定&#xff0c;沒高人幫忙效率就是低&#xff0c;趕緊記下來&#xff0c;以備后用 先用谷歌瀏覽器抓包&#xff0c;抓到的包類似這樣&#xff1a; 在jmeter里添加一個http請求&#xff0c;配置好參數&#xff0c;方法&#xff0c;端口&a…

自定義dialog

2019獨角獸企業重金招聘Python工程師標準>>> R.layout.layout_insert_dialog自定義布局 View mViewLayoutInflater.from(MainActivity.this).inflate(R.layout.layout_insert_dialog, null); AlertDialog.Builder dialognew AlertDialog.Builder (MainActivity.this…

js unescape 對應php的函數,php實現Javascript的escape和unescape函數

由于需要用到php調用js文件&#xff0c;在網上找了相關的資料&#xff0c;并改寫了相關的方法。php實現 Javascript的escape函數方法&#xff1a;function escape($str) {preg_match_all("/[/xc2-/xdf][/x80-/xbf]|[/xe0-/xef][/x80-/xbf]{2}|[/xf0-/xff][/x80-/xbf]{3}|[…

字符數組,字符串、數字轉化

<p style"margin-top: 5px; margin-bottom: 5px; padding-top: 0px; padding-bottom: 0px; line-height: 26px; word-wrap: break-word; color: rgb(102, 102, 102); font-family: 宋體, Arial; font-size: 16px;">//****************************************…

PE文件RV轉FOA及FOA轉RVA

/************************************************************************/ /* 功能:虛擬內存相對地址和文件偏移的轉換 參數&#xff1a;stRVA&#xff1a; 虛擬內存相對偏移地址 lpFileBuf: 文件起始地址 返回&#xff1a;轉換后的文件偏移地址 */ /*****************…

SurfaceView類透明背景設置

將SurfaceView背景設置為透明&#xff0c;主要添加以下幾句話就可以了&#xff1a; 在SurfaceView創建后設置一下下面的參數&#xff1a; setZOrderOnTop(true); getHolder().setFormat(PixelFormat.TRANSLUCENT); 還有在draw方法中繪制背景顏色的時候以下面的方式進行繪制就可…

oracle的env函數用法,env命令_Linux env 命令用法詳解:顯示系統中已存在的環境變量...

env命令用于顯示系統中已存在的環境變量&#xff0c;以及在定義的環境中執行指令。該命令只使用"-"作為參數選項時&#xff0c;隱藏了選項"-i"的功能。若沒有設置任何選項和參數時&#xff0c;則直接顯示當前的環境變量。如果使用env命令在新環境中執行指令…

網絡通信的工作原理

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 1、什么是計算機網絡&#xff1f; 計算機網絡是由兩臺或兩臺以上的計算機通過網絡設備…

Bossie Awards 2015: The best open source applicati

2019獨角獸企業重金招聘Python工程師標準>>> Read about more open source winners InfoWorlds Best of Open Source Awards for 2014 celebrate more than 100 open source projects, from the bottom of the stack to the top. Follow these links to more open s…

oracle中pga指什么,oracle學習SGA跟PGA理解

SGA&#xff1a;SystemGlobal Area是OracleInstance的基本組成部分&#xff0c;在實例啟動時分配;系統全局域SGA主要由三部分構成&#xff1a;數據庫緩沖區、日志緩沖區、共享池&#xff0c;還可能包含&#xff1a;大池&#xff0c;JAVA池&#xff0c;流池。注意點&#xff1a;…

oracle重做日志教程,Oracle教程:重做日志文件基本維護

重做日志文件最重要的用途就是用來恢復數據(其實你也可以用來logminer)&#xff0c;它記錄著system global area(sga)當中的database bu重做日志文件最重要的用途就是用來恢復數據(其實你也可以用來logminer)&#xff0c;它記錄著system global area(sga)當中的database buffer…

以太網,局域網,萬維網

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 以太網是一種通信協議標準 萬維網WWW 是 Internet 的多媒體信息查詢工具 以太網: 以…

java的自動類型轉換和強制類型轉換

在程序運行時&#xff0c;經常需要將一種數值類型進行轉換成另一種類型。下面給出了一個合法的轉換。數值之間的合法轉換上圖中有6個實心箭頭&#xff0c;表示無信息丟失的轉換&#xff0c;有三個虛箭頭&#xff0c;表示可能有精度丟失的轉換。例如123456789是一個大整數&#…

Class 泛型

Java Class 泛型的例子說明&#xff1a; http://blog.chinaunix.net/uid-1911213-id-3085866.html http://blog.163.com/sir_876/blog/static/1170522320121216273111/轉載于:https://www.cnblogs.com/yedu/p/4514016.html

java動態代理的實現

動態代理作為代理模式的一種擴展形式&#xff0c;廣泛應用于框架&#xff08;尤其是基于AOP的框架&#xff09;的設計與開發&#xff0c;本文將通過實例來講解Java動態代理的實現過程。友情提示&#xff1a;本文略有難度&#xff0c;讀者需具備代理模式相關基礎知識&#xff0c…

常見的網絡類型

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 我們經常聽到Internet網、星形網等名詞&#xff0c;它們表示什么&#xff1f;是怎樣分…