Android Gradle 使用技巧

總結(jié)一下gradle在項(xiàng)目中的一些使用技巧

  1. 全局的配置信息
    在project目錄下創(chuàng)建一個(gè)config.gradle文件,將每個(gè)module相同的配置信息都可以在此文件中設(shè)置全局變量,例如:

    ext{ // gradle的全局屬性必須放在ext閉包中
         android = [
             compileSdkVersion: 25,
             buildToolsVersion: "26.0.0",
             minSdkVersion    : 15,
             targetSdkVersion : 25,
             versionCode      : 1,
             versionName      : "1.0"
         ]
    
         dependencies = [
               appcompatV7      : 'com.android.support:appcompat-v7:25.+',
               constraintLayout : 'com.android.support.constraint:constraint-layout:1.0.2',
               junit            : 'junit:junit:4.12'
         ]
    }
    

然后需要在project目錄下的build.gradle中通過apply from: 'config.gradle'引入全局屬性文件config.gradle
在module中的build.gradle調(diào)用如下:

   dependencies { 
                compile rootProject.ext.dependencies.appcompatV7      
                compile rootProject.ext.dependencies.constraintLayout
                testCompile rootProject.ext.dependencies.junit
   }
  • 調(diào)用gradle.properties文件中變量
    類似簽名信息不應(yīng)該直接暴露在build.gradle文件中,將它保存在gradle.properties文件中是一種不錯(cuò)的做法。在gradle.properties中添加:

       STORE_FILE = /xx/app_key.jks   // 這邊不能打引號(hào)
       STORE_PWD = xxx
       KEY_ALIAS = xxx
       KEY_PWD = xxx
    

在module中的build.gradle調(diào)用如下:

    signingConfigs {
        release {
               storeFile file(STORE_FILE)
               storePassword STORE_PWD
               keyAlias KEY_ALIAS
               keyPassword KEY_PWD
       }
  }

還可以將gradle.properties文件設(shè)置的變量供java文件以及`xml``文件調(diào)用却邓,比如:

  buildTypes {
        release {
              minifyEnabled true
              shrinkResources true
              signingConfig signingConfigs.release
              proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
              buildConfigField("String", "STORE_PWD", "\"${STORE_PWD}\"") // 往release版本中BuildConfig里面設(shè)置值
              resValue("string", "KEY_PWD", "${KEY_PWD}") // 往release版本資源文件中設(shè)置值
        }
        debug {
                buildConfigField("String", "STORE_PWD", "\"${STORE_PWD}\"") // 往debug版本BuildConfig里面設(shè)置值
                resValue("string", "KEY_PWD", "${KEY_PWD}") // 往debug版本資源文件中設(shè)置值
        }
   }
   //  然后就可以在java代碼中,通過BuildConfig.XXX進(jìn)行調(diào)用;在layout_xml中直接可以通過android:text="@string/KEY_PWD"進(jìn)行調(diào)用
   // 其中院水,buildConfigField定義的方式是
   // buildConfigField 類型腊徙,變量名,值
   // resValue定義的方式是
   // resValue XML中的類型檬某,變量名撬腾,值
   // 對(duì)于類型的設(shè)置,buildConfigField必須跟java代碼中是相同的恢恼,比如String 就不能寫成string民傻,因?yàn)槭荢tring 類型,值需要打上雙引號(hào);同樣resValue也需要對(duì)應(yīng)

實(shí)際開發(fā)中厅瞎,debug版本和release版本的接口地址是不同饰潜,通過這種方式去設(shè)置,就不需要在每次打不同版本包的時(shí)候去注釋代碼了和簸。

  • 調(diào)用local.properties文件中變量
    local.properties文件中一般存儲(chǔ)著本地的sdk彭雾、ndk的路徑信息,當(dāng)然在此文件中同樣可以配置變量锁保,比如簽名信息薯酝,只不過這是本地的半沽,一般不用push到遠(yuǎn)程倉庫中。
    local.properties文件中添加變量跟gradle.properties沒區(qū)別吴菠,區(qū)別在于讀日咛睢:

     Properties properties = new Properties();
     properties.load(new FileInputStream(file("../local.properties")))  // 需要顯示指明文件路徑
     // 并且當(dāng)前路徑是在app目錄下,所以獲取project目錄下的`local.properties`做葵,應(yīng)該是../local.properties
     buildTypes {
      debug {
          buildConfigField("String", "URL", "\"${properties['URL']}\"")
          resValue("string", "url", "${properties['URL']}")
      }
    }
    

    其實(shí)也可以自定義properties文件占哟,訪問形式跟訪問local.properties相同,只需要更改文件路徑就好酿矢。

  • 替換AndroidManifest中的占位符
    可以在AndroidManifest文件中設(shè)置一個(gè)占位符榨乎,類似${app_label}

      <application
          android:name=".AppApplication"
          android:allowBackup="true"
          android:icon="@mipmap/ic_launcher"
          android:label="${app_label}"
          android:roundIcon="@mipmap/ic_launcher_round"
          android:supportsRtl="true"
          android:theme="@style/AppTheme">
          <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    

然后在module下的build.gradle文件中進(jìn)行設(shè)置,可以設(shè)置在defaultConfig閉包中瘫筐,也可以設(shè)置在buildTypes下不同版本的閉包中蜜暑,設(shè)置在不同版本的閉包中,那么就可以實(shí)現(xiàn)為不同版本的app設(shè)置不同的名稱了策肝,app log 同樣可以通過此種方式來進(jìn)行配置:

// defaultConfig中設(shè)置           
defaultConfig { 
     // ... 省略其他配置
     manifestPlaceholders = [app_label:"@string/app_name"]
}

// buildTypes中設(shè)置
 buildTypes {
      release {
           // ... 省略其他配置
        manifestPlaceholders = [app_label:"@string/app_name_release"]
    }
    debug {
         // ... 省略其他配置
        manifestPlaceholders = [app_label:"@string/app_name_debug"]
    }
}

除了可以給不同版本app設(shè)置不同名稱已經(jīng)圖片之外肛捍,還有一種重要的用法就是打渠道包。

 android {
   productFlavors {
    dev{
        manifestPlaceholders = [channel:"dev"]
     }
    official{
        manifestPlaceholders = [channel:"official"]
    }
    // ... ...
    wandoujia{
        manifestPlaceholders = [channel:"wandoujia"]
    }
    xiaomi{
        manifestPlaceholders = [channel:"xiaomi"]
    }
    "360"{  // flavor名如果是數(shù)字開頭之众,必須用引號(hào)引起來拙毫。
        manifestPlaceholders = [channel:"360"]
    }
}
  • 自定義導(dǎo)出apk名稱

     android {
         applicationVariants.all { variant ->
                variant.outputs.each { output ->
                   output.outputFile = new File(
                       output.outputFile.parent + "/${variant.buildType.name}",
                  "xx-${variant.buildType.name}-${variant.versionName}-${variant.productFlavors[0].name}.apk".toLowerCase())
                }
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市酝枢,隨后出現(xiàn)的幾起案子恬偷,更是在濱河造成了極大的恐慌悍手,老刑警劉巖帘睦,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異坦康,居然都是意外死亡竣付,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門滞欠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來古胆,“玉大人,你說我怎么就攤上這事筛璧∫菀铮” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵夭谤,是天一觀的道長棺牧。 經(jīng)常有香客問我,道長朗儒,這世上最難降的妖魔是什么颊乘? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任参淹,我火速辦了婚禮,結(jié)果婚禮上乏悄,老公的妹妹穿的比我還像新娘浙值。我一直安慰自己,他們只是感情好檩小,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布开呐。 她就那樣靜靜地躺著,像睡著了一般规求。 火紅的嫁衣襯著肌膚如雪负蚊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天颓哮,我揣著相機(jī)與錄音家妆,去河邊找鬼。 笑死冕茅,一個(gè)胖子當(dāng)著我的面吹牛伤极,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播姨伤,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼哨坪,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了乍楚?” 一聲冷哼從身側(cè)響起当编,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎徒溪,沒想到半個(gè)月后忿偷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡臊泌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年鲤桥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渠概。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡茶凳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出播揪,到底是詐尸還是另有隱情贮喧,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布猪狈,位于F島的核電站箱沦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏罪裹。R本人自食惡果不足惜饱普,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一运挫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧套耕,春花似錦谁帕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至康愤,卻和暖如春儡循,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背征冷。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工择膝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人检激。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓肴捉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親叔收。 傳聞我的和親對(duì)象是個(gè)殘疾皇子齿穗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)饺律,斷路器窃页,智...
    卡卡羅2017閱讀 134,626評(píng)論 18 139
  • 1.介紹 如果你正在查閱build.gradle文件的所有可選項(xiàng),請(qǐng)點(diǎn)擊這里進(jìn)行查閱:DSL參考 1.1新構(gòu)建系統(tǒng)...
    Chuckiefan閱讀 12,121評(píng)論 8 72
  • 轉(zhuǎn)載注明出處:http://www.reibang.com/p/5255b100930e 0. 前言 完全由個(gè)人翻...
    王三的貓阿德閱讀 2,504評(píng)論 0 4
  • 當(dāng)你在開發(fā)一個(gè)app,通常你會(huì)有幾個(gè)版本复濒。大多數(shù)情況是你需要一個(gè)開發(fā)版本脖卖,用來測試app和弄清它的質(zhì)量,然后還需要...
    雪殘閱讀 407評(píng)論 0 0
  • 這一章主要針對(duì)項(xiàng)目中可以用到的一些實(shí)用功能來介紹Android Gradle芝薇,比如如何隱藏我們的證書文件胚嘲,降低風(fēng)險(xiǎn)...
    acc8226閱讀 7,572評(píng)論 3 25