gradle 基本配置介绍

本文介绍了Gradle这一基于Apache Ant和Maven概念的自动化构建工具。它采用Groovy DSL进行项目配置,支持Java、Groovy和Scala等语言。文中详细讲解了Gradle的基本结构及其在Android Studio中的应用。
gradle

https://gradle.org

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。
面向Java应用为主。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。

      Android Studio下载与安装中新建项目成功后会下载Gradle

  • Mac上会默认下载到 /Users/<用户名>/.gradle/wrapper/dists 目录

  • Win平台会默认下载到 C:\Documents and Settings\<用户名>.gradle\wrapper\dists 目录

文件介绍
  • 模块/build.gradle
//声明是Android 程序
apply plugin: 'com.android.application'

//配置了用于 android 构建的所有参数。这是Android DSL的入口。
//默认情况下,只需要配置编译目标,以及build-tools的版本。
//它通过compileSdkVersion和buildtoolsVersion属性来完成。
//提示:你应该只配置使用这个android插件。如果同时配置使用了java插件也会导致构建错误。
android {
    //编译SDK的版本
    compileSdkVersion 19
    //build tools 的版本
    // 构建工具的版本,其中包括了打包工具aapt、dx等等。
    // 这个工具的目录位于..sdk_path/build-tools/XX.XX.XX
    buildToolsVersion "19.1.0"

    //在android元素的内部的defaultConfig元素是定义所有这些配置的地方。
    defaultConfig {
        // 应用的包名
        applicationId "com.example.lidecheng.myapplication"
        minSdkVersion 14
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }

    // java版本
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    buildTypes {
        release {
            // 是否进行混淆
            minifyEnabled false
            // 混淆文件的位置
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }


    // 移除lint检查的error
    lintOptions {
        abortOnError false
    }
}

dependencies {
    //编译libs目录下的所有jar包
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:19.+'
}

// 这个文件是app文件夹下这个Module的gradle配置文件,也可以算是整个项目最主要的gradle配置文件
  • 项目/build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
//整个项目的gradle基础配置文件
//buildscript { ... }配置了驱动构建的代码。
// 声明了使用jcenter 中央库,并且对一个Maven 文件有一个类路径依赖。
// 这个文件是包含 Gradle Android 插件的 1.5.0版本的库
buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        //声明了android gradle plugin的版本
        classpath 'com.android.tools.build:gradle:1.5.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

// 内容主要包含了两个方面:一个是声明仓库的源,这里可以看到是指明的jcenter(), 之前版本则是mavenCentral(), jcenter可以理解成是一个新的中央远程仓库,兼容maven中心仓库,而且性能更优。另一个是声明了android gradle plugin的版本,android studio 1.0正式版必须要求支持gradle plugin 1.0的版本。
  • settings.gradle
//全局的项目配置文件
include ':app'
  • gradle-wrapper.properties
#声明了gradle的目录与下载路径以及当前项目使用的gradle版本,
#这些默认的路径我们一般不会更改的,这个文件里指明的gradle版本不对也是很多导包不成功的原因之一。

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-all.zip
  • local.properties
## This file is automatically generated by Android Studio.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
//通过sdk.dir属性来设置 SDK 的位置,并且所设置的这个SDK要求存在。 
//或者,您也可以设置一个ANDROID_HOME环境变量。这两种方法之间没什么差别
ndk.dir=/Users/lidecheng/Documents/android/android-sdk-macosx-2/ndk-bundle
sdk.dir=/Users/lidecheng/Documents/android/android-sdk-macosx-2
android DSL

–领域特定语言(domain-specific languages,简称DSL)
http://google.github.io/android-gradle-dsl/current/index.html

  • defaultConfig{} 默认配置,是ProductFlavor类型。它共享给其他ProductFlavor使用

  • sourceSets{ } 源文件目录设置,是AndroidSourceSet类型。

  • buildTypes{ } BuildType类型

  • signingConfigs{ } 签名配置,SigningConfig类型

  • productFlavors{ } 产品风格配置,ProductFlavor类型

  • testOptions{ } 测试配置,TestOptions类型

  • aaptOptions{ } aapt配置,AaptOptions类型

  • lintOptions{ } lint配置,LintOptions类型

  • dexOptions{ } dex配置,DexOptions类型

  • compileOptions{ } 编译配置,CompileOptions类型

  • packagingOptions{ } PackagingOptions类型

  • jacoco{ } JacocoExtension类型。 用于设定 jacoco版本

  • splits{ } Splits类型。

    android { … }配置了用于 android 构建的所有参数。这是Android DSL的入口。

默认情况下,只需要配置编译目标,以及build-tools的版本。它通过compileSdkVersion和buildtoolsVersion属性来完成。

重要提示:你应该只配置使用这个android插件。如果同时配置使用了java插件也会导致构建错误。

tongjie@wubo-vm:/tmp/bosch/ConnectivityPhone$ tree -L 4 . ├── APP │   ├── AndroidAuto │   │   ├── app │   │   │   ├── build │   │   │   ├── build.gradle │   │   │   ├── libs │   │   │   ├── proguard-rules.pro │   │   │   └── src │   │   └── appsdk │   │   ├── build │   │   ├── build.gradle │   │   └── src │   ├── CarPlay │   │   ├── app │   │   │   ├── Android.mk │   │   │   ├── build │   │   │   ├── build.gradle │   │   │   ├── proguard-rules.pro │   │   │   └── src │   │   ├── applib │   │   │   ├── Android.mk │   │   │   ├── build │   │   │   ├── build.gradle │   │   │   └── src │   │   └── appsdk │   │   ├── build │   │   ├── build.gradle │   │   └── src │   ├── DeviceManager │   │   ├── app │   │   │   ├── build │   │   │   ├── build.gradle │   │   │   ├── proguard-rules.pro │   │   │   └── src │   │   └── appsdk │   │   ├── build │   │   ├── build.gradle │   │   └── src 这是我的大致结构
最新发布
12-03
根据你提供的项目结构: ``` . └── APP ├── AndroidAuto │ └── app/ │ └── appsdk/ ├── CarPlay │ ├── app/ │ ├── applib/ │ └── appsdk/ └── DeviceManager └── app/ └── appsdk/ ``` 这是一个典型的 **Android 多模块项目结构**,其中包含多个功能模块(如 `AndroidAuto`、`CarPlay`、`DeviceManager`),每个模块下又包含 `app` 和 `appsdk` 子模块。 --- ## ✅ 目标 你想在 **SonarQube 中统一展示所有模块的扫描结果**,而不是每次只能看到一个模块的扫描结果。 --- ## ✅ 推荐方案:使用 `sonar-project.properties` 文件(方法二) 这是目前最推荐的方式,适用于你这种多模块、结构清晰的项目。 --- ## 🛠️ 配置步骤 ### 1. 在项目根目录创建 `sonar-project.properties` 根据你提供的结构,建议在 `APP/` 目录下创建 `sonar-project.properties` 文件: ```properties # 项目基本信息 sonar.projectKey=connectivity-phone-project sonar.projectName=Connectivity Phone Project sonar.projectVersion=1.0 # 模块列表(模块名必须与目录名一致) sonar.modules=AndroidAuto,CarPlay,DeviceManager # AndroidAuto 模块配置 AndroidAuto.sonar.projectName=AndroidAuto Module AndroidAuto.sonar.sources=AndroidAuto/app/src/main/java AndroidAuto.sonar.kotlin.source=AndroidAuto/app/src/main/kotlin AndroidAuto.sonar.sourceEncoding=UTF-8 # CarPlay 模块配置 CarPlay.sonar.projectName=CarPlay Module CarPlay.sonar.sources=CarPlay/app/src/main/java CarPlay.sonar.kotlin.source=CarPlay/app/src/main/kotlin CarPlay.sonar.sourceEncoding=UTF-8 # DeviceManager 模块配置 DeviceManager.sonar.projectName=DeviceManager Module DeviceManager.sonar.sources=DeviceManager/app/src/main/java DeviceManager.sonar.kotlin.source=DeviceManager/app/src/main/kotlin DeviceManager.sonar.sourceEncoding=UTF-8 ``` > **注意**:如果你的模块中包含 `resources`、`XML`、`assets` 等资源文件,也可以添加如下配置: ```properties CarPlay.sonar.android.resourcePaths=CarPlay/app/src/main/res ``` --- ### 2. 安装并运行 `sonar-scanner` #### ✅ 安装 SonarQube Scanner - 下载地址:[https://binaries.sonarsource.com/distribution/sonar-scanner-cli/](https://binaries.sonarsource.com/distribution/sonar-scanner-cli/) - 解压后添加到环境变量,或直接使用完整路径调用。 #### ✅ 执行扫描命令 进入 `APP/` 目录(即 `sonar-project.properties` 所在目录)执行: ```bash sonar-scanner \ -Dsonar.host.url=http://your-sonarqube-server:9000 \ -Dsonar.login=your-sonar-token ``` > 替换 `your-sonarqube-server` 和 `your-sonar-token` 为你自己的 SonarQube 地址和 Token。 --- ### 3. 查看扫描结果 登录 SonarQube 界面,你应该能看到: - 项目名:`Connectivity Phone Project` - 模块列表:`AndroidAuto`、`CarPlay`、`DeviceManager` - 每个模块下展示其源码、代码质量问题、单元测试覆盖率等 --- ## ✅ 进阶配置(可选) ### ✅ 添加 Kotlin 支持(如果使用 Kotlin) 确保每个模块配置了: ```properties AndroidAuto.sonar.kotlin.source=AndroidAuto/app/src/main/kotlin ``` ### ✅ 排除某些文件或目录 例如排除 `R.java`、`BuildConfig.java` 等自动生成的文件: ```properties AndroidAuto.sonar.exclusions=**/R.java,**/BuildConfig.java ``` ### ✅ 添加测试覆盖率(如果有 JaCoCo) ```properties AndroidAuto.sonar.java.binaries=AndroidAuto/app/build/tmp/kotlin-classes AndroidAuto.sonar.java.test.reportPaths=AndroidAuto/app/build/reports/jacoco/testDebugUnitTestReport.xml ``` --- ## ✅ 总结 通过 `sonar-project.properties` 方式: - 你可以 **统一扫描整个项目** - **多模块结构清晰展示** - **不依赖 Gradle 插件** - **适用于 CI/CD 自动化部署** ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值