Android Gradle 之 build.gradle 文件解读(项目级 build.gradle 文件解读 ...

打印 上一主题 下一主题

主题 967|帖子 967|积分 2901

build.gradle 文件概述


  • build.gradle 文件是一个 Gradle 的配置文件,也是 Android 项目标核心组成部分
  • build.gradle 文件用于指定项目标构建逻辑、依靠关系、编译选项以及其他构建相关的设置
  • 在 Android 项目中,build.gradle 文件通常位于项目标根目录下(项目级 build.gradle 文件)和每个模块的目录下(模块级 build.gradle 文件)
  • build.gradle 文件使用 Groovy 编写

项目级 build.gradle 文件解读

  1. plugins {
  2.     id 'com.android.application' version '7.2.2' apply false
  3.     id 'com.android.library' version '7.2.2' apply false
  4. }
  5. task clean(type: Delete) {
  6.     delete rootProject.buildDir
  7. }
复制代码
1、plugins 块

  1. plugins {
  2.     id 'com.android.application' version '7.2.2' apply false
  3.     id 'com.android.library' version '7.2.2' apply false
  4. }
复制代码


  • plugins 块用于声明项目将使用的 Gradle 插件以扩展 Gradle 的功能,这些插件可以添加新的任务、类型、DSL 元素等

  • id 'com.android.application' version '7.2.2' apply false:声明了 Android 应用程序插件的 ID 和版本,设置 apply false 表示并没有立刻应用到项目中,这种做法通常用于多模块项目中的根 build.gradle 文件,以便在子模块中根据必要应用该插件
  • id 'com.android.library' version '7.2.2' apply false:声明了 Android 库插件,没有立刻应用到项目中,库插件用于构建可以被其他 Android 应用或库依靠的 Android 库
2、task clean 块

  1. task clean(type: Delete) {
  2.     delete rootProject.buildDir
  3. }
复制代码


  • task clean 块界说了一个名为 clean 的任务,它使用 Delete 类型,这个任务的目标是删除项目标构建目录,确保每次构建都是从干净的状态开始的

模块级 build.gradle 文件解读

  1. plugins {
  2.     id 'com.android.application'
  3. }
  4. android {
  5.     compileSdk 32
  6.     defaultConfig {
  7.         applicationId "com.my.networktool"
  8.         minSdk 21
  9.         targetSdk 32
  10.         versionCode 100
  11.         versionName "1.0.0"
  12.         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
  13.     }
  14.     buildTypes {
  15.         release {
  16.             minifyEnabled false
  17.             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  18.         }
  19.     }
  20.     compileOptions {
  21.         sourceCompatibility JavaVersion.VERSION_1_8
  22.         targetCompatibility JavaVersion.VERSION_1_8
  23.     }
  24.     android.applicationVariants.all { variant ->
  25.         variant.outputs.all {
  26.             outputFileName = "NetworkTool_${versionName}.apk"
  27.         }
  28.     }
  29. }
  30. dependencies {
  31.     implementation 'androidx.appcompat:appcompat:1.3.0'
  32.     implementation 'com.google.android.material:material:1.4.0'
  33.     implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
  34.     testImplementation 'junit:junit:4.13.2'
  35.     androidTestImplementation 'androidx.test.ext:junit:1.1.5'
  36.     androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
  37. }
复制代码
1、plugins 块

  1. // plugins 块用于应用 Gradle 插件
  2. plugins {
  3.    
  4.     // 应用 Android 应用插件,它用于构建 Android 应用
  5.     id 'com.android.application'
  6. }
复制代码
2、Android 块

  1. // android 块包含了所有与 Android 构建相关的配置
  2. android {
  3.    
  4.     // 指定编译 SDK 的版本,这是用于编译应用的 Android API 级别
  5.     compileSdk 32
  6.     defaultConfig {
  7.         // 应用的唯一标识符,用于区分应用
  8.         applicationId "com.my.networktool"
  9.         
  10.         // 应用支持的最低 Android API 级别
  11.         minSdk 21
  12.         
  13.         // 应用支持的最高 Android API 级别
  14.         targetSdk 32
  15.         
  16.         // 应用版本
  17.         versionCode 100
  18.         
  19.         // 应用版本名称
  20.         versionName "1.0.0"
  21.         // 指定用于运行测试的测试运行器
  22.         // androidx.test.runner.AndroidJUnitRunner 是 AndroidX 测试库提供的 JUnit 测试运行器
  23.         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
  24.     }
  25.     // buildTypes 这个部分用于定义构建类型
  26.     buildTypes {
  27.         
  28.         // release 这个部分用于定义 release 类型
  29.         release {
  30.             
  31.             // 表示不对代码进行混淆(在发布版本中通常会启用混淆以减少 APK 大小和增加代码难度)
  32.             minifyEnabled false
  33.             
  34.             // 指定 ProGuard 混淆文件的路径
  35.             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  36.         }
  37.     }
  38.     // compileOptions 这个部分指定了 Java 编译器的兼容性选项
  39.     compileOptions {
  40.         
  41.         // 源代码是用 Java8 编写,编译器按照 Java8 的语法和特性来编译源代码
  42.         sourceCompatibility JavaVersion.VERSION_1_8
  43.         
  44.         // 生成的字节码与 Java8 兼容,即生成的 .class 文件可以在 Java8 或更高版本的 JVM 上运行
  45.         targetCompatibility JavaVersion.VERSION_1_8
  46.     }
  47.     // 遍历所有的应用变体
  48.     android.applicationVariants.all { variant ->
  49.         
  50.         // variant 是当前遍历到的应用变体对象
  51.         // variant.outputs.all 遍历当前变体所有的输出文件
  52.         variant.outputs.all {
  53.             
  54.             // 设置输出文件的名称
  55.             // ${versionName} 是从项目的 build.gradle 文件中获取的 versionName 属性值,它是在 android 块的 defaultConfig 部分中定义的
  56.             outputFileName = "NetworkTool_${versionName}.apk"
  57.         }
  58.     }
  59. }
复制代码
3、dependencies 块

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

代码肴杂(补充)

1、基本先容


  • 代码肴杂是一种技术,通过对源代码或呆板代码进行修改,使其变得难以理解、阅读和逆向工程
  • 代码肴杂后,即使有人获得了软件的二进制版本,也难以理解其工作原理或提取此中的算法、逻辑等有价值的信息
  • 代码肴杂的目标通常是为了掩护软件的知识产权,防止未经授权的复制、修改或分析
  • 虽然代码肴杂可以增长逆向工程的难度,但它并不能完全防止逆向工程,过度肴杂的代码大概会导致性能降落或产生新的错误
2、实现方式


  • 变量和函数名重命名:将本来有意义的变量名和函数名更换为无意义的字符序列
  • 控制流肴杂:通过添加不必要的跳转、循环和条件语句,改变代码的正常执行流程
  • 数据肴杂:对程序中使用的数据进行加密或编码
  • 代码插入:在代码中插入无用的或误导性的代码段

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

水军大提督

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表