优雅的项目配置--常用库和版本管理

欢迎Follow我的GitHub, 关注我的CSDN.

最近经常有人问我, 如何管理gradle版本, 我来统一讲解这些小技巧.

随着Android开发的成熟, 模块越来越多, 为了开发稳定的程序, 引入的库也随之增加, 如何确保所有项目使用相同的编译版本he库版本呢?

当然, Gradle的参数配置可以帮我们实现这些.

Gradle

主要 
(1) 常用库的展示与配置. 
(2) 统一管理项目和库的版本. 
(3) 设置项目的私有参数.


1. 常用库

编程三剑客, RxJava+Retrofit+Dagger. 
常用: ButterKnife依赖注解, Glide/Picasso图片处理. 
使用根项目(rootProject)的参数管理子项目的版本.

<code class="hljs bash has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;">apply plugin: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'me.tatarka.retrolambda'</span>      // Lambda表达式
apply plugin: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'com.android.application'</span>     // Android应用
apply plugin: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'com.neenbedankt.android-apt'</span> // 编译时类
apply plugin: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'com.android.databinding'</span>     // 数据绑定

def cfg = rootProject.ext.configuration // 配置
def libs = rootProject.ext.libraries // 库

android {
    compileSdkVersion cfg.compileVersion
    buildToolsVersion cfg.buildToolsVersion

    defaultConfig {
        applicationId cfg.package
        minSdkVersion cfg.minSdk
        targetSdkVersion cfg.targetSdk
        versionCode cfg.version_code
        versionName cfg.version_name

        buildConfigField <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"String"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"MARVEL_PUBLIC_KEY"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"\"<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${marvel_public_key}</span>\""</span>
        buildConfigField <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"String"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"MARVEL_PRIVATE_KEY"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"\"<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${marvel_private_key}</span>\""</span>
    }

    buildTypes {
        release {
            minifyEnabled <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>
            proguardFiles getDefaultProguardFile(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'proguard-android.txt'</span>), <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'proguard-rules.pro'</span>
        }
    }

    compileOptions {
        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">source</span>Compatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    // 注释冲突
    packagingOptions {
        exclude <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'META-INF/services/javax.annotation.processing.Processor'</span>
    }
}

dependencies {
    compile fileTree(dir: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'libs'</span>, include: [<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'*.jar'</span>])
    testCompile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'junit:junit:4.12'</span>

    // Android
    compile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"com.android.support:design:<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${libs.supportVersion}</span>"</span>
    compile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"com.android.support:appcompat-v7:<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${libs.supportVersion}</span>"</span>
    compile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"com.android.support:cardview-v7:<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${libs.supportVersion}</span>"</span>
    compile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"com.android.support:recyclerview-v7:<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${libs.supportVersion}</span>"</span>
    compile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"com.android.support:palette-v7:<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${libs.supportVersion}</span>"</span>

    // Retrofit
    compile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"com.squareup.retrofit:retrofit:<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${libs.retrofit}</span>"</span>
    compile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"com.squareup.retrofit:converter-gson:<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${libs.retrofit}</span>"</span>
    compile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"com.squareup.retrofit:adapter-rxjava:<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${libs.retrofit}</span>"</span>

    // ReactiveX
    compile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"io.reactivex:rxjava:<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${libs.rxandroid}</span>"</span>
    compile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"io.reactivex:rxandroid:<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${libs.rxandroid}</span>"</span>

    // Dagger
    compile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"com.google.dagger:dagger:<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${libs.dagger}</span>"</span>
    apt <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"com.google.dagger:dagger-compiler:<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${libs.dagger}</span>"</span>
    compile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"org.glassfish:javax.annotation:<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${libs.javax_annotation}</span>"</span>

    // Others
    compile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"com.jakewharton:butterknife:<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${libs.butterknife}</span>"</span> // 资源注入
    compile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"com.github.bumptech.glide:glide:<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${libs.glide}</span>"</span> // 图片处理
    compile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"jp.wasabeef:recyclerview-animators:<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${libs.recycler_animators}</span>"</span> // Recycler动画
    compile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"de.hdodenhof:circleimageview:<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${libs.circleimageview}</span>"</span> // 头像视图
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li><li style="box-sizing: border-box; padding: 0px 5px;">71</li><li style="box-sizing: border-box; padding: 0px 5px;">72</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li><li style="box-sizing: border-box; padding: 0px 5px;">71</li><li style="box-sizing: border-box; padding: 0px 5px;">72</li></ul>

项目版本: 
def cfg = rootProject.ext.configuration 
cfg.compileVersion 
库版本: 
def libs = rootProject.ext.libraries 
${libs.retrofit}


2. 参数管理

buildConfigField管理私有参数, 配置在gradle.properties里面.

<code class="hljs smalltalk has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;">android {
    defaultConfig {
        buildConfigField <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">"String"</span>, <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">"MARVEL_PUBLIC_KEY"</span>, <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">"\"</span><span class="hljs-char" style="box-sizing: border-box;">${</span>marvel_public_key}\<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">""</span>
        buildConfigField <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">"String"</span>, <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">"MARVEL_PRIVATE_KEY"</span>, <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">"\"</span><span class="hljs-char" style="box-sizing: border-box;">${</span>marvel_private_key}\<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">""</span>
    }
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>

设置参数的类型\变量名\位置三个部分.

<code class="hljs ini has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;"><span class="hljs-setting" style="box-sizing: border-box;">marvel_public_key   = <span class="hljs-value" style="box-sizing: border-box;"><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">74129</span>ef99c9fd5f7692608f17abb88f9</span></span>
<span class="hljs-setting" style="box-sizing: border-box;">marvel_private_key  = <span class="hljs-value" style="box-sizing: border-box;"><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">281</span>eb4f077e191f7863a11620fa1865f2940ebeb</span></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

未指定路径, 默认是配置在gradle.properties中. 
两个地方可以配置参数, 一个是项目的build.gradle, 一个是gradle.properties.

项目中使用BuildConfig.xxx引入参数.

<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;">        MarvelSigningIterceptor signingIterceptor = new MarvelSigningIterceptor(
                BuildConfig<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.MARVEL</span>_PUBLIC_KEY, BuildConfig<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.MARVEL</span>_PRIVATE_KEY)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

3. 版本管理

版本管理配置在项目的build.gradle中, 包含两个部分, 一个是项目的版本, 一个是库的版本. 把常用参数设置成为变量. 子项目使用rootProject.ext.xxx的形式引入.

<code class="hljs go has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;">ext {
    configuration = [
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">package</span>          : <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"me.chunyu.spike.springrainnews"</span>,
            buildToolsVersion: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"23.0.1"</span>,
            compileVersion   :<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;"> 23</span>,
            minSdk           :<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;"> 14</span>,
            targetSdk        :<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;"> 23</span>,
            version_code     :<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;"> 1</span>,
            version_name     : <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"0.0.1"</span>,
    ]

    libraries = [
            supportVersion    : <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"23.1.1"</span>,
            retrofit          : <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"2.0.0-beta2"</span>,
            rxandroid         : <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"1.1.0"</span>,
            dagger            : <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"2.0"</span>,
            javax_annotation  : <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"10.0-b28"</span>,
            butterknife       : <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"7.0.1"</span>,
            glide             : <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"3.6.1"</span>,
            recycler_animators: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"2.1.0"</span>,
            circleimageview   : <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"2.0.0"</span>
    ]
}

buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'com.android.tools.build:gradle:2.0.0-alpha5'</span>
        classpath <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'com.neenbedankt.gradle.plugins:android-apt:1.8'</span>
        classpath <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'me.tatarka:gradle-retrolambda:3.2.4'</span>
        classpath <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'com.android.databinding:dataBinder:1.0-rc4'</span>
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">type</span>: Delete) {
    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">delete</span> rootProject.buildDir
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li></ul>

通过这样的方式管理Android项目, 可以便捷的更改版本号, 所有模块统一.

OK, that’s all! Enjoy it!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IBM、微软、华为等……均采用的软件配置。目录摘要如下: 配置结构 ..........\1 配置项 CI ..........\...........\1.01 客户文档 Customer ..........\...........\1.02 项目计划 Plan ..........\...........\.............\1.2.1 软件估计Estimation ..........\...........\.............\1.2.2 软件开发计划PPL ..........\...........\.............\1.2.3 配置管理计划CMP ..........\...........\1.03 需求分析SRS ..........\...........\................\infoX-MDSP PortalDemo SRS 软件需求规格说明书.doc .................................................. ..........\2 项目管理 PM ..........\.............\2.1 会议纪要 MOM ..........\.............\................\2.1.1 开工会 kick-off ..........\.............\................\2.1.2 周例会 weekly ..........\.............\................\2.1.3 阶段结束会议 EOP ..........\.............\................\2.1.4 关闭会议 closure ..........\.............\................\2.1.5 技术讨论会 Technical ..........\.............\................\2.1.6 其他会议 other ..........\.............\2.2 项目报告 Daily ..........\.............\..................\2.2.1 项目日报 Daily ..........\.............\..................\2.2.2 项目周报 weekly .................................................. ..........\.............\2.3 问题跟踪 Tracking ..........\.............\2.4 团队建设 Team Buliding ..........\.............\..........................\MTV-SMCP项目组月考核汇总表9月.xls ..........\.............\..........................\portaldemo项目沟通既要.xls ..........\.............\..........................\vssver.scc ..........\.............\2.5 公司制度 ..........\3 配置管理 CM .................................................. ..........\4 质量管理 QM ..........\.............\4.1 度量 Metrics .................................................. ..........\5 测试记录 Test Record .................................................. ..........\6 培训及总结 Training ..........\.....................\6.1 Plan阶段 .................................................. ..........\7 工具使用 Tools ..........\8 参考资料 Reference ..........\9 日志 Timesheet ..........\................\9.1 工时统计 Timesheet ..........\................\9.2 工作日志 Log ..........\................\9.3 技术问题跟踪Tracking ..........\................\........................\infoX-PortalDemo技术讨论问题跟踪表.xls

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值