最近经常有人问我, 如何管理gradle版本, 我来统一讲解这些小技巧.
随着Android开发的成熟, 模块越来越多, 为了开发稳定的程序, 引入的库也随之增加, 如何确保所有项目使用相同的编译版本he库版本呢?
当然, 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!