• Android Studio Gradle相关


    一、区分gradle version与gradle plugin version

    参考博客

    gradle是一个构建工具,理论上来说,它可以用来构建任何项目(如java项目,ios项目)。它可以与任何类型的IDE集成(如ecllipse,android studio),方便的帮我们将项目代码进行构建打包,是一个脚本工具。

     配置gradle version的地方在项目目录下的gradle-wrapper.properties或者在File->Project Structure->project menu里的gradle version

     

     Android Gradle Plugin(简称AGP)是android基于gradle开发,整合了几项专门用于构建Android应用的功能。而该工具命名为:com.android.tools.build:gradle:xxxx 。

    配置android gradle version的地方在根build.gradle里或者在File->Project Structure->project menu里的android gradle plugin version

    1. buildscript {
    2. ....
    3. dependencies {
    4. classpath 'com.android.tools.build:gradle:3.1.3'
    5. }
    6. ....
    7. }

    所以,到这里大家理解两者关系了。两者是不同团队开发的,所以版本不一致。但是因为anroid gradle是依赖于gradle开发的,所以两个之间的对应关系比较重要。

    1. //这个地方是android自己定制化Gradle的插件版本
    2. classpath 'com.android.tools.build:gradle:3.6.4'
    3. //gradle/wrapper/gradle-wrapper.properties 这个是系统独立的Gradle的版本号。
    4. distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip
    Android Gradle 插件版本所需的 Gradle 版本
    1.0.0 - 1.1.32.2.1 - 2.3
    1.2.0 - 1.3.12.2.1 - 2.9
    1.5.02.2.1 - 2.13
    2.0.0 - 2.1.22.10 - 2.13
    2.1.3 - 2.2.32.14.1 - 3.5
    2.3.0+3.3+
    3.0.0+4.1+
    3.1.0+4.4+
    3.2.0 - 3.2.14.6+
    3.3.0 - 3.3.34.10.1+
    3.4.0 - 3.4.35.1.1+
    3.5.0 - 3.5.45.4.1+
    3.6.0 - 3.6.45.6.4+
    4.0.0+6.1.1+
    4.1.0+6.5+
    4.2.0+6.7.1+
    7.07.0+

    由于以前两个插件的版本一直对应不上,容易造成大家的误解。Android Gradle的版本号 在Gradle发布7.0后,进行了同步。也就是我们在上面看到的。7.0之后就同步上了。两个版本号一致。

     android gradle 7.0+更新

    工具最低版本默认版本
    Gradle7.0.27.0.2
    SDK Build Tools30.0.230.0.2
    NDK不适用21.4.7075529
    JDK1111

    也就是我们如果将Android Gradle 升级到7.0后,我们的Gradle必须要在7.0.2以上。并且jdk必须是11.而不再是jdk8了。

     二、build.gradle里的各种配置

     1、project的build.gradle

    1. buildscript {
    2. apply from: "config.gradle"//引用全局配置
    3. // 配置 Gradle 脚本依赖项上所需要的存储库
    4. addRepos(repositories)
    5. // 配置 Gradle 脚本所需要的依赖项
    6. dependencies {
    7. classpath deps.android_gradle_plugin
    8. classpath deps.android_greendao_plugin
    9. classpath deps.android_butterknife_gradle_plugin
    10. classpath deps.huawei_agconnect
    11. // 添加神策分析 android-gradle-plugin2 依赖
    12. classpath deps.sensorsdata_plugin
    13. }
    14. // 配置 Gradle 脚本依赖项上所需要的存储库
    15. repositories {
    16. google()
    17. }
    18. }
    19. // 配置项目本身及其每个子项目所需要的依赖
    20. allprojects {
    21. // 配置此项目所需依赖的存储库
    22. addRepos(repositories)
    23. }
    24. // 运行 gradle clean 时,执行此处定义的 task 任务。该任务继承自 Delete,删除根目录中的 build 目录。
    25. // 相当于执行Delete.delete(rootProject.buildDir)。
    26. task clean(type: Delete) {
    27. delete rootProject.buildDir
    28. }
    29. //指定编译的编码
    30. tasks.withType(JavaCompile) {
    31. options.encoding = "UTF-8"
    32. }

     2、app的build.gradle

    1. //声明时Android程序
    2. //com.android.application 表示这是一个应用程序模块,可直接运行
    3. // com.android.library 标识这是一个库模块,是依附别的应用程序运行
    4. apply plugin: 'com.android.application'
    5. android {
    6. // 编译sdk的版本,也就是API Level,例如API-20、API-28等等。
    7. compileSdkVersion 28
    8. // build tools的版本,其中包括了打包工具aapt、dx等
    9. // 这个工具的目录位于你的sdk目录/build-tools/下
    10. buildToolsVersion "28.0.2"
    11. // 默认配置 应用程序包名、最小sdk版本、目标sdk版本、版本号、版本名称
    12. defaultConfig {
    13. applicationId "xx.xx.xx" //应用程序的包名
    14. minSdkVersion 16 //最小sdk版本,如果设备小于这个版本或者大于maxSdkVersion将无法安装这个应用
    15. targetSdkVersion 28 //目标sdk版本,充分测试过的版本(建议版本)
    16. versionCode 1//版本号,第一版是1,之后每更新一次加1
    17. versionName "1.0"//版本名,显示给用户看到的版本号
    18. testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"//Instrumentation单元测试
    19. }
    20. //signingConfigs 一定要在 buildTypes 之前 否则 找不到config
    21. signingConfigs {// 签名配置
    22. debug {
    23. keyAlias 'xxx'
    24. keyPassword 'xxxxx'
    25. storeFile file('./xxxx.jks')
    26. storePassword 'xxxx'
    27. }
    28. release {
    29. keyAlias 'xxx'
    30. keyPassword 'xxxx'
    31. storeFile file('./xxx.jks')
    32. storePassword 'xxxxx'
    33. }
    34. }
    35. // 指定生成安装文件的配置,是否对代码进行混淆;
    36. //常有两个子包:release,debug,注:直接运行的都是debug安装文件
    37. buildTypes {
    38. // release版本的配置,即生成正式版安装文件的配置
    39. release {
    40. debuggable false
    41. minifyEnabled false// 是否对代码进行混淆,true表示混淆
    42. zipAlignEnabled true// 是否支持zip
    43. shrinkResources true //资源瘦身
    44. // proguard-android.txt指所有项目通用的混淆规则,proguard-rules.pro当前项目特有 的混淆规则
    45. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    46. }
    47. }
    48. sourceSets {//通过修改SourceSets中的属性,可以指定需要被编译的源文件,不在指定路径下的源文件将会被排除(即不会被编译)
    49. main {
    50. jniLibs.srcDirs = ['libs'] // 设置so包地址
    51. res.srcDirs = ['src/main/res', 'src/main/res/person']// resource目录
    52. }
    53. dev {
    54. java.srcDirs = ['src/dev', 'src/dev/java', 'src/dev/java/']// java源代码目录
    55. }
    56. prod {
    57. java.srcDirs = ['src/prod', 'src/prod/java', 'src/prod/java/']
    58. }
    59. }
    60. // 分环境打包配置
    61. productFlavors {
    62. //开发环境打包配置
    63. dev {
    64. applicationId "com.cloudy.component"
    65. buildConfigField "boolean", "IS_DEBUG", "true"
    66. versionNameSuffix ".beta"
    67. }
    68. //生产环境打包配置
    69. prod {
    70. applicationId "com.cloudy.component"
    71. buildConfigField "boolean", "IS_DEBUG", "false"
    72. }
    73. }
    74. lintOptions {//lint 配置;
    75. abortOnError false
    76. checkReleaseBuilds false
    77. }
    78. }
    79. repositories {//仓库配置
    80. flatDir {
    81. dirs 'libs'
    82. dirs project(':lib_qr').file('libs')
    83. dirs project(':lib_ntalkerChatUI').file('libs')
    84. dirs project(':unityLibrary').file('libs')
    85. dirs project(':lib_vc').file('libs')
    86. }
    87. }
    88. dependencies {//指定当前项目的所有依赖、本地依赖,库依赖以及远程依赖;
    89. implementation fileTree(dir: 'libs', include: ['*.jar'])// 本地依赖
    90. implementation project(':library')// 库依赖声明
    91. // 远程依赖,androidx.appcompat是域名部分,appcompat是组名称,1.0.2是版本号
    92. implementation 'androidx.appcompat:appcompat:1.0.2'
    93. implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    94. testImplementation 'junit:junit:4.12'// 声明测试用列库
    95. androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    96. androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    97. }

    三、gradle中第三方库的配置

    参考博客1

    参考博客2

    android中常见的第三方库为:so,jar,aar

    so一般来说.是C或C++语言的内容打包成的库。

    jar只包含了class文件与清单文件 ,不包含资源文件(如图片等所有res中的文件)。

    aar包含所有资源(class以及res资源文件)。

     1、so依赖

    so文件默认在app/src/main/jniLibs路径下。如果更改so文件到指定位置下,需要重新设置gradle

    例如将so文件放在app/libs目录下

    1. // app的build.gradle
    2. android {
    3. ...
    4. sourceSets {
    5. main {
    6. jniLibs.srcDirs = ['libs'] //这个必须加,因为我们把.so文件放在了libs文件夹中
    7. }
    8. }
    9. }

    2、jar依赖

    将jar包放入libs目录下,再添加gradle依赖

    1. dependencies {
    2. implementation fileTree(include: ['*.jar'], dir: 'libs')
    3. }

    3、aar依赖

    将aar文件放置到libs文件夹,再添加gradle依赖

    1. android {
    2. ...
    3. repositories {
    4. flatDir {
    5. dirs 'libs'
    6. }
    7. }
    8. }
    9. dependencies {
    10. implementation(name: 'lfilepickerlibrary-release', ext: 'aar')
    11. }

    四、gradle语言

    gradle文件里用的语言是groovy,具体语法可参考博客

    了解groovy

    gradle配置

    https://juejin.cn/post/6844903455786549255

  • 相关阅读:
    文件字符流
    2022年9月2日:面向初学者的 web 开发--使用 JavaScript 制定决策
    智工教育:注册计量师一级和二级的科目一样吗?
    轻量应用服务器vs云服务器:区别在哪?
    安全狗持续4年零失误实力守护金鸡颁奖典礼
    mtgsig1.2简单分析
    PC_算计机性能指标
    android的通知使用
    Redis6.0.6的三大内存过期策略和八大淘汰策略
    Dapr在Java中的实践 之 状态管理
  • 原文地址:https://blog.csdn.net/u014050788/article/details/128093938