Android知识要点整理(16)----Gradle 之项目结构

本文详细介绍了Android项目中Gradle的使用,包括Project和Tasks的概念、构建生命周期的三个阶段、构建配置文件的设置、Gradle项目结构解析、Gradle Wrapper的工作原理以及从Eclipse项目移植到Android Studio的两种方法。通过这些知识,开发者能更好地理解和管理Android的Gradle构建系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android app 由Gradle负责构建。Gradle构建系统定义了许多概念。

1.Project和Tasks

这个Gradle中最重要的两个概念。每次构建(build)至少由一个project构成,一个project 由一到多个task构成。项目结构中的每个build.gradle文件代表一个project,在这编译脚本文件中可以定义一系列的task;task 本质上又是由一组被顺序执行的Action`对象构成,Action其实是一段代码块,类似于Java中的方法

2.构建生命周期

每次构建的执行本质上执行一系列的Task。某些Task可能依赖其他Task。哪些没有依赖的Task总会被最先执行,而且每个Task只会被执行一遍。每次构建的依赖关系是在构建的配置阶段确定的。每次构建分为3个阶段:

  • Initialization: 初始化阶段 ;这是创建Project阶段,构建工具根据每个build.gradle文件创建出一个Project实例。
  • Configuration:配置阶段;这个阶段,通过执行构建脚本来为每个project创建并配置Task。
  • Execution:执行阶段;这是Task真正被执行的阶段,Gradle会根据依赖关系决定哪些Task需要被执行,以及执行的先后顺序。

3.构建配置文件

为了能够在Android项目中使用Gradle构建项目,我们需要在顶层目录新建build.gradle配置文件,用来配置构建脚本相关属性。基本内容如下:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
    }
}

除此之外,顶层的配置文件中还可以用来配置android项目各个模块的通用属性。配置内容放置在allprojects代码块中。如下所示:

allprojects {
    repositories {
        jcenter()
    }
    //其他配置
}

同时,每个模块有自己的单独的配置文件,内容结构大致如下:

//表示该模块为应用模块,类似的有library模块
apply plugin: 'com.android.application'

//针对android 属性的一些配置
android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "com.example.android.animationsdemo"
        minSdkVersion 14
        targetSdkVersion 23
    }

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

//模块的依赖关系
dependencies {
    compile 'com.android.support:support-v4:24.0.0-alpha2'
    compile 'com.android.support:support-v13:24.0.0-alpha2'
    compile 'com.android.support:recyclerview-v7:24.0.0-alpha2'
    compile project(path: ':backend', configuration: 'android-endpoints')
}

4.Gradle项目结构

针对Android的单模块gradle目录结构如下:

MyApp
├── build.gradle
├── settings.gradle
└── app
    ├── build.gradle
    ├── build
    ├── libs
    └── src
        └── main
            ├── java
            │ └── com.package.myapp
            └── res
                ├── drawable
                ├── layout
                └── etc.

模块关键目录的解释如下:

目录内容
/src/main/javaapp模块的源代码
/src/main/res相关资源 (如drawables, layouts, strings等等)
/libs第三方代码库(.jar 或者 .aar)
/buildThe output of the build process

5.认知Gradle Wrapper

Android Studio中默认会使用 Gradle Wrapper 而不是直接使用Gradle。命令也是使用gradlew而不是gradle。这是因为gradle针对特定的开发环境的构建脚本,新的gradle可能不能兼容旧版的构建环境。为了解决这个问题,使用Gradle Wrapper 来间接使用 gradle。相当于在外边包裹了一个中间层。对开发者来说,直接使用Gradlew 即可,不需要关心 gradle的版本变化。Gradle Wrapper 会负责下载合适的的gradle版本来构建项目。
正如上面说的,使用Android studio创建Android项目时,系统会默认使用Gradle Wrapper。但是如果项目是从Eclipse移植而来,那么我们需要手动添加对Gradle Wrapper的支持。具体步骤如下:

  • 安装Gradle工具,并且把gradle命令添加到环境变量。
  • 在项目的顶层目录中的build.gradle文件中添加如下代码(新版gradle可以省略这一步,因为wrapper task 默认包含在项目中):
task wrapper(type: Wrapper) {
    gradleVersion = '2.4'
}
  • 然后执行如下命令:
gradle wrapper --gradle-version 2.4

这样之后,项目中会生成如下结构的文件目录:

myapp/
    ├── gradlew //命令脚本
    ├── gradlew.bat //命令脚本
    └── gradle/wrapper/ //jar文件
            ├── gradle-wrapper.jar
            └── gradle-wrapper.properties //属性文件

其中属性文件具体内容如下:

#Mon Dec 28 10:00:20 PST 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip

6.移植Eclipse项目到Android Studio

Android 提供了自动导入Eclipse项目的方法。但是我们只讲如何手工将Eclipse项目变为Android Studio可以直接使用的项目。
一种方法是保留原有的目录结构。下面是具体步骤
1. 在项目根目录中创建build.gradle配置文件。最基本的内容如下:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
    }
}

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"
}

2 为了保持原有目录结构,我们需要修改source set。在build.gradle 文件末尾的android 代码块中添加如下内容:

android {

    //...

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
        androidTest.setRoot('tests')
    }
}

3.同时,添加依赖关系,如下:

 dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

一种是转换为Android Studio 默认的目录结构。具体步骤如下:
1.手动建立相应的目录。下面的表格是新旧目录的映射关系:

旧目录新目录
src/app/src/main/java
res/app/src/main/res
assets/app/src/main/assets
AndroidManifest.xmlapp/src/main/AndroidManifest.xml

2.在项目根目录中创建settings.gralde文件,这个文件只能写一行内容,用于告诉构建系统在构建时将app模块包含进去:

include ':app'  

3.在项目根目录中创建build.gradle,用于配置项目级的属性。内容如下:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
    }
}

4.在app模块目录创建build.gradle,用于配置模块级的属性。内容如下:

apply plugin: 'com.android.application'
android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

这样,Eclipse项目就成功地转为Android Studio项目。仔细观察会发现,第一种方法只用到了一个build.gradle文件,它将第二种方法中的2个build.gradle文件合为一体。第一方法更为简单,但是第二种方法更加符合趋势,以后扩展起来也更加方便。

以上就是Gradle android 项目结构的相关知识要点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值