project结构
即真实的文件目录结构
Android 文件结构
App工程分为两个层次,第一个层次是项目,另一个层次是模块。模块依附于项目,每个项目至少有一个模块,也能拥有多个模块。“编译运行App”,指的是运行某个模块,而非运行某个项目,因为模块才对应实际的App。
App项目下面有两个分类:app(代表app模块)、Gradle Scripts。
app下面有3个子目录,Gradle Scripts下面主要是工程的编译配置文件
app文件夹
(1)manifests子目录,下面只有一个XML文件,即AndroidManifest.xml,它是App的运行配置文件。
(2)java子目录,下面有3个com.example.myapp包,其中第一个包存放当前模块的java源代码,后面两个包存放测试用的java代码。
(3)res子目录,存放当前模块的资源文件。res下面又有4个子目录:
- drawable目录存放图形描述文件与图片文件。
- layout目录存放App页面的布局文件。
- mipmap目录存放App的启动图标。
- values目录存放一些常量定义文件,例如字符串常量strings.xml、像索常量dimens.xml、颜色常量colors.xm)、样式风格定义styles.xml等。
Gradle Scripts
Gradle 是一个项目自动化构建工具,帮我们做了依赖、打包、部署、发布、各种渠道的差异管理等工作。
Gradle Scripts主要是工程的编译配置文件,主要有:
- build.gradle,该文件分为项目级与模块级两种,用于描述App工程的编译规则。
- proguard-rules.pro,该文件用于描述java代码的混淆规则。
- gradle.properties,该文件用于配置编译工程的命令行参数,一般无须改动
- settings.grade,该文件配置了需要编译哪些模块。初始内容为include':app',表示只编译app模块。
- local.properties,项目的本地配置文件,它在工程编译时自动生成,用于描述开发者电脑的环境配置,包括SDK的本地路径、NDK的本地路径等。
project 级别的buildradle:
指定了当前项目的总体编译规则,打开该文件在buildscript下面找到repositories和dependencies两个节点,其中repositories节点用于设置Android studio插件的网络仓库地址,而dependencies节点用于设置gradle插件的版本号。由于官方的谷歌仓库位于国外,下载速度相对较慢,因此可在repositories节点添加阿里云的仓库地址,方便国内开发者下载相关插件。
repositories{}闭包:配置远程仓库
该闭包中声明了jcenter()和google()的配置,其中jcenter是一个代码托管仓库,上面托管了很多Android开源项目,在这里配置了jcenter后我们可以在项目中方便引用jcenter上的开源项目,从Android Studio3.0后新增了google()配置,可以引用google上的开源项目。
dependencies{}闭包:配置构建工具
该闭包使用classpath声明了一个Gradle插件,由于Gradle并不只是用来构建Android项目,因此此处引入相关插件来构建Android项目,其中’3.3.3’为该插件的版本号,可以根据最新的版本号来调整。
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {//这里是gradle脚本执行所需依赖,分别是对应的maven库和插件
repositories {
google()//从Android Studio3.0后新增了google()配置,可以引用google上的开源项目
jcenter()//是一个类似于github的代码托管仓库,声明了jcenter()配置,可以轻松引用 jcenter上的开源项目
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0'此处是android的插件gradle,gradle是一个强大的项目构建工具
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {//这里是项目本身需要的依赖,比如项目所需的maven库
repositories {
google()
jcenter()
}
}
// 运行gradle clean时,执行此处定义的task任务。
// 该任务继承自Delete,删除根目录中的build目录。
// 相当于执行Delete.delete(rootProject.buildDir)。
// gradle使用groovy语言,调用method时可以不用加()。
task clean(type: Delete) {
delete rootProject.buildDir
}
moudle级别的bulidgradle:
模块级别的 build.gradle 对应于具体模块,每个模块都有自己的 build.gradle,它指定了当前模块的详细编译规则。
-
plugins:引入插件
-
android:包含了配置 Android 构建的所有信息,比如编译 SDK 版本、应用 ID、版本号、签名配置等。
-
dependencies:用于声明该模块所依赖的其他库和模块。可以包括编译时依赖、运行时依赖、测试依赖等。
plugin块:
表示应用了插件,另一种较早的一种声明方式,也是一种比较常见的方式:
apply plugin: 'com.android.application'
android:
1、添加signingConfigs{}闭包:
2、compileSdkVersion:设置编译时用的Android版本
3、buildToolsVersion:设置编译时使用的构建工具的版本,Android Studio3.0后去除此项配置
4、defaultConfig{}闭包:
- applicationId:指定了项目的包名。
- minSdk:指定项目最低兼容的版本,如果设备小于这个版本或者大于maxSdkVersion(一般不用)将无法安装这个应用,这里指定为16,表示最低兼容到Android 4.1系统。
- targetSdk:指定项目的目标版本,表示在该目标版本上已经做过充分测试,系统会为该应用启动一些对应该目标系统的最新功能特性,Android系统平台的行为变更,只有targetSdk的属性值被设置为大于或等于该系统平台的API版本时,才会生效。
- versionCode:表示版本号,一般每次打包上线时该值只能增加,打包后看不见。
- versionName:表示版本名称,展示在应用市场上。
- testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner”表明要使用AndroidJUnitRunner进行单元测试。
5、 buildTypes{}闭包:
这个闭包主要指定生成安装文件的主要配置,一般包含两个子闭包,一个是debug闭包,用于指定生成测试版安装文件的配置,可以忽略不写;另一个是release闭包,用于指定生成正式版安装文件的配置。
6、sourceSets{}闭包:配置目录指向
7、packagingOptions{}闭包:打包时的相关配置
8、productFlavors{}闭包:多个渠道配置
9、lintOptions{}闭包:代码扫描分析
Androidmanifest.xml
史上最全的Android build.gradle配置教程-腾讯云开发者社区-腾讯云 (tencent.com)
12-编译配置文件 build.gradle_哔哩哔哩_bilibili
【Android从零单排系列三】《认识一下Android项目结构》-腾讯云开发者社区-腾讯云 (tencent.com)