Android Gradle 高級自定義(七)

1.動態(tài)配置 AndroidManifest 文件

  • 顧名思義就是可以在構(gòu)建的過程中眶蕉,動態(tài)修改AndroidManifest文件中的一些內(nèi)容。例如友盟等。
xml文件中:
<meta-data android:value="${UMENG_CHANNEL}" android:name="UMENG_CHANNEL"/>

gradle 文件中:
android{
      compileSdkVersion 23
      buildToolsVersion "23.0.1"
   
     productFlavors{
          google{
             mainfestPlaceholders.put("UMENG_CHANNEL","google")
          }

       baidu{
             mainfestPlaceholders.put("UMENG_CHANNEL","baidu")
          }
    }
   //name就是每個渠道的名字
   productFlavors.all{ flavor ->
   mainfestPlaceholders.put("UMENG_CHANNEL",name)
 }
}

  • mainfestPlaceholders是 ProductFlavor 的一個屬性,是一個 Map 類型,所以我們可以同時配置很多個占位符码耐。

  • 通過 all 函數(shù)遍歷每一個productFlavor,然后把它們的那么作為友盟中渠道的名字溶其。

  • Android Gradle 提供的mainfestPlaceholders占位符的應(yīng)用方式骚腥,讓我們可以替換AndroidManifest文件中任何${var}格式的占位符。

2.自定義你的 BuildConfig

  • BuildConfig是自動生成的不能修改瓶逃,它是由 Android Gradle 構(gòu)建腳本編譯后生成的束铭。
android{
      compileSdkVersion 23
      buildToolsVersion "23.0.1"
   
     productFlavors{
          google{
             buildConfigFiled'String','WEB_URL','"http://www.google.com"'
          }

       baidu{
             buildConfigFiled'String','WEB_URL','"http://www.baidu.com"'
          }
    }

 }
}

  • buildConfigFiled(String type,String name,String value)讓我們可以添加自己的常量到BuildConfig 中。

  • 第一個參數(shù)type是要生成的字段的類型金闽,第二個參數(shù) name 是要生成的常量名字纯露,第三個參數(shù) value 是要生成字段的常量。

  • value 這個參數(shù)代芜,是單引號中間的部分埠褪,尤其對于 String 類型的值,里面的雙引號一定不能省略挤庇。

3.動態(tài)添加自定義資源

  • resValue 方法有 3 個參數(shù):第一個是 type钞速,也就是你要的資源類型,比如有 string嫡秕、id渴语、bool 等;第二個是 name昆咽,也就是你要定義資源的名稱驾凶;第三是 value 就是你要定義資源的值。
android{
      compileSdkVersion 23
      buildToolsVersion "23.0.1"
   
     productFlavors{
          google{
             resValue'string','channel_tips','google 渠道歡迎您'
          }

       baidu{
              resValue'string','channel_tips','baidu 渠道歡迎您'
          }
    }

 }
}

  • 這和我們在 res/values 這個文件夾定義的 xml 文件的格式是一樣的掷酗,只不過我們通過 Gradle 配置调违。

4.Java 編譯選項

  • 有時候需要對我們的Java 源文件的編碼、源文件使用的 JDK版本等進(jìn)行調(diào)優(yōu)修改泻轰。比如需要配置源文件的編碼為 UTF-8 的編碼技肩,以兼容更多的字符。
android{
      compileSdkVersion 23
      buildToolsVersion "23.0.1"
   
     compileOptions{
         encoding = 'utf-8'
         sourceCompatibility = JavaVersion.VERSION_1_6
         targetCompatibility = JavaVersion.VERSION_1_6
    }

}

  • Android 對象提供了一個compileOptions方法浮声,它接受一個CompileOptions類型的閉包作為參數(shù)虚婿,來對 Java 編譯選項進(jìn)行配置旋奢。

  • CompileOptions是編譯配置,它提供了 3 個屬性然痊,分別是 encoding至朗、sourceCompatibility、targetCompatibility玷过,通過對它們
    進(jìn)行設(shè)置來配置 Java 相關(guān)的編譯選項爽丹。

5.adb操作選項配置

  • adb筑煮,它是一個 Android Debug Bridge辛蚊,用于連接我們的 Android 手機(jī)進(jìn)行一些操作,比如調(diào)試 apk真仲、安裝 apk袋马、復(fù)制文件到手機(jī)等。

  • 在 Android Gradle 中秸应,預(yù)留了對 adb 的一些選項的控制配置虑凛,它就是 adbOptions{}閉包,它和 compileOptions一樣也是 Android 的一個方法软啼。

android{
      compileSdkVersion 23
      buildToolsVersion "23.0.1"
   
     adbOptions{
         timeOutInMs = 5*1000 //秒
         installOPtions = '-r','-s'
    
    }

}

  • 第一種對timeOutInMs的設(shè)置采用屬性的方式桑谍,第二種對installOPtions的設(shè)置采用方法的方式。

  • timeOutInMs 它是設(shè)置超時時間的祸挪,單位是毫秒锣披,這個超時時間是執(zhí)行 adb 這個命令的超時時間。有時候我們安裝贿条、運(yùn)行或者調(diào)試的時候雹仿,可能會遇到 CommandRejectException 這樣的異常,這個一般是當(dāng)我們執(zhí)行一個命令的時候整以,在規(guī)定的 時間內(nèi)沒有返回結(jié)果胧辽,我們可以把超時設(shè)置長一些。記住公黑,它的單位是毫秒邑商。

  • installOPtions 它是用來設(shè)置 adb install安裝這個操作的設(shè)置項。比如要安裝到 SD 上凡蚜,還是要替換安裝等人断。

  • adb install 有 l、r番刊、t含鳞、s、d芹务、g 六個選項蝉绷。

  • l:鎖定該應(yīng)用程序

  • r:替換已存在的應(yīng)用程序鸭廷,也就是我們說的強(qiáng)制安裝

  • t:允許測試包

  • s:把應(yīng)用程序安裝到 SD 卡上

  • d:允許進(jìn)行降級安裝,也就是安裝的程序比手機(jī)上帶的版本低

  • g:為該應(yīng)用授予所有運(yùn)行時的權(quán)限

6.DEX操作選項配置

  • Android 中的Java 源碼被編譯成 class 字節(jié)碼后熔吗,在打包成 apk 的時候又被 dx 命令優(yōu)化成 Android 虛擬機(jī)可執(zhí)行的 Dex 文件辆床。

  • Android 默認(rèn)給 dx 分配的內(nèi)存是 1024M

  • Android Gradle 插件提供了 dexOptions{}閉包,讓我們可以對 dx 操作進(jìn)行一些配置桅狠。

  • dexOptions{}是一個DexOptions類型的閉包讼载,它的配置都是有DexOptions提供的。

android{
      compileSdkVersion 23
      buildToolsVersion "23.0.1"
   
     dexOptions{
        incremental true
        javaMaxHeapSize  '4g'
        jumboMode  true
    
    }

}

  • incremental 屬性中跌,這是一個 boolean 類型的屬性咨堤,用來配置是否啟用 dx 的增量模式,默認(rèn)值是 false漩符,表示不啟用一喘。增量的模式雖然速度更快一些,但目前還是有很多限制嗜暴,也可能會不工作凸克,所以要慎用。

  • javaMaxHeapSize 屬性闷沥,它是配置執(zhí)行 dx 命令時為其分配的最大堆內(nèi)存萎战,主要用來解決執(zhí)行 dx 時內(nèi)存不夠用的情況。它接受一個字符串格式的參數(shù)舆逃,比如 1024MB蚂维,代表 1GB。

  • jumboMode 屬性颖侄,boolean 類型鸟雏,它可以用來配置是否開啟 jumbo 模式。有時候我們的程序項目工程比較大览祖,代碼太多孝鹊,函數(shù)超過 65535 個,那么就需要強(qiáng)制開啟 jumbo 模式才可以構(gòu)建成功展蒂。

  • preDexLibraries 屬性又活,boolean 類型,用來配置是否預(yù)執(zhí)行 dex Libraries 庫工程锰悼,開啟后會大大提高增量的構(gòu)建速度柳骄,不過這可能會影響 clean 構(gòu)建速度。默認(rèn)值為 true箕般,是開啟的耐薯。

  • threadCount 屬性,它是 integer 類型,用來配置 Android Gradle 運(yùn)行 dx 命令時使用的線程數(shù)量曲初,適當(dāng)?shù)木€程數(shù)量可以提高 dx 的效率体谒。
android{
      compileSdkVersion 23
      buildToolsVersion "23.0.1"
   
     dexOptions{
      threadCount 2
    
    }

}

7.多項目構(gòu)建

  • dimension是 ProductFlavor 的一個屬性,接受一個字符串臼婆,作為該P(yáng)roductFlavor的維度抒痒。

  • flavorDimensions 使我們使用的 android{}里的方法,它和ProductFlavors{}是平級的颁褂,一定要先使用flavorDimensions聲明維度故响,才能在ProductFlavors中使用。

android{
   flavorDimensions "abi","version"
     productFlavors{
      free {
            dimension 'version'
      }
      paid {
            dimension 'version'
      }
      x86 {
            dimension 'version'
      }
      arm {
            dimension 'version'
      }
    }

}

  • 示例中的 abi 和 version颁独,現(xiàn)在構(gòu)建產(chǎn)物 (variant)= BuildType+Abi+Version 所以會生成如下的 variant:

    ArmFreeDebug
    ArmFreeRelease
    ArmPaidDebug
    ArmPaidRelease

    X86FreeDebug
    X86FreeRelease
    X86PaidDebug
    X86PaidRelease

  • 這種我們只根據(jù)維度去分組彩届、去配置,剩下的讓 Android Gradle 幫我們組合產(chǎn)生結(jié)果的 variant奖唯,實現(xiàn)了共性配置惨缆,也就是模塊化編程糜值,維護(hù)起來也很方便丰捷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市寂汇,隨后出現(xiàn)的幾起案子病往,更是在濱河造成了極大的恐慌,老刑警劉巖骄瓣,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件停巷,死亡現(xiàn)場離奇詭異,居然都是意外死亡榕栏,警方通過查閱死者的電腦和手機(jī)畔勤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扒磁,“玉大人庆揪,你說我怎么就攤上這事》镣校” “怎么了缸榛?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長兰伤。 經(jīng)常有香客問我内颗,道長,這世上最難降的妖魔是什么敦腔? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任均澳,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘找前。我一直安慰自己筒捺,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布纸厉。 她就那樣靜靜地躺著系吭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪颗品。 梳的紋絲不亂的頭發(fā)上肯尺,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機(jī)與錄音躯枢,去河邊找鬼则吟。 笑死,一個胖子當(dāng)著我的面吹牛锄蹂,可吹牛的內(nèi)容都是我干的氓仲。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼得糜,長吁一口氣:“原來是場噩夢啊……” “哼敬扛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起朝抖,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤啥箭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后治宣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體急侥,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年侮邀,在試婚紗的時候發(fā)現(xiàn)自己被綠了坏怪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡绊茧,死狀恐怖铝宵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情按傅,我是刑警寧澤捉超,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站唯绍,受9級特大地震影響拼岳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜况芒,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一惜纸、第九天 我趴在偏房一處隱蔽的房頂上張望叶撒。 院中可真熱鬧,春花似錦耐版、人聲如沸祠够。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽古瓤。三九已至,卻和暖如春腺阳,著一層夾襖步出監(jiān)牢的瞬間落君,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工亭引, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留绎速,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓焙蚓,卻偏偏與公主長得像纹冤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子购公,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 這一章主要針對項目中可以用到的一些實用功能來介紹Android Gradle萌京,比如如何隱藏我們的證書文件,降低風(fēng)險...
    acc8226閱讀 7,575評論 3 25
  • Gradle 是一款構(gòu)建系統(tǒng)工具君丁,它的 DSL 基于 Groovy 實現(xiàn)枫夺。Gradle 構(gòu)建的大部分功能都是通過插...
    任教主來也閱讀 3,045評論 3 6
  • 因為我們發(fā)布或者推廣的渠道不同,就造成了我們的Android App可能會有很多個绘闷,因為我們需要細(xì)分他們,才能針對...
    acc8226閱讀 2,613評論 0 7
  • 版權(quán)聲明:本文為博主原創(chuàng)文章较坛,未經(jīng)博主允許不得轉(zhuǎn)載印蔗。 https://blog.csdn.net/zhaoyanj...
    勤奮的pangdunhu閱讀 2,022評論 0 1
  • 看一個綜藝節(jié)目,一個媽媽非常堅定的說丑勤,用絕食逼自己的女兒放棄上大學(xué)的機(jī)會华嘹,二十四小時粘在女兒和女兒男朋友身邊很快...
    木目北閱讀 270評論 0 0