Android Gradle 之 build.gradle 文件解读(项目级 build.gradle 文件解读、模块级 build.gradle 文件解读)

build.gradle 文件概述

  1. build.gradle 文件是一个 Gradle 的配置文件,也是 Android 项目的核心组成部分

  2. build.gradle 文件用于指定项目的构建逻辑、依赖关系、编译选项以及其他构建相关的设置

  3. 在 Android 项目中,build.gradle 文件通常位于项目的根目录下(项目级 build.gradle 文件)和每个模块的目录下(模块级 build.gradle 文件)

  4. build.gradle 文件使用 Groovy 编写


项目级 build.gradle 文件解读

plugins {
    id 'com.android.application' version '7.2.2' apply false
    id 'com.android.library' version '7.2.2' apply false
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
1、plugins 块
plugins {
    id 'com.android.application' version '7.2.2' apply false
    id 'com.android.library' version '7.2.2' apply false
}
  • plugins 块用于声明项目将使用的 Gradle 插件以扩展 Gradle 的功能,这些插件可以添加新的任务、类型、DSL 元素等
  1. id 'com.android.application' version '7.2.2' apply false:声明了 Android 应用程序插件的 ID 和版本,设置 apply false 表示并没有立即应用到项目中,这种做法通常用于多模块项目中的根 build.gradle 文件,以便在子模块中根据需要应用该插件

  2. id 'com.android.library' version '7.2.2' apply false:声明了 Android 库插件,没有立即应用到项目中,库插件用于构建可以被其他 Android 应用或库依赖的 Android 库

2、task clean 块
task clean(type: Delete) {
    delete rootProject.buildDir
}
  • task clean 块定义了一个名为 clean 的任务,它使用 Delete 类型,这个任务的目的是删除项目的构建目录,确保每次构建都是从干净的状态开始的

模块级 build.gradle 文件解读

plugins {
    id 'com.android.application'
}

android {
    compileSdk 32

    defaultConfig {
        applicationId "com.my.networktool"
        minSdk 21
        targetSdk 32
        versionCode 100
        versionName "1.0.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

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

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    android.applicationVariants.all { variant ->
        variant.outputs.all {
            outputFileName = "NetworkTool_${versionName}.apk"
        }
    }
}

dependencies {

    implementation 'androidx.appcompat:appcompat:1.3.0'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
1、plugins 块
// plugins 块用于应用 Gradle 插件
plugins {
    
    // 应用 Android 应用插件,它用于构建 Android 应用
    id 'com.android.application'
}
2、Android 块
// android 块包含了所有与 Android 构建相关的配置
android {
    
    // 指定编译 SDK 的版本,这是用于编译应用的 Android API 级别
    compileSdk 32

    defaultConfig {

        // 应用的唯一标识符,用于区分应用
        applicationId "com.my.networktool"
        
        // 应用支持的最低 Android API 级别
        minSdk 21
        
        // 应用支持的最高 Android API 级别
        targetSdk 32
        
        // 应用版本
        versionCode 100
        
        // 应用版本名称
        versionName "1.0.0"

        // 指定用于运行测试的测试运行器
        // androidx.test.runner.AndroidJUnitRunner 是 AndroidX 测试库提供的 JUnit 测试运行器
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    // buildTypes 这个部分用于定义构建类型
    buildTypes {
        
        // release 这个部分用于定义 release 类型
        release {
            
            // 表示不对代码进行混淆(在发布版本中通常会启用混淆以减少 APK 大小和增加代码难度)
            minifyEnabled false
            
            // 指定 ProGuard 混淆文件的路径
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    // compileOptions 这个部分指定了 Java 编译器的兼容性选项
    compileOptions {
        
        // 源代码是用 Java8 编写,编译器按照 Java8 的语法和特性来编译源代码
        sourceCompatibility JavaVersion.VERSION_1_8
        
        // 生成的字节码与 Java8 兼容,即生成的 .class 文件可以在 Java8 或更高版本的 JVM 上运行
        targetCompatibility JavaVersion.VERSION_1_8
    }

    // 遍历所有的应用变体
    android.applicationVariants.all { variant ->
        
        // variant 是当前遍历到的应用变体对象
        // variant.outputs.all 遍历当前变体所有的输出文件
        variant.outputs.all {
            
            // 设置输出文件的名称
            // ${versionName} 是从项目的 build.gradle 文件中获取的 versionName 属性值,它是在 android 块的 defaultConfig 部分中定义的
            outputFileName = "NetworkTool_${versionName}.apk"
        }
    }
}
3、dependencies 块
dependencies {

    // 引入 AndroidX AppCompat 库
    // AndroidX AppCompat 库提供了向后兼容的 UI 组件,使得开发者能够在旧版本的 Android 系统上使用新的 UI 特性
    implementation 'androidx.appcompat:appcompat:1.3.0'
    
    // 引入 Google 的 Material Design 组件库
    // Material Design 组件库提供了一系列遵循 Material Design 规范的 UI 组件,例如,按钮、输入框、导航栏等
    implementation 'com.google.android.material:material:1.4.0'
    
    // 引入 ConstraintLayout
    // ConstraintLayout 是一个灵活的布局管理器
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    
    // 引入 JUnit 测试框架
    // JUnit 测试框架是一个广泛使用的 Java 测试框架,用于编写和运行项目的单元测试
    testImplementation 'junit:junit:4.13.2'
    
    // 引入 AndroidX Test Extension for JUnit
    // AndroidX Test Extension for JUnit 为 JUnit 测试在 Android 设备或模拟器上运行提供支持
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    
    // 引入 Espresso 测试框架
    // Espresso 是一个针对 Android 应用程序的用户界面的测试框架
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

代码混淆(补充)

1、基本介绍
  1. 代码混淆是一种技术,通过对源代码或机器代码进行修改,使其变得难以理解、阅读和逆向工程

  2. 代码混淆后,即使有人获得了软件的二进制版本,也难以理解其工作原理或提取其中的算法、逻辑等有价值的信息

  3. 代码混淆的目的通常是为了保护软件的知识产权,防止未经授权的复制、修改或分析

  4. 虽然代码混淆可以增加逆向工程的难度,但它并不能完全防止逆向工程,过度混淆的代码可能会导致性能下降或产生新的错误

2、实现方式
  1. 变量和函数名重命名:将原本有意义的变量名和函数名替换为无意义的字符序列

  2. 控制流混淆:通过添加不必要的跳转、循环和条件语句,改变代码的正常执行流程

  3. 数据混淆:对程序中使用的数据进行加密或编码

  4. 代码插入:在代码中插入无用的或误导性的代码段

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值