<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Gradle on All about Raspberry Pi</title><link>https://hugozhu.site/tags/gradle/</link><description>Recent content in Gradle on All about Raspberry Pi</description><generator>Hugo</generator><language>en</language><lastBuildDate>Wed, 23 Jul 2014 00:00:00 +0000</lastBuildDate><atom:link href="https://hugozhu.site/tags/gradle/index.xml" rel="self" type="application/rss+xml"/><item><title>Gradle的Properties</title><link>https://hugozhu.site/post/2014/47-use-gradle-properties-to-set-alternative-android-build-tools/</link><pubDate>Wed, 23 Jul 2014 00:00:00 +0000</pubDate><guid>https://hugozhu.site/post/2014/47-use-gradle-properties-to-set-alternative-android-build-tools/</guid><description>&lt;h1 id="问题背景">问题背景&lt;/h1>
&lt;p>团队一起在开发一个Android项目，工程师有的使用Eclipse，有个使用Intellij IDEA，有的使用Android Studio。每个人安装的Android SDK build-tools可能都不一样，有的是19.0.3，有的是19.1.0，不同版本的build-tools对Gradle Plugin也有相应的要求，如19.0.3对应的是com.android.tools.build:gradle:0.10.+，19.1.0对应的是com.android.tools.build:gradle:0.12.+，下面是一个典型的build.gradle配置文件。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span class="line">&lt;span class="cl">&lt;span class="n">buildscript&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">repositories&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">mavenCentral&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">dependencies&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">classpath&lt;/span> &lt;span class="s1">&amp;#39;com.android.tools.build:gradle:0.10.+&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">apply&lt;/span> &lt;span class="n">plugin&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;android-library&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">android&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">compileSdkVersion&lt;/span> &lt;span class="mi">19&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">buildToolsVersion&lt;/span> &lt;span class="mf">19.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">defaultConfig&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">minSdkVersion&lt;/span> &lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">targetSdkVersion&lt;/span> &lt;span class="mi">19&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>在合作开发中遇到的一个尴尬的问题是，IDEA最新版还不能很好的支持Gradle Plugin 0.12+，而Android Studio最新版则要求使用0.12+。大家又共用一个Git仓库。可能的解决方案是，从Git checkout出来的项目需要有一个基础的版本号，但是开发者可以在本地通过一处文件（不check in到git）来重载版本号。&lt;/p>
&lt;h1 id="解决方案">解决方案&lt;/h1>
&lt;p>Gradle支持三种Properties, 这三种Properties的作用域和初始化阶段都不一样，下面分别列出了其部分特点。:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;em>System Properties：&lt;/em>&lt;/p>
&lt;ol>
&lt;li>可通过gradle.properties文件，环境变量或命令行-D参数设置	2. 可在setting.gradle或build.gradle中动态修改，在setting.gradle中的修改对buildscript block可见；&lt;/li>
&lt;li>所有工程可见，不建议在build.gradle中修改&lt;/li>
&lt;li>多子工程项目中，子工程的gradle.properties会被忽略掉，只有root工程的gradle.properties有效；&lt;/li>
&lt;/ol>
&lt;/li>
&lt;li>
&lt;p>&lt;em>Project Properties：&lt;/em>&lt;/p>
&lt;ol>
&lt;li>可通过gradle.properties文件，环境变量或命令行-P参数设置，优先级是:&lt;/li>
&lt;li>可在build.gradle中动态修改，但引用不存在的project properties会立即抛错&lt;/li>
&lt;li>动态修改过的project properties在buildscript block中不可见&lt;/li>
&lt;/ol>
&lt;/li>
&lt;li>
&lt;p>&lt;em>Project ext properties：&lt;/em>&lt;/p>
&lt;ol>
&lt;li>可在项目的build.gradle中声明和使用，本工程和子工程可见&lt;/li>
&lt;li>不能在setting.gradle中访问&lt;/li>
&lt;/ol>
&lt;/li>
&lt;/ol>
&lt;p>如果有多处设置，加载次序如下（注意：gradle 2.0是这样的, 1.10~1.12有bug）, 后面的覆盖前面的设置&lt;/p>
&lt;ol>
&lt;li>from gradle.properties located in project build dir.&lt;/li>
&lt;li>from gradle.properties located in gradle user home.&lt;/li>
&lt;li>from system properties, e.g. when -Dsome.property is used in the command line.&lt;/li>
&lt;li>setting.gradle&lt;/li>
&lt;li>build.gradle&lt;/li>
&lt;/ol>
&lt;p>根据其特点，这里给出一个使用System Properties来解决问题的方案。&lt;/p></description></item></channel></rss>