Android项目的build.gradle文件___Android基础篇

简介: Android项目的build.gradle文件___Android基础篇

一、gradle简介


gradle是基于groovy语言的。


Android Studio是采用Gradle来构建项目的。Gradle是一个非常先进的项目构建工具,使用了一种基于Groovy的领域特定语言(DSL)来声明项目设置,摒弃了XML(如Ant和Maven)的各种烦琐配置。


Note:若只是用它构建普通的工程,可以不去学groovy语言;若想深入的做一下自定义的构建插件,可以考虑学groovy,因为groovy语言是基于java语言的,所以有java基础的同学学习groovy语言不会很难。


二、build.gradle文件


1.Android项目中的gradle文件位置:


在一个android项目中一般会出现至少2个build.gradle文件,一个是project的gradle文件,一个是module的gradle文件。

Note:如果项目目录结构切换到Android模式下则全部gradle在Gradle Scripts下。


2.gradle文件内的常用代码释义:


1)jcenter():

代码托管库,设置后可以在项目中引用jcenter上的开源项目。声明在repositories闭包中。

很多的Android开源项目都会选择将代码托管到jcenter上,声明了此行配置后,就可以在项目中轻松使用jcenter上的任何开源项目。

2)声明gradle插件及版本号

classpath 'com.android.tools.build:gradle:2.3.3'

3)apply plugin: 

代表着应用一个插件。

eg:

//表示一个应用程序模块。
apply plugin: 'com.android.application'
// 表示是一个库模块
apply plugin: 'com.android.library'

Note:

com.android.application 是代表可以直接运行的应用程序;

com.android.library 是只能作为代码依附在别的应用程序模块来运行。所以在引入一些Model为自己的应用程序所用时,build.gradle文件的第一行就是apply plugin:’com.android.library’。


4)android闭包:

compileSdkVersion: 用于指定项目的编译版本。

buildToolsVersion: 用于指定项目的构建工具的版本。


applicationId: 用于指定项目的包名,在创建项目的时候已经指定了包名,当要修改整个项目的包名时可以在此更改。

minSdkVersion: 项目最低的兼容版本。后面的数字(eg:15)表示兼容到API 15

targetSdkVersion:

表示你在该目标版本上已经做过了充分的测试,系统将为你的应用开启一些最新的功能和特性。

假如targetSdkVersion 为23或者更高,那么在Android6.0中运行这个应用时会开启新的功能和特性;若设置成了22,只能说明你的应用程序在Android5.1系统上做过了充分的测试,Android6.0的新功能就不会启用。

versionCode: 项目的版本号。

versionName: 项目版本号的版本名。


Note:

在以前eclipse开发中设置上述代码都是在AndroidManifest.xml文件中设置的。


<uses-sdk

<uses-sdk
    android:minSdkVersion="15"
    android:targetSdkVersion="23" />

而在使用Android Studio开发时,即使在AndroidManifest.xml设置也无作用,运行时只对build.gradle下的设置有效。


5)android闭包中的buildTypes闭包:

一般其中会有两个闭包,一个是debug,一个release;当然也可以有其他闭包。用于安装文件的环境变量的配置。

debug闭包用于生成测试版安装文件的配置,release闭包用于生成正式版安装文件的配置。可以只设置一个release闭包。


minifyEnabled:用于设置是否对项目的代码进行混淆。true代表开启,false代表关闭。

proguardFiles:指定混淆时使用的文件。

proguard-android.txt:在Android SDK 目录下的,里面是所有项目通用的混淆规则。

proguard-rules.pro:是在当前项目根目录下的,里面编写当前项目特有的混淆规则。


6)dependencies闭包:

可以在其中指定当前项目所有的依赖关系。

一般Android Studio 项目中一共有三种依赖方式:本地依赖、库依赖和远程依赖。

本地依赖可以对本地的Jar包或目录添加依赖关系

库依赖可以对项目中的库模块添加依赖关系。

远程依赖则可以对jcenter库上的开源项目添加依赖关系。


库依赖的基本格式为 compile project,后面加上依赖库的库名称。

远程依赖的基本格式为 compile ,后面加上远程依赖库的库名称;Gradle在构建项目的时候会检查一下本地仓库是否已经缓存了指定内容,若没有会自动联网下载,然后再添加到项目的构建路径中去。

远程依赖时每次都要检查是否有这个缓存,所以使编译变的很慢。可以设置成离线的Gradle模式。


eg:

   //本地依赖声明
    compile fileTree(include: ['*.jar'], dir: 'libs')
   //库依赖声明
    compile project(':library_pulltorefresh')
    //远程依赖声明
    compile 'com.android.support:appcompat-v7:25.3.1'

Note:  

Android Studio 3.0以上的开发工具版本,api 替代了 compile。  

eg:

   //本地依赖声明
    api fileTree(include: ['*.jar'], dir: 'libs')
   //库依赖声明
    api project(':library_pulltorefresh')
    //远程依赖声明
    api 'com.android.support:appcompat-v7:25.3.1'

3.示例代码:

(注:下面的代码只是部分的示例代码,要根据项目开发实际情况选择性地使用代码)  

project的build.gradle文件:  

eg:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {//闭包
        jcenter()//代码托管库,设置后可以在项目中引用jcenter上的开源项目
    }
    dependencies {
        //声明gradle插件及版本号
        classpath 'com.android.tools.build:gradle:2.3.3'
        //butterknife的新版插件必须在此处作配置
        classpath 'com.jakewharton:butterknife-gradle-plugin:8.8.1'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

module的build.gradle文件:  

eg:

apply plugin: 'com.android.application'//默认的应用程序模块(插件)
apply plugin: 'com.jakewharton.butterknife'//butterkinfe插件
android {
    compileSdkVersion cfg.compileVersion   //编译版本
    buildToolsVersion cfg.buildToolsVersion  //构建工具版本
    aaptOptions.cruncherEnabled = false
    aaptOptions.useNewCruncher = false
    defaultConfig {
        applicationId "com.zrmx.athenaapp"  //包名
        minSdkVersion cfg.minSdk   //最低兼容版本
        targetSdkVersion cfg.targetSdk  //(目标版本:充分测试过版本(建议版本))大于22需要考虑存储权限问题,由于默认权限是关闭的,启动时下载广告图片缓存不了
        versionCode project.VERSION_CODE as int    //版本号
        versionName project.VERSION_NAME   //版本名称
        jackOptions {
            enabled true
        }
    }
    lintOptions {//设置编译的lint开关,程序在buid的时候,会执行lint检查,有任何的错误或者警告提示,都会终止构建
        abortOnError false
    }
    buildTypes {
        release {
            minifyEnabled false   //是否混淆(true为混淆)
            //Android SDK通用的混淆规则; 后面的为开发者编写的项目混淆规则
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            buildConfigField("int", "SERVICE_TYPE", "4")//线上环境
            signingConfig signingConfigs.release
        }
    }
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def outputFile = output.outputFile
            if (outputFile != null && outputFile.name.endsWith('.apk') && !outputFile.name.contains("debug")) {
                output.outputFile = new File(APK_OUT_PATH + "/${variant.buildType.name}", "${releaseTime()}_v${defaultConfig.versionName}_c${defaultConfig.versionCode}.apk")
            }
        }
    }
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
dependencies {
    //本地依赖声明
    compile fileTree(include: ['*.jar'], dir: 'libs')
   //库依赖声明
    compile project(':library_pulltorefresh')
    //远程依赖声明
    compile 'com.android.support:appcompat-v7:25.3.1'
    testCompile 'junit:junit:4.12'
    compile 'com.squareup.okhttp3:okhttp:3.3.1'
    compile 'com.google.code.gson:gson:2.5'
    compile files('libs/universal-image-loader-1.9.2-SNAPSHOT-with-sources.jar')
    compile 'org.greenrobot:eventbus:3.0.0'
    compile 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
    //android 6.0 新增加了运行时的动态添加权限
    compile 'com.lovedise:permissiongen:0.0.6'
}

三、Gradle 解析大全


具体Gradle 原理及相关语法详解请参考文章:

《Android:Gradle 解析》

目录
相关文章
|
2天前
|
移动开发 安全 Java
Android历史版本与APK文件结构
通过以上内容,您可以全面了解Android的历史版本及其主要特性,同时掌握APK文件的结构和各部分的作用。这些知识对于理解Android应用的开发和发布过程非常重要,也有助于在实际开发中进行高效的应用管理和优化。希望这些内容对您的学习和工作有所帮助。
113 83
|
15天前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
115 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
12天前
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
36 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
28天前
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
78 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
|
1月前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
36 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
3月前
|
前端开发 JavaScript 测试技术
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
在 Android 开发中,选择合适的架构模式对于构建中大型项目至关重要。常见的架构模式有 MVVM、MVP、MVI、Clean Architecture 和 Flux/Redux。每种模式都有其优缺点和适用场景,例如 MVVM 适用于复杂 UI 状态和频繁更新,而 Clean Architecture 适合大型项目和多平台开发。选择合适的架构应考虑项目需求、团队熟悉度和可维护性。
86 6
|
Java 开发工具 Android开发
Cocos Creator 2.4.6 Android Gradle 版本升级为 6.5.1(插件4.1.0)
Cocos Creator 2.4.6 Android Gradle 版本升级为 6.5.1(插件4.1.0)
346 1
|
Android开发
Android Studio中修改gradle插件版本和Gradle版本
Android项目中,我们一般要设置gradle插件版本和gradle版本。 项目根目录下的build.gradle文件中,通过classpath可以指定gradle插件的版本。
|
Android开发
【错误记录】Android Studio 中 build.gradle 配置 buildFeatures prefab 错误处理 ( AS 4.1 以上开发环境 | Gradle及插件版本 )
【错误记录】Android Studio 中 build.gradle 配置 buildFeatures prefab 错误处理 ( AS 4.1 以上开发环境 | Gradle及插件版本 )
1790 0
【错误记录】Android Studio 中 build.gradle 配置 buildFeatures prefab 错误处理 ( AS 4.1 以上开发环境 | Gradle及插件版本 )
|
Java Android开发
【AOP 面向切面编程】Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 )(一)
【AOP 面向切面编程】Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 )(一)
560 0
【AOP 面向切面编程】Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 )(一)

热门文章

最新文章

  • 1
    如何修复 Android 和 Windows 不支持视频编解码器的问题?
  • 2
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
  • 3
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 4
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
  • 5
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 6
    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
  • 7
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 8
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 9
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 10
    android之ListView和SimpleAdapter的组合使用
  • 推荐镜像

    更多