Android 根目录下和应用目录下的build.gradle的详解,以及groovy语法的讲解

简介: Android 根目录下和应用目录下的build.gradle的详解,以及groovy语法的讲解

前言:

Gradle的作用:

  1. 打apk包
  2. 打插件包
  3. 自动化构建
  4. 多渠道打包
  5. 自动化签名
  6. 后台java打包
  7. 生成文件
  8. 使用的是groovy语法,shell脚本,能够完成数据处理,文件操作
  9. groovy和java是一家,JDK支持两种语言java和groovy,在groovy中直接调用java包
  10. groovy和java进行了一个动态的补充,groovy是一个动态的语言,java是一个静态的编程语言,java处理不了的工作,可以用groovy来做

Gradle的特性

一、根目录下的build.gradle,注解给出了解释说明

// Top-level build file where you can add configuration options common to all sub-projects/modules.
//根目录的构建脚本
buildscript {
    //指定了仓库
    repositories {
        google()
        jcenter()
    }
    dependencies {
        //gradle 插件版本
        classpath "com.android.tools.build:gradle:4.1.3"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
//所有的仓库依赖地址
allprojects {
    //项目本身需要的依赖,配置所有的Module公共依赖
    repositories {
        google()
        jcenter()
    }
}
//任务,清除所有build文件 执行Build -> Clean Project 触发这个指令
task clean(type: Delete) {
    delete rootProject.buildDir
}

二、应用目录下的build.gradle,以及groovy语法的使用

plugins {
    //表示这是一个应用程序模块,com.android.library表示这是一个库模块
    id 'com.android.application'
}
apply from: 'config.gradle'
apply from: '../config.gradle'
//自定义插件,groovy,java也能做插件,一般做插件用groovy
//1.脚本插件
//对象插件
//2.直接写在gradle的脚本文件中
//3.半独立插件,在buildSrc ,只能在本项目中使用
//4.独立插件,在独立的项目中
android {
    //编译SDK版本
    compileSdkVersion 30
    //编译工具版本
    buildToolsVersion "30.0.3"
    defaultConfig {
        //appId
        applicationId "com.example.exercisetest"
        //最小支持SDK版本
        minSdkVersion 23
        //目标版本
        targetSdkVersion 30
        //版本号
        versionCode 1
        //版本名称
        versionName "1.0"
        //测试单元
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    //构建类型
    buildTypes {
        //生产环境
        release {
            //表示是否对项目的代码进行混淆,true表示混淆 false表示不混淆
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            println getUrlPath('release')
        }
        //测试环境
        debug {
            println getUrlPath('debug')
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
//用groovy语法 获取配置文件中的配置信息(文件操作)
def getUrlPath(String str) {
    def url
    Properties properties = new Properties()
    def proFile = file('src\\main\\filter\\' + str + '\\config.properties')
    if (proFile.canRead()) {
        properties.load(new FileInputStream(proFile))
        if (properties != null) {
            url = properties['SERVER2']
        }
    }
    url
}
//依赖相关信息
dependencies {
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'com.google.android.material:material:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    implementation 'com.umeng.umsdk:common:9.4.7'// 必选
    implementation 'com.umeng.umsdk:asms:1.4.0'// 必选
}
//groovy语法 与java语法类似,java语法严谨,groovy是糖果语法
//1.字符串 2.list 集合 3.map集合 4.方法 对象 5.任务task  6.文件操作
task stringTest {
    def str1 = "abcde"
    def str2 = "frr"
    println "${str1}-----${str2}"
}
task list {
    def list = [1, 2, 3, 4, 5]
    println list[0]
    //方式1
//    for(int i in list){
//        println list[i]
//    }
//    for(int i=0;i<list.size();i++){
//        println(list[i])
//    }
    //奇特方式2
//    for (int i in 0..4) {
//        println list[i]
//    }
    //奇特方式3 it 就表示this 这里就是每一个元素
    list.each {
        println it
    }
}
task map {
    def map = ['name': 'andy', 'age': 18]
    println map['name']
    map.each {
        println "Key:${it.key},vlaue:${it.value}"
    }
}
task method {
    def a = methodA(3, 5)
    println a
}
def methodA(int a, int b) {
    //groovy语法,默认将函数的非空(空白,注释,标点定位为空)最后一行作为结果进行返回
    a + b
}
task javaBeanTest {
    Student student = new Student()
    student.name = "groovy"
    student.age = 18
    student.setName("lily")
    student.setAge(28)
    println "name:${student.name}"
    println "nianling:${student.age}"
}
class Student {
    private String name
    private int age
    private String getName() {
        return name
    }
    private void setName(String name) {
        this.name = name
    }
    private int getAge() {
        return age
    }
    private void setAge(int age) {
        this.age = age
    }
}
//闭包类似于Java的interface,类似于前端的callback,钩子
//闭包只针对特定区域有效,{}
task closure {
    mEach {
        print it
    }
    println ""
    mEachWithParams { m, n ->//m,n ->将闭包的参数和主体区分离开来
        println "${m} is ${n}"
    }
}
def mEach(Closure<?> closure) {
    for (int i in 1..5) {
        closure(i)
    }
}
def mEachWithParams(Closure<?> closure) {
    def map = ['name': 'groovy', 'age': 10]
    map.each {
        closure(it.key, it.value)
    }
}
//app模块下的build.gradle文件中定义对象插件
//对象插件 直接写在gradle的脚本文件中
class CustomGradlePlugin implements Plugin<Project> {
    @Override
    void apply(Project target) {
        target.task("showCustomPlugin") {
            doLast {
                println("this is CustomGradlePlugin")
            }
        }
    }
}

当编译此项目后,输出对应的语句

> Configure project :app
"www.baidu.com"
"www.qq.com"
abcde-----frr
1
1
2
3
4
5
andy
Key:name,vlaue:andy
Key:age,vlaue:18
8
name:lily
nianling:28
12345
name is groovy
age is 10


目录
相关文章
|
2月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
258 4
|
1月前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
70 14
|
1月前
|
Java Linux 数据库
探索安卓开发:打造你的第一款应用
在数字时代的浪潮中,每个人都有机会成为创意的实现者。本文将带你走进安卓开发的奇妙世界,通过浅显易懂的语言和实际代码示例,引导你从零开始构建自己的第一款安卓应用。无论你是编程新手还是希望拓展技术的开发者,这篇文章都将为你打开一扇门,让你的创意和技术一起飞扬。
|
1月前
|
搜索推荐 前端开发 测试技术
打造个性化安卓应用:从设计到开发的全面指南
在这个数字时代,拥有一个定制的移动应用不仅是一种趋势,更是个人或企业品牌的重要延伸。本文将引导你通过一系列简单易懂的步骤,从构思你的应用理念开始,直至实现一个功能齐全的安卓应用。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你提供必要的工具和知识,帮助你将创意转化为现实。
|
1月前
|
Java Android开发 开发者
探索安卓开发:构建你的第一个“Hello World”应用
在安卓开发的浩瀚海洋中,每个新手都渴望扬帆起航。本文将作为你的指南针,引领你通过创建一个简单的“Hello World”应用,迈出安卓开发的第一步。我们将一起搭建开发环境、了解基本概念,并编写第一行代码。就像印度圣雄甘地所说:“你必须成为你希望在世界上看到的改变。”让我们一起开始这段旅程,成为我们想要见到的开发者吧!
45 0
|
2月前
|
JSON Java Android开发
探索安卓开发之旅:打造你的第一个天气应用
【10月更文挑战第30天】在这个数字时代,掌握移动应用开发技能无疑是进入IT行业的敲门砖。本文将引导你开启安卓开发的奇妙之旅,通过构建一个简易的天气应用来实践你的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你宝贵的学习资源。我们将一步步地深入到安卓开发的世界中,从搭建开发环境到实现核心功能,每个环节都充满了发现和创造的乐趣。让我们开始吧,一起在代码的海洋中航行!
|
2月前
|
存储 搜索推荐 Java
打造个性化安卓应用:从设计到实现
【10月更文挑战第30天】在数字化时代,拥有一个个性化的安卓应用不仅能够提升用户体验,还能加强品牌识别度。本文将引导您了解如何从零开始设计和实现一个安卓应用,涵盖用户界面设计、功能开发和性能优化等关键环节。我们将以一个简单的记事本应用为例,展示如何通过Android Studio工具和Java语言实现基本功能,同时确保应用流畅运行。无论您是初学者还是希望提升现有技能的开发者,这篇文章都将为您提供宝贵的见解和实用的技巧。
|
人工智能 移动开发 Java
Android Studio插件版本与Gradle 版本对应关系
Android Studio插件版本与Gradle 版本对应关系
2669 0
Android Studio插件版本与Gradle 版本对应关系
|
存储 Java Android开发
Android 开发 - 充分利用Gradle
Android 开发 - 充分利用Gradle
189 2
|
3月前
|
Android开发
Android基于gradle task检查各个module之间资源文件冲突情况
Android基于gradle task检查各个module之间资源文件冲突情况
Android基于gradle task检查各个module之间资源文件冲突情况