配置Gradle

来自AndroidDevelopers

转载请注明出处 : http://blog.csdn.net/hpu_zyh/article/details/48447255
博客主页 | 简书 | 知乎 | 微博 | github

建立基本配置

Android Studio创建的project包含一个顶级构建文件(build.gradle), 并且每个module都包含一个构建文件(build.gradle)。他们是纯文本文件,使用Groovy的语法来配置构建,使用Android的Gradle插件生成。在大多数情况下,你只需要修改module下的build.gradle。例如,在BuildSystemExample项目中的modulebuild.gradle如下所示:

apply plugin: 'com.android.application'android {    compileSdkVersion 19    buildToolsVersion "19.0.0"    defaultConfig {        minSdkVersion 8        targetSdkVersion 19        versionCode 1        versionName "1.0"    }    buildTypes {        release {            minifyEnabled true            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }}dependencies {    compile project(":lib")    compile 'com.android.support:appcompat-v7:19.0.1'    compile fileTree(dir: 'libs', include: ['*.jar'])}

apply plugin: 'com.android.application'表示将Android plugin for Gradle应用到编译。这增加了Android的特定的构建任务,以顶级的构建任务,使得Android {...}提供给指定的Android特定的构建选项元素。

android {...}配置所有的Android特定的构建选项:

  • compileSdkVersion 用来编译的sdk的版本。
  • buildToolsVersion 使用什么版本的编译工具。使用SDK Manager安装多个版本的编译工具。

注:请始终使用其主要版本号 >= 您的编译目标和目标SDK的构建工具版本。

  • defaultConfig配置的清单文件(AndroidManifest.xml)的一些设置。defaultConfig的配置将覆盖AndroidManifest.xml中的设置。
    defaultConfig元素指定的配置适用于所有的版本(build variants),除非一个build variants的配置将覆盖一些值。
  • buildTypes元素控制如何构建和打包应用程序。默认情况下,构建系统定义了两种版本类型:debugreleasedebug类型包括debug标示,并且使用debug key密钥来进行签名。release类型默认情况下没有签名。在这个例子中,release版本使用ProGuard
  • dependenceies元素在android元素之外,Android的元素之后。此元素为依赖模块。后面章节介绍。

注意:当build.gradle文件有改动时,Android Studio需要同步构建配置。点击Android Studio黄色通知栏上的SyncNow

Gradle in Android Studio (2) - 配置Gradle_第1张图片

声明依赖

在这个例子中的appmodule声明了三个依赖:

...dependencies {    // Module dependency    compile project(":lib")    // Remote binary dependency    compile 'com.android.support:appcompat-v7:19.0.1'    // Local binary dependency    compile fileTree(dir: 'libs', include: ['*.jar'])}

每个这些相关性进行说明。构建系统将所有编译依赖于编译类路径,并将它们包含在最终方案。

模块依赖

app模块依赖lib模块, compile project(":lib") 声明了BuildSystemExample对lib模块的依赖关系。当您生成应用程序模块,构建系统装配,包括lib模块。

远程库依赖

app程序和lib模块从Android支持库都使用ActionBarActivity类,所以这些模块依赖于它。
编译com.android.support:appcompat-v7:19.0.1通过指定的Maven声明对Android Support Library的19.0.1版本的依赖。 如果你的SDK安装没有这个包,下载并使用SDK管理器进行安装。

AndroidStudio为默认使用Maven的中央仓库项目。 (该配置被包括在顶层构建文件)。

本地库依赖

如果您有需要本地库依赖模块,JAR文件,这些依赖关系复制到<moduleName>/libs中。
compile fileTree(dir: 'libs', include: ['*.jar'])告诉构建系统依赖 app/libs的所有JAR文件,应该包含在编译类路径,并在最后的封装。

详细信息,请参见 Dependency Management Basics用户指南中。

运行ProGuard

构建系统可以在构建过程中运行ProGuard混淆你的类。在BuildSystemExample,修改生成文件的应用程序模块运行的ProGuard的发布版本:

...android {    ...    buildTypes {        release {            minifyEnabled true            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }}...

getDefaultProguardFile('proguard-android.txt')获得从Android SDK安装的默认ProGuard的设置。 AndroidStudio 增加了模块特定的规则文件proguard-rules.pro的模块,在这里你可以添加自定义的ProGuard规则的根源。

对包装标识应用程序ID

构建系统的applicationID属性是用来唯一标识应用程序包进行发布。应用程序ID设置在build.gradle文件的Andr​​oid的部分。

 apply plugin: 'com.android.application'    android {        compileSdkVersion 19        buildToolsVersion "19.1"    defaultConfig {        applicationId "com.example.my.app"        minSdkVersion 15        targetSdkVersion 19        versionCode 1        versionName "1.0"    }    ...

注意:的applicationID仅指定在build.gradle文件,而不是在AndroidManifest.xml文件。

当使用build variants,构建系统为每个product flavors指定的build types生成不同的后缀ID。
“`
productFlavors {
pro {
applicationId = “com.example.my.pkg.pro”
}
free {
applicationId = “com.example.my.pkg.free”
}
}

buildTypes {    debug {        applicationIdSuffix ".debug"    }}....

“`

包名必须在manifest文件中指定。这是用在你的源代码来引用您的R文件,并解决任何相关activity service的注册。

 package="com.example.app">

注意:如果有多个清单(例如,product flavors为某个build type配置了不同的manifest),包名是可选的体现。如果在这些清单规定,包的名称必须与在清单在src/main/文件夹中指定的包名。

有关构建文件详细信息,请参阅构建系统概述。

配置签名设置

debugrelease版本不同的应用程序是否能够在安全设备,以及如何将APK进行签名进行调试。构建系统签署的调试版本使用已知的凭据,以避免密码提示在构建时默认密钥和证书。构建系统没有签字的发行版,除非你明确地定义了签约配置此版本。如果您还没有release版本的key,你可以生成一个,参考Signing your Applications。

使用build variants

本节将介绍 构建系统帮助你从一个单一的项目中创建不同的版本。如果你有一个演示版本,有付费版本,你要在Google Paly针对不同的设备分发多个APK,这个很有用。

构建系统使用 product flavors来创建的不同的产品版本。您的应用程序的每一个产品版本可以有不同的功能或设备的要求。构建系统还使用build type构建和打包不同的设置到不同的版本。每个product flavorbuild type组合形成一个构建变量。编译系统会生成不同的APK版本。

Build variants

这个例子项目包括两个默认生成(debug和release)和两个类型(demo和full)的。要了解有关构建变种高级应用的详细信息,请参阅构建系统概述。

Product flavors

要创建您的应用程序不同的产品版本:

  1. build.gradle文件中定义product flavors
  2. 为每个flavors添加不同的设置。
  3. 添加香精的具体来源,您的项目。
...android {    ...    defaultConfig { ... }    signingConfigs { ... }    buildTypes { ... }    productFlavors {        demo {            applicationId "com.buildsystemexample.app.demo"            versionName "1.0-demo"        }        full {            applicationId "com.buildsystemexample.app.full"            versionName "1.0-full"        }    }}...

注意:要在多APK支持分发您的应用程序到Google Play,分配相同的包名称为所有变体,并给每个变体的不同VERSIONCODE。要分发您的应用程序在谷歌播放单独的应用程序的不同变种,指定不同的包名给每个变量。

针对每个flavor添加其他目录

现在,您创建源文件夹,并添加一个SecondActivity每个味道。要创建演示味源目录结构:

  1. 在项目面板中,展开BuildSystemExample,然后展开应用程序目录。
  2. 右键单击src目录下的应用程序,并选择 New > Directory.。
    创建demo作为新目录的名称,然后单击确定。
    类似地,创建以下目录:
    • app/src/demo/java
    • app/src/demo/res
    • app/src/demo/res/layout
    • app/src/demo/res/values
      由此产生的目录结构如下图1所示。
      Gradle in Android Studio (2) - 配置Gradle_第2张图片

添加一个新的活动,各味

要SecondActivity添加到demoflavors:
1. 创建一个新的Activity。
2. 选择Blank Activity,然后单击Next
3. 输入SecondActivity作为该Activity的名称。
4. 输入com.buildsystemexample.app作为包名,然后单击Finish
5. 右键单击app/src/demo的java目录,并选择New> Package
6. 输入com.buildsystemexample.app作为包名,然后单击OK
7. 拖动SecondActivityapp/src/demo/java下。
8. 接受默认值,然后单击Refactor
要增加对SecondActivity布局和一个字符串资源到demo flavors:

  1. 从 * app/src/main/res/layout*拖动activity_second.xmlapp/src/demo/res/layout
  2. 接受出现的窗口中的默认值,然后单击OK
  3. 复制的strings.xml从应用程序/ src目录/主/ RES到应用程序/ src目录/演示/资源。
  4. 取代的strings.xml具有以下的新副本的内容:
<?xml version="1.0" encoding="utf-8"?><resources>    <string name="hello_world">Demo version only.</string></resources>

现在,通过复制demo的源码来创建full flavors:

  1. 在项目面板中,右键点击下应用程序/ src目录demo目录,然后选择复制。
  2. 在src /目录下用鼠标右键单击下的应用程序/然后选择粘贴。
  3. 在出现的窗口中,输入“满”作为新的名称,然后单击确定。
  4. 具有下列下的src /全速/ RES /值替换strings.xml中的内容:
<?xml version="1.0" encoding="utf-8"?><resources>    <string name="hello_world">This is the full version!</string></resources>

注:从这一点上,可以独立开发SecondActivity内部各的味道。例如,你可以在韵味十足的增加更多的功能到这个活动。

检查设置的product flavors生效,打开Android studio的Build Variants面板,如下图
Gradle in Android Studio (2) - 配置Gradle_第3张图片

图2.构建变体面板。

MainActivity启动一个flavor-specificActivity

由于香味比活度(SecondActivity)有两种口味相同的包名称和活动名称,你可以从主活动,这是通用于所有的口味启动它。要修改的主要活动:

  1. 编辑activity_main.xml并添加一个按钮:
<LinearLayout ...>    ...    <Button        android:id="@+id/button2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/button2"        android:onClick="onButton2Clicked"/></LinearLayout>
  1. 下面的代码添加到MainActivityonButton2Clicked方法:
public void onButton2Clicked(View view) {    Intent intent = new Intent(this, SecondActivity.class);    startActivity(intent);}
  1. 编辑应用程序的Manifest文件引用SecondActivity
<manifest ...>    <application ...>        ...        <activity            android:name="com.buildsystemexample.app.SecondActivity"            android:label="@string/title_activity_second" >        </activity>    </application></manifest>

构建类型

构建类型代表每个应用程序包生成编译包装的版本。默认情况下,提供了debugrelease版本的类型。

...android {    ...    defaultConfig { ... }    signingConfigs { ... }    buildTypes { ... }    productFlavors {...}    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }         debug {            debuggable true        }    }}...

注:虽然只有release类型出现在默认build.gradle文件,但是每个版本都会生成releasedebug版本。

在这个例子中,该product flavorsbuild types创建以下build variants
- demoDebug
- demoRelease
- fullDebug
- fullRelease

要构建这个例子中,点击Android Studio中Build菜单选项,或调用命令行的 assemble任务。

注:* Build > Make Project* 选项编译自上次编译修改过整个项目的所有源文件。Build > Rebuild Project选项重新编译项目中的所有源文件。

每个build variant产生单独的文件夹。

更多相关文章

  1. Android应用程序消息处理机制(Looper、Handler)分析(6)
  2. android 创建文件夹和文件
  3. android 完全退出应用程序
  4. 在AndroidManifest.xml文件中的android:windowSoftInputMode属性
  5. FrameLayout的使用——android开发之xml布局文件
  6. android中将数据写入手机内存和sdcard中的文件
  7. android SQLiteDatabase中版本控制作用详解
  8. Android系统默认Home应用程序(Launcher)的启动过程源代码分析(3)

随机推荐

  1. h5页面引用idangerous.swiper.js 插件兼
  2. 实现静默安装和卸载应用
  3. Android程序员指南(4)
  4. Android兼容库
  5. 12 个 AspectJ 实例,让你一次性掌握 AOP
  6. 第一章 Android是什么?
  7. 在Eclipse下编译Android原生APK方法
  8. H5与android原生的JS交互
  9. Android优化——UI检视利器:Hierarchy Vie
  10. Android基于开源项目的WheelView的时间、