最近在学习 Android 开发,使用 Android Studio 做安卓开发一般会涉及到下面几个文件,如下我逐一标了数字,然后进行详细的说明。
1处
.gradle 和 .idea 目录是 AS 这个 IDE 自动生成的文件,我们不用不管。
2处
最外层目录下的 setting.gradle 文件
用于配置子工程(也可以说是 Module ),新创建空项目,setting.gradle 文件只有一行:
1 include ':app'如果是多个子模块,则是类似于:
1 include ':demo1app', ':demo2app'
3处
最外层目录下 local.properties 文件
用于指定本机中 Android SDK 的路径,通常是内部生成的,我们并不需要修改,除非你本机的 Android SDK 路径发生了变化。
比如我的 Mac 上该文件内容是:
1 sdk.dir=/Users/codermr/Library/Android/sdk
4处
最外层目录下 gradle.properties 文件
这个文件是全局的 gradle 配置文件。
我的 Mac 上该文件只有一行内容:
1 org.gradle.jvmargs=-Xmx1536m
5处
最外层目录下 build.gradle 文件
这个是项目全局的 gradle 构建脚本。会配置 gradle 脚本执行所需要的依赖库和项目本身所需要的依赖库。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//buildscript{}闭包里是█gradle脚本█执行所需依赖,分别是对应的maven库和插件。 buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.0'//gradle插件版本 } } // █allprojects{}闭包里是█项目本身█需要的依赖,比如项目所需的maven库。 allprojects { repositories { jcenter() } } //█运行gradle clean时,执行此处定义的task任务,该任务继承自Delete,删除根目录中的build目录。 task clean(type: Delete) { delete rootProject.buildDir } |
- buildscript 里面是 gradle 脚本执行所需依赖,分别是对应的 maven 库和插件库。
- allprojects 里面是项目本身需要的依赖。
当我们不确定,且引入第三方的时候,不确定是项目所需依赖还是 gradle 脚本执行时所需依赖的时候,推荐在 buildscript 和 allproject 里面同时添加。
6处
gradle/wrapper 目录下的 gradle-wrapper.jar 和 gradle-wrapper.properties 文件
“wrapper”顾名思义就是“包装”的意思,对 gradle 进行了包装。
gradle-wrapper.jar 是 Gradle Wrapper 的主体功能包,在Android Studio安装过程中产生 gradle-wrapper.jar(默认安装目录
C:\Program Files\Android\Android Studio\plugins\android\lib\templates\gradle\wrapper\gradle\wrapper\gradle-wrapper.jar
)。然后每次新建项目,会将 gradle-wrapper.jar 拷贝到你的项目的 gradle/wrapper 目录中。gradle-wrapper.properties 文件主要指定了该项目需要什么版本的 Gradle,从哪里下载该版本的 Gradle,下载下来放到哪里,如下是我 Mac 上的配置内容:
GRADLE_USER_HOME :一般指
~/.gradle
zipStoreBase 和 zipStorePath 组合在一起,是下载的 gradle-7.4-bin.zip 所存放的位置。zipStorePath 是 zipStoreBase 指定的目录下的子目录。
distributionPath :GRADLE_USER_HOME 和 distributionPath 一起指定了下载的 gradle-7.4-bin.zip 解压后的存放位置,如下是我的 Mac 上位置:
distributionUrl :会去这个地址下载 gradle-7.4-bin.zip 。
注意:最外层目录下 build.gradle 文件中指定了 gradle 的插件版本:
gradle-wrapper.properties 文件中指定了 gradle 的版本:
gradle 的插件版本号要和gradle版本号相对应:
Android Gradle 插件和 Android Studio 兼容性
Android Studio 构建系统以 Gradle 为基础,并且 Android Gradle 插件添加了几项专用于构建 Android 应用的功能。下表列出了各个 Android Studio 版本所需的 Android Gradle 插件版本:
比如我的 Android Studio 版本是 2021.3.1,如果我配置的 gradle 插件版本太低,Android Studio 会提示我修改:
7处
app 目录下的 proguard-rules.pro 文件
用于配置代码混淆规则。
8处
app 目录下的 build.gradle 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
apply plugin: 'com.android.application' android { compileSdkVersion 24 buildToolsVersion "24.0.2"//█构建工具的版本█ defaultConfig { applicationId "com.example.helloworld" //█项目包名█ minSdkVersion 15 targetSdkVersion 24 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies {//█项目所依赖的jar包█ compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:appcompat-v7:24.2.1' testCompile 'junit:junit:4.12' } |
compileSdkVersion
编译安卓源码所使用的 Android sdk 版本,在编译源码时会从该级别 SDK 中寻找要导入的类和函数。
minSdkVersion
在 AS 中新建项目时会需要指定该版本号。意思是“项目最低兼容的 Android 系统版本”,表示 APP 可以支持的 Android SDK 的最早版本,小于该版本的 Android 系统上不保证 APP 能正常安装和运行。
targetSdkVersion
该值会告诉安卓应用是为哪个API级别设计的。
targetSdkVersion指定的值表示你在该目标版本上已经做过了充分的测试,系统将会为你的应用程序启用一些最新的功能和特征。比如, Android 6.0 系统引用了运行时权限这个功能,如果你将targetSdkVersion 指定为23或者更高,那么系统就会为你的程序启动运行时权限。如果你将 targetSdkVersion 指定为22,那么就说明你的程序最高只在 Android 5.1系统上做过充分的测试,Android6.0系统中引入的新功能就不会启动了。
说通俗一点:比如你将 targetSdkVersion 设置为22,涉及某个(或某几个)权限,你直接在 mainfest中配置权限即可,然后在java代码中进行获取权限后的逻辑处理即可。
但如果你将 targetSdkVersion 设置为23或更高,你除了在 mainfest 中配置权限外,还需要在 java 代码中判断用户是否同意权限,如果同意,执行什么业务操作;如果不同意,执行什么业务操作(一般是提示某某权限被拒后,某某功能无法正常使用).如果你只在mainfest中配置了权限, targetSdkVersion 又大于等于23, Java代码中不进行运行时权限的代码,你的应用程序就直接报错了。请一定在更新 targetSdkVersion 之前做测试!尤其是国产手机各种厂商定制。并且在开发过程中,还有一种可能,产品经理要求你在运行时权限这里有这样的需求:用户拒绝某项权限后,可以直接跳到修改权限的界面(即设置/权限管理这里),或者用户第一次拒绝后,用户第二次操作这个按钮或界面时,再次出现权限的提示。
本引用来自 https://blog.csdn.net/gaolh89/article/details/79809034
一般来说 compileSdkVersion 和 targetSdkVersion 配置值是一样的。
新版 AS 配置变化
(1)将最外层 build.gradle 中的 buildscript 和 allprojects 移动至 setting.gradle 并改名为 pluginManagement 和 dependencyResolutionManagement 。里面的东西依旧可以按照原来的 copy 过来。
(2)将最外层 build.gradle 中的 dependencies 修改为 plugins,替代了引用原来的 Gradle 版本。
(3)setting.gralde 中增加了 rootProject.name = “xxx” 配置。