Gradle命令和配置
来源:互联网 发布:单片机方案 编辑:程序博客网 时间:2024/05/21 07:05
Gradle是一种构建工具,它抛弃了基于XML的构建脚本,取而代之的是采用一种基于Groovy的内部领域特定语言,建议可以先熟悉一下Groovy脚本。
在线文档:https://docs.gradle.org/current/dsl/
Gradle命令:
常用命令:
gradle明明一般是./gradlew +参数, ./代表当前目录,gradlew代表 gradle wrapper,意思是gradle的一层包装,大家可以理解为在这个项目本地就封装了gradle,即gradle wrapper, 在9GAG/gradle/wrapper/gralde-wrapper.properties文件中声明了它指向的目录和版本。只要下载成功即可用grdlew wrapper的命令代替全局的gradle命令。
- ./gradlew -v 版本号
- ./gradlew clean 清除app目录下的build文件夹
- ./gradlew build 检查依赖并编译打包
这里注意的是 ./gradlew build 命令把debug、release环境的包都打出来,如果正式发布只需要打Release的包,该怎么办呢,下面介绍一个很有用的命令 assemble, 如:
- ./gradlew assembleDebug 编译并打Debug包
- ./gradlew assembleRelease 编译并打Release的包
除此之外,assemble还可以和productFlavors结合使用:
- ./gradlew installRelease Release模式打包并安装
- ./gradlew uninstallRelease 卸载Release模式包
加入自定义参数:
比如我们想根据不同的参数来进行不用的编译配置,可以在./gradlew中加入自定义参数。
- ./gradlew assembleDebug -Pcustom=true
就可以在build.gradle中使用下面代码来判断:
<span style="font-size:18px;"><code class="hljs matlab has-numbering"><span class="hljs-keyword">if</span> (<span class="hljs-transposed_variable">project.</span>hasProperty(<span class="hljs-string">'custom'</span>))<span class="hljs-cell">{}</span></code></span><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li></ul><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li></ul>
assemble结合Build Variants来创建task
assemble 还能和 Product Flavor 结合创建新的任务,其实 assemble 是和 Build Variants 一起结合使用的,而 Build Variants = Build Type + Product Flavor,举个例子大家就明白了:
如果我们想打包wandoujia渠道的release版本,执行如下命令就好了:
- ./gradlew assembleWandoujiaRelease
如果我们只打wandoujia渠道版本,则:
- ./gradlew assembleWandoujia
此命令会生成wandoujia渠道的Release和Debug版本
同理我想打全部Release版本:
- ./gradlew assembleRelease
这条命令会把Product Flavor下的所有渠道的Release版本都打出来。
总之,assemble 命令创建task有如下用法:
- assemble: 允许直接构建一个Variant版本,例如assembleFlavor1Debug。
- assemble: 允许构建指定Build Type的所有APK,例如assembleDebug将会构建Flavor1Debug和Flavor2Debug两个Variant版本。
- assemble: 允许构建指定flavor的所有APK,例如assembleFlavor1将会构建Flavor1Debug和Flavor1Release两个Variant版本。
Gradle配置:
Gradle构建脚本 build.gradle:
Gradle属性文件 gradle.properties
Gradle设置文件 settings.gradle
build.gradle
先看整个项目的gradle配置文件:
<span style="font-size:18px;"><code class="hljs lua has-numbering">buildscript { repositories { jcenter() } dependencies { classpath <span class="hljs-string">'com.android.tools.build:gradle:1.3.0'</span> // NOTE: Do <span class="hljs-keyword">not</span> place your application dependencies here; they belong // <span class="hljs-keyword">in</span> the individual <span class="hljs-built_in">module</span> build.gradle files }}allprojects { repositories { jcenter() }}</code></span><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li><li><span style="font-size:18px;">6</span></li><li><span style="font-size:18px;">7</span></li><li><span style="font-size:18px;">8</span></li><li><span style="font-size:18px;">9</span></li><li><span style="font-size:18px;">10</span></li><li><span style="font-size:18px;">11</span></li><li><span style="font-size:18px;">12</span></li><li><span style="font-size:18px;">13</span></li><li><span style="font-size:18px;">14</span></li><li><span style="font-size:18px;">15</span></li><li><span style="font-size:18px;">16</span></li><li><span style="font-size:18px;">17</span></li></ul><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li><li><span style="font-size:18px;">6</span></li><li><span style="font-size:18px;">7</span></li><li><span style="font-size:18px;">8</span></li><li><span style="font-size:18px;">9</span></li><li><span style="font-size:18px;">10</span></li><li><span style="font-size:18px;">11</span></li><li><span style="font-size:18px;">12</span></li><li><span style="font-size:18px;">13</span></li><li><span style="font-size:18px;">14</span></li><li><span style="font-size:18px;">15</span></li><li><span style="font-size:18px;">16</span></li><li><span style="font-size:18px;">17</span></li></ul>
内容主要包含了两个方面:一个是声明仓库的源,这里可以看到是指明的jcenter(), 之前版本则是mavenCentral(), jcenter可以理解成是一个新的中央远程仓库,兼容maven中心仓库,而且性能更优。
另一个是声明了Android gradle plugin的版本,android studio 1.0正式版必须要求支持gradle plugin 1.0的版本
某个Moudle的gradle配置文件:
buildscript
<span style="font-size:18px;"><code class="hljs matlab has-numbering">buildscript <span class="hljs-cell">{ repositories { maven { url <span class="hljs-string">'http://*********'</span> }</span> } dependencies <span class="hljs-cell">{ classpath <span class="hljs-string">'com.android.tools.build:gradle:1.3.1'</span> }</span>}</code></span><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li><li><span style="font-size:18px;">6</span></li><li><span style="font-size:18px;">7</span></li><li><span style="font-size:18px;">8</span></li><li><span style="font-size:18px;">9</span></li></ul><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li><li><span style="font-size:18px;">6</span></li><li><span style="font-size:18px;">7</span></li><li><span style="font-size:18px;">8</span></li><li><span style="font-size:18px;">9</span></li></ul>
- buildscript{}设置脚本的运行环境。
- repositories{}支持java依赖库管理,用于项目依赖。
- dependencies{}依赖包的定义。支持maven/ivy,远程,本地库,也支持单文件。如果前面定义了repositories{}maven 库,则使用maven的依赖库,使用时只需要按照用类似于com.android.tools.build:gradle:0.4,gradle 就会自动的往远程库下载相应的依赖。
apply
<span style="font-size:18px;"><code class="hljs cs has-numbering"><span class="hljs-comment">//声明是Android程序</span>apply plugin: <span class="hljs-string">'com.android.application'</span></code></span><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li></ul><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li></ul>
- apply plugin:声明构建的项目类型。如果是库的话就加
<span style="font-size:18px;"><code class="hljs vhdl has-numbering">apply plugin: <span class="hljs-attribute">'com</span>.android.<span class="hljs-keyword">library</span>'</code></span><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li></ul><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li></ul>
android
<span style="font-size:18px;"><code class="hljs livecodeserver has-numbering">android { <span class="hljs-comment"> // 编译SDK的版本</span> compileSdkVersion <span class="hljs-number">22</span> <span class="hljs-comment"> // build tools的版本</span> buildToolsVersion <span class="hljs-string">"23.0.1"</span> <span class="hljs-comment"> //aapt配置</span> aaptOptions { <span class="hljs-comment"> //不用压缩的文件</span> noCompress <span class="hljs-string">'pak'</span>, <span class="hljs-string">'dat'</span>, <span class="hljs-string">'bin'</span>, <span class="hljs-string">'notice'</span> <span class="hljs-comment"> //打包时候要忽略的文件</span> ignoreAssetsPattern <span class="hljs-string">"!.svn:!.git"</span> <span class="hljs-comment"> //分包</span> multiDexEnabled <span class="hljs-constant">true</span> <span class="hljs-comment"> //--extra-packages是为资源文件设置别名:意思是通过该应用包名+R,com.android.test1.R和com.android.test2.R都可以访问到资源</span> additionalParameters <span class="hljs-string">'--extra-packages'</span>, <span class="hljs-string">'com.android.test1'</span>,<span class="hljs-string">'--extra-packages'</span>,<span class="hljs-string">'com.android.test2'</span> } <span class="hljs-comment"> //默认配置</span> defaultConfig { <span class="hljs-comment"> //应用的包名</span> applicationId <span class="hljs-string">"com.example.heqiang.androiddemo"</span> minSdkVersion <span class="hljs-number">21</span> targetSdkVersion <span class="hljs-number">22</span> versionCode <span class="hljs-number">1</span> versionName <span class="hljs-string">"1.0"</span> } <span class="hljs-comment"> //编译配置</span> compileOptions { <span class="hljs-comment"> // java版本</span> sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } <span class="hljs-comment"> //源文件目录设置</span> sourceSets { main { <span class="hljs-comment"> //jni lib的位置</span> jniLibs.srcDirs = jniLibs.srcDirs << <span class="hljs-string">'src/jniLibs'</span> <span class="hljs-comment"> //定义多个资源文件夹,这种情况下,两个资源文件夹具有相同优先级,即如果一个资源在两个文件夹都声明了,合并会报错。</span> res.srcDirs = [<span class="hljs-string">'src/main/res'</span>, <span class="hljs-string">'src/main/res2'</span>] } } <span class="hljs-comment"> //签名配置</span> signingConfigs { debug { keyAlias <span class="hljs-string">'androiddebugkey'</span> keyPassword <span class="hljs-string">'android'</span> storeFile <span class="hljs-built_in">file</span>(<span class="hljs-string">'keystore/debug.keystore'</span>) storePassword <span class="hljs-string">'android'</span> } } buildTypes { <span class="hljs-comment"> //release版本配置</span> release { debuggable <span class="hljs-constant">false</span> <span class="hljs-comment"> // 是否进行混淆</span> minifyEnabled <span class="hljs-constant">true</span> <span class="hljs-comment"> //去除没有用到的资源文件,要求minifyEnabled为true才生效</span> shrinkResources <span class="hljs-constant">true</span> <span class="hljs-comment"> // 混淆文件的位置</span> proguardFiles getDefaultProguardFile(<span class="hljs-string">'proguard-android.txt'</span>), <span class="hljs-string">'proguard-rules.txt'</span> signingConfig signingConfigs.debug <span class="hljs-comment"> //ndk的一些相关配置</span> ndk { abiFilter <span class="hljs-string">"armeabi"</span> } } <span class="hljs-comment"> //debug版本配置</span> debug { debuggable <span class="hljs-constant">true</span> <span class="hljs-comment"> // 是否进行混淆</span> minifyEnabled <span class="hljs-constant">false</span> <span class="hljs-comment"> //去除没有用到的资源文件,要求minifyEnabled为true才生效</span> shrinkResources <span class="hljs-constant">true</span> <span class="hljs-comment"> // 混淆文件的位置</span> proguardFiles getDefaultProguardFile(<span class="hljs-string">'proguard-android.txt'</span>), <span class="hljs-string">'proguard-rules.txt'</span> signingConfig signingConfigs.debug <span class="hljs-comment"> //ndk的一些相关配置</span> ndk { abiFilter <span class="hljs-string">"armeabi"</span> } } } <span class="hljs-comment"> // lint配置 </span> lintOptions { <span class="hljs-comment"> //移除lint检查的error</span> abortOnError <span class="hljs-constant">false</span> <span class="hljs-comment"> //禁止掉某些lint检查</span> disable <span class="hljs-string">'NewApi'</span> }}</code></span><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li><li><span style="font-size:18px;">6</span></li><li><span style="font-size:18px;">7</span></li><li><span style="font-size:18px;">8</span></li><li><span style="font-size:18px;">9</span></li><li><span style="font-size:18px;">10</span></li><li><span style="font-size:18px;">11</span></li><li><span style="font-size:18px;">12</span></li><li><span style="font-size:18px;">13</span></li><li><span style="font-size:18px;">14</span></li><li><span style="font-size:18px;">15</span></li><li><span style="font-size:18px;">16</span></li><li><span style="font-size:18px;">17</span></li><li><span style="font-size:18px;">18</span></li><li><span style="font-size:18px;">19</span></li><li><span style="font-size:18px;">20</span></li><li><span style="font-size:18px;">21</span></li><li><span style="font-size:18px;">22</span></li><li><span style="font-size:18px;">23</span></li><li><span style="font-size:18px;">24</span></li><li><span style="font-size:18px;">25</span></li><li><span style="font-size:18px;">26</span></li><li><span style="font-size:18px;">27</span></li><li><span style="font-size:18px;">28</span></li><li><span style="font-size:18px;">29</span></li><li><span style="font-size:18px;">30</span></li><li><span style="font-size:18px;">31</span></li><li><span style="font-size:18px;">32</span></li><li><span style="font-size:18px;">33</span></li><li><span style="font-size:18px;">34</span></li><li><span style="font-size:18px;">35</span></li><li><span style="font-size:18px;">36</span></li><li><span style="font-size:18px;">37</span></li><li><span style="font-size:18px;">38</span></li><li><span style="font-size:18px;">39</span></li><li><span style="font-size:18px;">40</span></li><li><span style="font-size:18px;">41</span></li><li><span style="font-size:18px;">42</span></li><li><span style="font-size:18px;">43</span></li><li><span style="font-size:18px;">44</span></li><li><span style="font-size:18px;">45</span></li><li><span style="font-size:18px;">46</span></li><li><span style="font-size:18px;">47</span></li><li><span style="font-size:18px;">48</span></li><li><span style="font-size:18px;">49</span></li><li><span style="font-size:18px;">50</span></li><li><span style="font-size:18px;">51</span></li><li><span style="font-size:18px;">52</span></li><li><span style="font-size:18px;">53</span></li><li><span style="font-size:18px;">54</span></li><li><span style="font-size:18px;">55</span></li><li><span style="font-size:18px;">56</span></li><li><span style="font-size:18px;">57</span></li><li><span style="font-size:18px;">58</span></li><li><span style="font-size:18px;">59</span></li><li><span style="font-size:18px;">60</span></li><li><span style="font-size:18px;">61</span></li><li><span style="font-size:18px;">62</span></li><li><span style="font-size:18px;">63</span></li><li><span style="font-size:18px;">64</span></li><li><span style="font-size:18px;">65</span></li><li><span style="font-size:18px;">66</span></li><li><span style="font-size:18px;">67</span></li><li><span style="font-size:18px;">68</span></li><li><span style="font-size:18px;">69</span></li><li><span style="font-size:18px;">70</span></li><li><span style="font-size:18px;">71</span></li><li><span style="font-size:18px;">72</span></li><li><span style="font-size:18px;">73</span></li><li><span style="font-size:18px;">74</span></li><li><span style="font-size:18px;">75</span></li><li><span style="font-size:18px;">76</span></li><li><span style="font-size:18px;">77</span></li><li><span style="font-size:18px;">78</span></li><li><span style="font-size:18px;">79</span></li><li><span style="font-size:18px;">80</span></li><li><span style="font-size:18px;">81</span></li><li><span style="font-size:18px;">82</span></li><li><span style="font-size:18px;">83</span></li><li><span style="font-size:18px;">84</span></li><li><span style="font-size:18px;">85</span></li><li><span style="font-size:18px;">86</span></li><li><span style="font-size:18px;">87</span></li><li><span style="font-size:18px;">88</span></li><li><span style="font-size:18px;">89</span></li><li><span style="font-size:18px;">90</span></li><li><span style="font-size:18px;">91</span></li><li><span style="font-size:18px;">92</span></li><li><span style="font-size:18px;">93</span></li><li><span style="font-size:18px;">94</span></li><li><span style="font-size:18px;">95</span></li></ul><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li><li><span style="font-size:18px;">6</span></li><li><span style="font-size:18px;">7</span></li><li><span style="font-size:18px;">8</span></li><li><span style="font-size:18px;">9</span></li><li><span style="font-size:18px;">10</span></li><li><span style="font-size:18px;">11</span></li><li><span style="font-size:18px;">12</span></li><li><span style="font-size:18px;">13</span></li><li><span style="font-size:18px;">14</span></li><li><span style="font-size:18px;">15</span></li><li><span style="font-size:18px;">16</span></li><li><span style="font-size:18px;">17</span></li><li><span style="font-size:18px;">18</span></li><li><span style="font-size:18px;">19</span></li><li><span style="font-size:18px;">20</span></li><li><span style="font-size:18px;">21</span></li><li><span style="font-size:18px;">22</span></li><li><span style="font-size:18px;">23</span></li><li><span style="font-size:18px;">24</span></li><li><span style="font-size:18px;">25</span></li><li><span style="font-size:18px;">26</span></li><li><span style="font-size:18px;">27</span></li><li><span style="font-size:18px;">28</span></li><li><span style="font-size:18px;">29</span></li><li><span style="font-size:18px;">30</span></li><li><span style="font-size:18px;">31</span></li><li><span style="font-size:18px;">32</span></li><li><span style="font-size:18px;">33</span></li><li><span style="font-size:18px;">34</span></li><li><span style="font-size:18px;">35</span></li><li><span style="font-size:18px;">36</span></li><li><span style="font-size:18px;">37</span></li><li><span style="font-size:18px;">38</span></li><li><span style="font-size:18px;">39</span></li><li><span style="font-size:18px;">40</span></li><li><span style="font-size:18px;">41</span></li><li><span style="font-size:18px;">42</span></li><li><span style="font-size:18px;">43</span></li><li><span style="font-size:18px;">44</span></li><li><span style="font-size:18px;">45</span></li><li><span style="font-size:18px;">46</span></li><li><span style="font-size:18px;">47</span></li><li><span style="font-size:18px;">48</span></li><li><span style="font-size:18px;">49</span></li><li><span style="font-size:18px;">50</span></li><li><span style="font-size:18px;">51</span></li><li><span style="font-size:18px;">52</span></li><li><span style="font-size:18px;">53</span></li><li><span style="font-size:18px;">54</span></li><li><span style="font-size:18px;">55</span></li><li><span style="font-size:18px;">56</span></li><li><span style="font-size:18px;">57</span></li><li><span style="font-size:18px;">58</span></li><li><span style="font-size:18px;">59</span></li><li><span style="font-size:18px;">60</span></li><li><span style="font-size:18px;">61</span></li><li><span style="font-size:18px;">62</span></li><li><span style="font-size:18px;">63</span></li><li><span style="font-size:18px;">64</span></li><li><span style="font-size:18px;">65</span></li><li><span style="font-size:18px;">66</span></li><li><span style="font-size:18px;">67</span></li><li><span style="font-size:18px;">68</span></li><li><span style="font-size:18px;">69</span></li><li><span style="font-size:18px;">70</span></li><li><span style="font-size:18px;">71</span></li><li><span style="font-size:18px;">72</span></li><li><span style="font-size:18px;">73</span></li><li><span style="font-size:18px;">74</span></li><li><span style="font-size:18px;">75</span></li><li><span style="font-size:18px;">76</span></li><li><span style="font-size:18px;">77</span></li><li><span style="font-size:18px;">78</span></li><li><span style="font-size:18px;">79</span></li><li><span style="font-size:18px;">80</span></li><li><span style="font-size:18px;">81</span></li><li><span style="font-size:18px;">82</span></li><li><span style="font-size:18px;">83</span></li><li><span style="font-size:18px;">84</span></li><li><span style="font-size:18px;">85</span></li><li><span style="font-size:18px;">86</span></li><li><span style="font-size:18px;">87</span></li><li><span style="font-size:18px;">88</span></li><li><span style="font-size:18px;">89</span></li><li><span style="font-size:18px;">90</span></li><li><span style="font-size:18px;">91</span></li><li><span style="font-size:18px;">92</span></li><li><span style="font-size:18px;">93</span></li><li><span style="font-size:18px;">94</span></li><li><span style="font-size:18px;">95</span></li></ul>
android{}设置编译android项目的参数,构建android项目的所有配置都写在这里。
除了上面写的,在android{}块中可以包含以下直接配置项:
- productFlavors{ } 产品风格配置,ProductFlavor类型
- testOptions{ } 测试配置,TestOptions类型
- dexOptions{ } dex配置,DexOptions类型
- packagingOptions{ } PackagingOptions类型
- jacoco{ } JacocoExtension类型。 用于设定 jacoco版本
- splits{ } Splits类型。
几点说明:
- 文件开头apply plugin是最新gradle版本的写法,以前的写法是apply plugin: ‘android’, 如果还是以前的写法,请改正过来。
- minifyEnabled也是最新的语法,很早之前是runProguard,这个也需要更新下。
- proguardFiles这部分有两段,前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,免去了我们很多事,这个文件的目录在 sdk目录/tools/proguard/proguard-android.txt , 后一部分是我们项目里的自定义的混淆文件,目录就在 app/proguard-rules.txt , 如果你用Studio 1.0创建的新项目默认生成的文件名是 proguard-rules.pro , 这个名字没关系,在这个文件里你可以声明一些第三方依赖的一些混淆规则。最终混淆的结果是这两部分文件共同作用的。
- aaptOptions更多介绍 http://blog.csdn.net/heqiangflytosky/article/details/51009123
repositories
<span style="font-size:18px;"><code class="hljs bash has-numbering">repositories { flatDir { //本地依赖包路径 <span class="hljs-built_in">dirs</span> <span class="hljs-string">'../../../../main/libs'</span> }}</code></span><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li><li><span style="font-size:18px;">6</span></li></ul><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li><li><span style="font-size:18px;">6</span></li></ul>
dependencies
<span style="font-size:18px;"><code class="hljs livecodeserver has-numbering">dependencies { compile <span class="hljs-built_in">files</span>(<span class="hljs-string">'libs/android-support-v4.jar'</span>) <span class="hljs-comment"> //在flatDir.dirs下面找依赖的aar</span> compile (name:<span class="hljs-string">'ui'</span>, ext:<span class="hljs-string">'aar'</span>) <span class="hljs-comment"> // 编译extras目录下的ShimmerAndroid模块</span> compile project(<span class="hljs-string">':extras:ShimmerAndroid'</span>) <span class="hljs-comment"> // 编译CommonSDK模块,但是去掉此模块中对com.android.support的依赖,防止重复依赖报错</span> compile (project(<span class="hljs-string">':CommonSDK'</span>)) { exclude group: <span class="hljs-string">"com.android.support"</span> } provided fileTree(dir: <span class="hljs-string">'src/android5/libs'</span>, <span class="hljs-built_in">include</span>: [<span class="hljs-string">'*.jar'</span>]) provided <span class="hljs-string">'com.android.support:support-v4:21.0.3'</span> provided project(<span class="hljs-string">':main-host'</span>)}</code></span><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li><li><span style="font-size:18px;">6</span></li><li><span style="font-size:18px;">7</span></li><li><span style="font-size:18px;">8</span></li><li><span style="font-size:18px;">9</span></li><li><span style="font-size:18px;">10</span></li><li><span style="font-size:18px;">11</span></li><li><span style="font-size:18px;">12</span></li></ul><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li><li><span style="font-size:18px;">6</span></li><li><span style="font-size:18px;">7</span></li><li><span style="font-size:18px;">8</span></li><li><span style="font-size:18px;">9</span></li><li><span style="font-size:18px;">10</span></li><li><span style="font-size:18px;">11</span></li><li><span style="font-size:18px;">12</span></li></ul>
- compile和provided
compile表示编译时提供并打包进apk。
provided表示只在编译时提供,不打包进apk。 - exclude
- include
CommonSDK模块的定义可以参考settings.gradle
其他的介绍可以参考 依赖库管理。
几点说明
- 看到上面的两个一模一样的repositories和dependencies了吗?他们的作用是不一样的,在buildscript里面的那个是插件初始化环境用的,用于设定插件的下载仓库,而外面的这个是设定工程依赖的一些模块和远程library的下载仓库的。
settings.gradle
这个文件是全局的项目配置文件,里面主要声明一些需要加入gradle的module。
一般在setting.gradle中主要是调用include方法,导入工程下的各个子模块。
那我们在setting.gradle里面还能写什么呢?因为setting.gradle对应的是gradle中的Settings对象,那查下Settings的文档(https://docs.gradle.org/current/dsl/org.gradle.api.initialization.Settings.html),看下它都有哪些方法,哪些属性,就知道在setting.gradle能写什么了;
<span style="font-size:18px;"><code class="hljs php has-numbering"><span class="hljs-keyword">include</span> <span class="hljs-string">':AndroidDemo'</span><span class="hljs-keyword">include</span> <span class="hljs-string">':CommonSDK'</span>project(<span class="hljs-string">':CommonSDK'</span>).projectDir = <span class="hljs-keyword">new</span> File(settingsDir, <span class="hljs-string">'../../CommonSDK/'</span>)</code></span><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li></ul><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li></ul>
include调用后,生成了一个名为:CommonSDK的Project对象,project(‘:CommonSDK’)取出这个对象,设置Project的 projectDir属性。projectDir哪里来的?请看Project类的文档。
依赖库管理
本地依赖
<span style="font-size:18px;"><code class="hljs livecodeserver has-numbering">dependencies { <span class="hljs-comment"> //单文件依赖</span> compile <span class="hljs-built_in">files</span>(<span class="hljs-string">'libs/android-support-v4.jar'</span>) <span class="hljs-comment"> //某个文件夹下面全部依赖</span> compile fileTree(dir: <span class="hljs-string">'src/android6/libs'</span>, <span class="hljs-built_in">include</span>: [<span class="hljs-string">'*.jar'</span>]) compile (name:<span class="hljs-string">'ui'</span>, ext:<span class="hljs-string">'aar'</span>) compile (project(<span class="hljs-string">':CommonSDK'</span>)) { exclude group: <span class="hljs-string">"com.android.support"</span> } provided fileTree(dir: <span class="hljs-string">'src/android5/libs'</span>, <span class="hljs-built_in">include</span>: [<span class="hljs-string">'*.jar'</span>]) provided <span class="hljs-string">'com.android.support:support-v4:21.0.3'</span> provided project(<span class="hljs-string">':main-host'</span>)}</code></span><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li><li><span style="font-size:18px;">6</span></li><li><span style="font-size:18px;">7</span></li><li><span style="font-size:18px;">8</span></li><li><span style="font-size:18px;">9</span></li><li><span style="font-size:18px;">10</span></li><li><span style="font-size:18px;">11</span></li></ul><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li><li><span style="font-size:18px;">6</span></li><li><span style="font-size:18px;">7</span></li><li><span style="font-size:18px;">8</span></li><li><span style="font-size:18px;">9</span></li><li><span style="font-size:18px;">10</span></li><li><span style="font-size:18px;">11</span></li></ul>
远程依赖
gradle同时支持maven,ivy,以maven作为例子:
<span style="font-size:18px;"><code class="hljs cs has-numbering">repositories { <span class="hljs-comment">//从中央库里面获取依赖</span> mavenCentral() <span class="hljs-comment">//或者使用指定的本地maven 库</span> maven{ url <span class="hljs-string">"file://F:/githubrepo/releases"</span> } <span class="hljs-comment">//或者使用指定的远程maven库</span> maven{ url <span class="hljs-string">"https://github.com/youxiachai/youxiachai-mvn-repo/raw/master/releases"</span> } } dependencies { <span class="hljs-comment">//应用格式: packageName:artifactId:version </span> compile <span class="hljs-string">'com.google.android:support-v4:r13'</span> }</code></span><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li><li><span style="font-size:18px;">6</span></li><li><span style="font-size:18px;">7</span></li><li><span style="font-size:18px;">8</span></li><li><span style="font-size:18px;">9</span></li><li><span style="font-size:18px;">10</span></li><li><span style="font-size:18px;">11</span></li><li><span style="font-size:18px;">12</span></li><li><span style="font-size:18px;">13</span></li><li><span style="font-size:18px;">14</span></li><li><span style="font-size:18px;">15</span></li><li><span style="font-size:18px;">16</span></li><li><span style="font-size:18px;">17</span></li></ul><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li><li><span style="font-size:18px;">6</span></li><li><span style="font-size:18px;">7</span></li><li><span style="font-size:18px;">8</span></li><li><span style="font-size:18px;">9</span></li><li><span style="font-size:18px;">10</span></li><li><span style="font-size:18px;">11</span></li><li><span style="font-size:18px;">12</span></li><li><span style="font-size:18px;">13</span></li><li><span style="font-size:18px;">14</span></li><li><span style="font-size:18px;">15</span></li><li><span style="font-size:18px;">16</span></li><li><span style="font-size:18px;">17</span></li></ul>
项目依赖
对于项目依赖android library的话,在这里需要使用gradle mulit project机制。
Mulit project设置是gradle约定的一种格式,如果需要编译某个项目之前,要先编译另外一个项目的时候,就需要用到。结构如下(来自于官方文档):
<span style="font-size:18px;"><code class="hljs 1c has-numbering">MyProject/ <span class="hljs-string">| settings.gradle </span> + app/ <span class="hljs-string">| build.gradle </span> + libraries/ + lib1/ <span class="hljs-string">| build.gradle </span> + lib2/ <span class="hljs-string">| build.gradle</span></code></span><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li><li><span style="font-size:18px;">6</span></li><li><span style="font-size:18px;">7</span></li><li><span style="font-size:18px;">8</span></li><li><span style="font-size:18px;">9</span></li></ul><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li><li><span style="font-size:18px;">6</span></li><li><span style="font-size:18px;">7</span></li><li><span style="font-size:18px;">8</span></li><li><span style="font-size:18px;">9</span></li></ul>
需要在workplace目录下面创建settings.gradle 的文件,然后在里面写上:
<span style="font-size:18px;"><code class="hljs ruby has-numbering"><span class="hljs-keyword">include</span> <span class="hljs-string">':app'</span>, <span class="hljs-string">':libraries:lib1'</span>, <span class="hljs-string">':libraries:lib2'</span> </code></span><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li></ul><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li></ul>
例如:
<span style="font-size:18px;"><code class="hljs php has-numbering"><span class="hljs-keyword">include</span> <span class="hljs-string">':AndroidDemo'</span><span class="hljs-keyword">include</span> <span class="hljs-string">':CommonSDK'</span>project(<span class="hljs-string">':CommonSDK'</span>).projectDir = <span class="hljs-keyword">new</span> File(settingsDir, <span class="hljs-string">'../../CommonSDK/'</span>)</code></span><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li></ul><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li></ul>
如此,gradle mutil project 就设置完毕。
对于app project如果需要应用libraries目录下的lib1,只需要在app project的build.gradle文件里的依赖中这么写:
<span style="font-size:18px;"><code class="hljs scss has-numbering">compile <span class="hljs-function">project(<span class="hljs-string">':libraries:lib1'</span>)</span></code></span><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li></ul><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li></ul>
类似前面的
<span style="font-size:18px;"><code class="hljs scss has-numbering">provided <span class="hljs-function">project(<span class="hljs-string">':main-host'</span>)</span></code></span><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li></ul><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li></ul>
即可完成,写完以后可以用gradle AndroidDependencies可以检查依赖状况
多渠道打包:
主要借助
<span style="font-size:18px;"><code class="hljs mathematica has-numbering">android <span class="hljs-list">{ productFlavors{ …… }</span>}</code></span><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li></ul><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li></ul>
来实现。
网上多是类似友盟的配置,copy过来:
http://blog.csdn.net/maosidiaoxian/article/details/42000913
https://segmentfault.com/a/1190000004050697
在AndroidManifest.xml里面写上:
<span style="font-size:18px;"><code class="hljs haskell has-numbering"><meta-<span class="hljs-typedef"><span class="hljs-keyword">data</span></span> android:name=<span class="hljs-string">"UMENG_CHANNEL"</span> android:value=<span class="hljs-string">"Channel_ID"</span> /></code></span><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li></ul><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li></ul>
里面的Channel_ID就是渠道标示。我们的目标就是在编译的时候这个值能够自动变化。
<span style="font-size:18px;"><code class="hljs bash has-numbering">android { productFlavors { xiaomi { manifestPlaceholders = [UMENG_CHANNEL_VALUE: <span class="hljs-string">"xiaomi"</span>] } _360 { manifestPlaceholders = [UMENG_CHANNEL_VALUE: <span class="hljs-string">"_360"</span>] } baidu { manifestPlaceholders = [UMENG_CHANNEL_VALUE: <span class="hljs-string">"baidu"</span>] } wandoujia { manifestPlaceholders = [UMENG_CHANNEL_VALUE: <span class="hljs-string">"wandoujia"</span>] } } }</code></span><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li><li><span style="font-size:18px;">6</span></li><li><span style="font-size:18px;">7</span></li><li><span style="font-size:18px;">8</span></li><li><span style="font-size:18px;">9</span></li><li><span style="font-size:18px;">10</span></li><li><span style="font-size:18px;">11</span></li><li><span style="font-size:18px;">12</span></li><li><span style="font-size:18px;">13</span></li><li><span style="font-size:18px;">14</span></li><li><span style="font-size:18px;">15</span></li><li><span style="font-size:18px;">16</span></li></ul><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li><li><span style="font-size:18px;">6</span></li><li><span style="font-size:18px;">7</span></li><li><span style="font-size:18px;">8</span></li><li><span style="font-size:18px;">9</span></li><li><span style="font-size:18px;">10</span></li><li><span style="font-size:18px;">11</span></li><li><span style="font-size:18px;">12</span></li><li><span style="font-size:18px;">13</span></li><li><span style="font-size:18px;">14</span></li><li><span style="font-size:18px;">15</span></li><li><span style="font-size:18px;">16</span></li></ul>
或者批量修改
<span style="font-size:18px;"><code class="hljs avrasm has-numbering">android { productFlavors { xiaomi {} _360 {} baidu {} wandoujia {} } productFlavors<span class="hljs-preprocessor">.all</span> { flavor -> flavor<span class="hljs-preprocessor">.manifestPlaceholders</span> = [UMENG_CHANNEL_VALUE: name] }}</code></span><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li><li><span style="font-size:18px;">6</span></li><li><span style="font-size:18px;">7</span></li><li><span style="font-size:18px;">8</span></li><li><span style="font-size:18px;">9</span></li><li><span style="font-size:18px;">10</span></li><li><span style="font-size:18px;">11</span></li><li><span style="font-size:18px;">12</span></li></ul><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li><li><span style="font-size:18px;">6</span></li><li><span style="font-size:18px;">7</span></li><li><span style="font-size:18px;">8</span></li><li><span style="font-size:18px;">9</span></li><li><span style="font-size:18px;">10</span></li><li><span style="font-size:18px;">11</span></li><li><span style="font-size:18px;">12</span></li></ul>
然后用 ./gradlew assembleRelease 这条命令会把Product Flavor下的所有渠道的Release版本都打出来。
assemble: 允许构建指定flavor的所有APK,例如assembleFlavor1将会构建Flavor1Debug和Flavor1Release两个Variant版本。
在上面当中,我们也可以指定一个默认的渠道名,如果需要的话。指定默认的值是在defaultConfig节点当中添加如下内容:
manifestPlaceholders = [ CHANNEL_NAME:”Unspecified”]
这里的Unspecified换成你实际上的默认的渠道名。
使用manifestPlaceholders的这种配置,同样适用于manifest的其他配置。比如你需要在不同渠道发布的apk里面,指定不同的启动Activity。比如在豌豆荚里面发布的,启动的Activity显示的是豌豆荚首发的界面,应用宝里面启动的是应用宝首发的界面(哈哈,有点坏),你就可以对你的activity的值使用 {activity_name}的方式,然后在productFlavors里面配置这个{activity_name}的值。
Gradle依赖的统一管理
我们可以在项目的根目录创建一个gradle配置文件config.gradle,内容如下:
<span style="font-size:18px;"><code class="hljs cs has-numbering">ext{ android=[ compileSdkVersion: <span class="hljs-number">22</span>, buildToolsVersion: <span class="hljs-string">"23.0.1"</span>, minSdkVersion: <span class="hljs-number">21</span>, targetSdkVersion: <span class="hljs-number">22</span>, versionCode: <span class="hljs-number">1</span>, versionName: <span class="hljs-string">"1.0"</span> ] dependencies=[ compile:<span class="hljs-string">'com.android.support:support-v4:21.0.3'</span>, compile: (project(<span class="hljs-string">':CommonSDK'</span>)) { exclude <span class="hljs-keyword">group</span>: <span class="hljs-string">"com.android.support"</span> }, provided: fileTree(dir: <span class="hljs-string">'src/android5/libs'</span>, include: [<span class="hljs-string">'*.jar'</span>]), provided: project(<span class="hljs-string">':main-host'</span>) ]}</code></span><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li><li><span style="font-size:18px;">6</span></li><li><span style="font-size:18px;">7</span></li><li><span style="font-size:18px;">8</span></li><li><span style="font-size:18px;">9</span></li><li><span style="font-size:18px;">10</span></li><li><span style="font-size:18px;">11</span></li><li><span style="font-size:18px;">12</span></li><li><span style="font-size:18px;">13</span></li><li><span style="font-size:18px;">14</span></li><li><span style="font-size:18px;">15</span></li><li><span style="font-size:18px;">16</span></li></ul><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li><li><span style="font-size:18px;">2</span></li><li><span style="font-size:18px;">3</span></li><li><span style="font-size:18px;">4</span></li><li><span style="font-size:18px;">5</span></li><li><span style="font-size:18px;">6</span></li><li><span style="font-size:18px;">7</span></li><li><span style="font-size:18px;">8</span></li><li><span style="font-size:18px;">9</span></li><li><span style="font-size:18px;">10</span></li><li><span style="font-size:18px;">11</span></li><li><span style="font-size:18px;">12</span></li><li><span style="font-size:18px;">13</span></li><li><span style="font-size:18px;">14</span></li><li><span style="font-size:18px;">15</span></li><li><span style="font-size:18px;">16</span></li></ul>
targetSdkVersion的版本还有依赖库的版本升级都在这里进行统一管理,所有的module以及主项目都从这里同意读取就可以了。
在build.gradle文件中加入:
<span style="font-size:18px;"><code class="hljs cs has-numbering">apply <span class="hljs-keyword">from</span>:<span class="hljs-string">"config.gradle"</span></code></span><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li></ul><ul class="pre-numbering" style=""><li><span style="font-size:18px;">1</span></li></ul>
意思是所有的子项目或者所有的modules都可以从这个配置文件中读取内容。
android节点读取ext中android对应项,dependencies读取dependencies对应项,如果配置有变化就可以只在config.gradle中修改,是不是很方便进行配置的管理的。
- Gradle命令和配置
- Gradle命令和配置
- Gradle命令和配置
- Gradle命令和配置
- Gradle命令和配置
- Gradle命令和配置
- Gradle命令和配置
- Gradle命令和配置
- Android Studio Gradle命令和配置
- Gradle安装和配置
- as gradle和gradle插件的配置
- Android gradle和gradle插件配置
- gradle不是内部命令,手动配置gradle环境变量
- 兔子--gradle安装和配置
- Gradle的安装和配置
- Mac 安装和配置gradle
- 一、Gradle安装和配置
- 在Mac下配置Gradle命令
- 探索 Android——Handler
- logstash配合redis实例
- FreeRTOS系列第13篇---FreeRTOS内核控制
- MoMoPlayer,纯java音乐播放器
- Lire使用实例:创建索引 搜索相似图片
- Gradle命令和配置
- Swift 代码添加约束
- Maximum SHMMAX values for Linux x86 and x86-64 (Doc ID 567506.1)
- 关于C#开发OCX组件的说明
- [深度学习论文笔记][Depth Estimation] Predicting Depth, Surface Normals and Semantic Labels with a Common M
- FreeRTOS系列第14篇---FreeRTOS任务通知
- u3d 设置RectTransform属性
- 如何存储 React 组件的数据
- 强制app使用32位.so库