Gradle構建心得

剛接觸Android的人,可能對Gradle有點茫然。Gradle是什么?有效的管理Gradle有什么用?

隨著項目的不斷壯大,我們每天在build,簽名,打包(分渠道),發布,甚至項目依賴的更替,差異管理花費的時間越來越多了。都說程序員擅長“偷懶”,擅長寫腳本(聽說有人要消滅這些破壞世界和平的人?哈哈哈。。),那么有沒有一種工具可以幫我們簡化這個過程,把這個過程用代碼的方式描述出來?

如何有效的管理我們的Gradle腳本?

版本號與依賴管理

對項目的版本以及依賴庫的版本號進行統一管理,這里不做詳細說明,具體可參考http://www.lxweimin.com/p/edd495d8efc8

構建類型(BuildTypes)

默認情況下,會創建release和debug兩個版本,我們可以在里面配置我們想要的構建環境,例如:

  • 配置debug Build Type,以便release和debug兩個版本同時存在到一個設備上

    buildTypes{
       debug {   
           applicationIdSuffix ".debug"
        }
    }  
    
  • 開啟混淆
    (混淆原則可參考http://blog.csdn.net/chen930724/article/details/49687067)

    buildTypes{
       release {   
            minifyEnabled true   //如果為true,對應的task會被創建
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    
  • 控制輸出(這里以修改輸出apk包名為例)

      applicationVariants.all { variant ->   
         variant.outputs.each { output -> 
            def outputFile = output.outputFile        
            if (outputFile != null && outputFile.name.endsWith('.apk')) {   
                // 輸出apk名稱為Test_v1.0_2016-09-22_GooglePlay.apk,可任意組合
                def fileName = "Test_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"           
                output.outputFile = new File(outputFile.parent, fileName)        }    
            }
       }
    

在打包的時候,可根據自己的需要,生成自己想要的輸出。
variant類的更多屬性可參考https://chaosleong.gitbooks.io/gradle-for-android/content/advanced_build_customization/manipulating_tasks.html

  • 分渠道(Android應用的發布一般針對多個市場,我們稱為渠道)
    首先在AndroidManifest.xml里配置PlaceHolder
    <meta-data android:name="CHANNEL"
    android:value="${CHANNEL_VALUE}" />
    可在defaultConfig中配置渠道的默認值
    defaultConfig {
    manifestPlaceholders = [ CHANNEL_VALUE:"GooglePlay" ]
    }
    接下來定義我們需要的多個渠道
    productFlavors {
    GooglePlay{}
    huawei{}
    xiaomi{}
    baidu{}
    }
    效果如下:
    Paste_Image.png

配置簽名信息(SigningConfigs)

簽名一個應用需要(debug使用默認的)以下文件

  • storeFile 簽名文件

  • storePassword 密碼

  • keyAlias 別名

  • keyPassword key密碼

配置release版本的簽名信息:
release {
storeFile file("other.keystore")
storePassword "android"
keyAlias "androiddebugkey"
keyPassword "android" }
簽名是個很敏感的東西,在具體項目的使用中建議用配置文件來保存各種簽名的信息,需要的時候進行讀取。

其他

添加java8支持
apply plugin: 'me.tatarka.retrolambda'
compileOptions {    
     sourceCompatibility JavaVersion.VERSION_1_8     
     targetCompatibility JavaVersion.VERSION_1_8}
去除不想添加到apk的配置文件
packagingOptions { 
    exclude 'META-INF/DEPENDENCIES.txt' 
    exclude 'META-INF/LICENSE.txt' 
    exclude 'META-INF/NOTICE.txt' 
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/LICENSE' 
    exclude 'META-INF/DEPENDENCIES' 
    exclude 'META-INF/notice.txt' 
    exclude 'META-INF/license.txt' 
    exclude 'META-INF/dependencies.txt' 
    exclude 'META-INF/LGPL2.1' }

Android Studio 2.2版本引入新的apk分析功能,感興趣的童鞋可以去研究研究自己應用的結構

最后

關于Gradle配置的內容還有很多,歡迎小伙伴們補充~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容