Android 打卡 Day2 - 项目结构
SDK Version
有些文章看的云里雾里,概念性的内容还是看官方👉:
Android Studio 项目目录结构
在 Android Studio 中,新建一个工程、进入 Project 标签页。Project 标签页会显示项目的文件和文件夹,如下左图。官方说 如有必要,请从 Project 标签页的下拉菜单中选择 Android,如下右图:
这就是您使用的标准文件视图和组织方式,在编写项目代码时会非常有用,因为您可以轻松访问将在应用中使用的各个文件。不过,如果您是通过文件浏览器(如 Finder 或 Windows 资源管理器)浏览文件,则文件层次结构的组织方式会明显不同。
确实,Project 比 Android 目录看着闹心多了,我说怎么第一次看公司 Android 的代码乱七八糟的呢,他们几个也不告诉我,坏人,啊哈哈哈~🤡🤡🤡🤡🤡
截图是以上次的 Tip Time Demo 为例:
目录文件 | 用途 |
---|---|
.gradle | gradle 项目产生的文件夹(自动编译工具产生的文件) |
.idea | IDEA 项目文件夹(开发工具产生的文件) |
app | module 模块 |
build | 构建时生成文件的地方 |
gradle | gradle 环境支持文件夹 |
.gitignore | git 源码管理文件 |
build.gradle | gradle 项目自动编译的配置文件 |
gradlew | 自动完成 gradle 环境的 linux mac 脚本,配合 gradle 文件夹使用 |
gradlew.bat | 自动完成 gradle 环境的 windows 脚本,配合 gradle 文件夹使用 |
local.properties | Android SDK NDK 环境路径配置 |
setting.gradle | gradle 项目的子项目包含文件 |
.gradle
.gradle 是AS自动生成的目录,一般情况不做修改。
.idea
idea 是AS自动生成的目录,一般情况不做修改。
app
应用的主目录、模块目录。
目录文件 | 用途 |
---|---|
build | 编译时生成 |
libs | 存放第三方的 jar 包 |
src | app 模块的源码 |
.gitignore | git 源码管理文件 |
build.gradle | app 模块的 gradle 构建脚本 |
proguard-rules.pro | 指定代码混淆 |
1️⃣ build 目录
和外层的 build 类似主要包含编译时自动生成的内容, 其中在 outputs 文件夹下存放打包好的 apk 文件(debug 和 release)。
2️⃣ libs 目录
如果项目中是用了第三方的 jar 包,就需要把 jar 包放到 libs 目录下,然后 jar 包会被自动添加到构建路径(如集成百度地图 sdk,把 jar 包放到 libs 目录。可以在 build.gradle(app)文件中查看当前项目依赖)。
3️⃣ src 目录
module 源码所在目录。
- AndroidTest - 用来编写 Android test 测试用例的,可以对项目进行一些自动化测试。
- Java - 放 Java 代码的地方。
- res - 存放各种资源文件的地方,有图片、字符串,动画、音频等,还有各种形式的 XML 文件。
1 | 🤓 res [main] 🔥 tree -L 1 |
- AndroidManifest.xml - 整个项目的配置文件,四大组件都需要在这里注册才能正常的运行。
- test - 用来编写 Unit Test 测试用例的,是对项目进行自动化测试的另一种方式。
4️⃣ src->res 资源介绍
💯 图片资源
drawable:存放各种位图文件,(.png/.jpg/.9png/.gif 等) 除此之外可能是一些其他的 drawable 类型的 XML 文件;
mipmap-hdpi:高分辨率,一般把图片放这里;
mipmap-mdpi:中等分辨率,很少,除非兼容的的手机很旧;
mipmap-xhdpi:超高分辨率,手机屏幕材质越来越好,以后估计会慢慢往这里过渡;
mipmap-xxhdpi:超超高分辨率,这个在高端机上有所体现;
💯 布局资源
layout:该目录下存放的就是我们的布局文件,另外在一些特定的机型上,我们做屏幕适配,比如 480*320 这样的手机,我们会另外创建一套布局,就像:layout-480x320 这样的文件夹。
💯 values 目录
emens.xml:定义尺寸资源;
string.xml:定义字符串资源;
styles.xml:定义样式资源;
colors.xml:定义颜色资源;
arrays.xml:定义数组资源;
attrs.xml:自定义控件时用的较多,自定义控件的属性;
theme 主题文件:和 styles 很相似,但是会对整个应用中的 Actvitiy 或指定 Activity 起作用,一般是改变窗口外观的,可在 Java 代码中通过 setTheme 使用,或者在 Androidmanifest.xml 中为 <application…> 添加 theme 的属性。
PS: 你可能看到过这样的 values 目录:values-w820dp,values-v11 等,前者 w 代表平板设备,820dp 代表屏幕宽度;而 v11 这样代表在 API(11),即 android 3.0 后才会用到的。
💯 raw 目录
用于存放各种原生资源 (音频,视频,一些 XML 文件等),我们可以通过 openRawResource(int id) 来获得资源的二进制流。其实和 Assets 差不多,不过这里面的资源会在 R 文件那里生成一个资源 id 而已。
💯 动画资源
animator:存放属性动画的 XML 文件;
anim:存放补间动画的 XML 文件;
💯 如何使用资源
我们所有的资源文件都会在 R.java 文件下生成一个资源 id,我们可以通过这个资源 id 来完成资源的访问,使用情况有两种:Java 代码中使用和 XML 代码中使用。
- Java 代码中使用:
文字:
1 | txtName.setText(getResources().getText(R.string.name)); |
图片:
1 | imgIcon.setBackgroundDrawableResource(R.drawable.icon); |
颜色:
1 | txtName.setTextColor(getResouces().getColor(R.color.red)); |
布局:
1 | setContentView(R.layout.main); |
控件:
1 | txtName = (TextView)findViewById(R.id.txt_name); |
- XML 代码中使用:
通过 @xxx 即可得到,比如这里获取文本和图片:
1 | <TextView android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background = "@drawable/img_back"/> |
该说不说,这个资源的分布和引用方式,真的比 iOS 方便很多…🚰
Gradle
Android Studio 使用高级构建工具包 Gradle 来自动执行和管理构建流程,同时也允许您自行指定灵活的 build 配置。每项 build 配置均可定义各自的一组代码和资源,同时重复利用所有应用版本共用的部分。Android Gradle 插件与该构建工具包搭配使用,提供专用于构建和测试 Android 应用的流程和可配置设置。
Gradle 和 Android Gradle 插件独立于 Android Studio 运行。这意味着,您可以在 Android Studio 内、计算机上的命令行或未安装 Android Studio 的计算机(如持续集成服务器)上构建 Android 应用。
对于我这种初学者来说,知道 Gradle 是一个自动化构建工具(管理项目中的依赖、打包、编译)、基于 Groovy 的 DSL等就可以了,不急,后面慢慢来理解。好吧,主要是有些内容我没看懂🤓,但是不急,先用起来。
选中下拉菜单 -> Android,可以看到 Gradle Scripts 包含以下文件:
1 | build.gradle(Project:Tip_Time) |
PS: Tip Time 工程太简单,复杂的项目应该不止这些文件。
1️⃣ settings.gradle
(Project Settings)位于项目的根目录下,此设置文件会定义项目级仓库设置,并告知 Gradle 在构建应用时应将哪些模块包含在内。多模块项目需要指定应包含在最终 build 中的每个模块。可能包含一下这几部分:
1 | pluginManagement { |
✅pluginManagement
pluginManagement {repositions {...}}
块用来配置 Gradle 用于搜索或下载 Gradle 插件及其可传递依赖项的存储库。Gradle 预先配置了对远程存储库(如 JCenter、Maven Central 和 Ivy)的支持。还可以使用本地存储库或定义自己的远程存储库。上面的代码定义了 Gradle 插件门户、谷歌的 Maven 存储库和 Maven 中央存储库,作为 Gradle 应该用来查找其依赖关系的存储库。
✅dependencyResolutionManagement
dependencyResolutionManagement {repositions {...}}
用于配置项目中所有模块使用的存储库和依赖项,例如用于创建应用程序的库。但是,应该在每个模块级 build.gradle 文件中配置特定于模块的依赖项。对于新项目,Android Studio 默认情况下包括谷歌的 Maven 存储库和 Maven 中央存储库,但它不配置任何依赖项(除非我们选择需要一些依赖项的模板)。
2️⃣ build.gradle(Project:Tip_Time)
Project 的构建文件。**// Top-level build file where you can add configuration options common to all sub-projects/modules.** 从这句注释大概能看出它的地位了。顶层 build.gradle
文件位于项目的根目录下。它用于定义适用于项目中所有模块的依赖项。默认情况下,顶层 build 文件使用 plugins
代码块定义项目中所有模块共用的 Gradle 依赖项。此外,顶层 build 文件还包含用于清理 build 目录的代码。
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. |
3️⃣ build.gradle(Module :app)
模块级 build.gradle
文件位于每个 project/module/
目录中,用于为其所在的特定模块配置 build 设置。可以通过配置这些 build 设置提供自定义打包选项(如额外的 build 类型和产品变种),以及替换 main/
应用清单或者顶层 build.gradle
文件中的设置。
1 | plugins { |
✅plugins
指定 android {}
块使用的构建选项。
- com.android.application - 表示该模块为应用程序模块,可以直接运行,打包得到的是.apk 文件;
- com.android.library - 表示该模块为库模块,只能作为代码库依附于别的应用程序模块来运行,打包得到的是.aar文件;
- org.jetbrains.kotlin.android - 表示该模块使用 kotlin 开发。
✅android
指定该模块的各种构建属性。
✅dependencies
指定仅构建该模块本身所需的依赖项。
4️⃣ Properties
Gradle 的属性文件,项目全局的配置(如 AndroidX 等)、构建的全局配置(例如网络代理等)、本地环境的配置(如 SDK 的路径等)。
gradle.properties(Project Properties)
gradle.properties(Global Properties)
local.properties(SDK Location)
Demo
仅用于记录学习过程,不具备指导性。🤓
下一日目标:膜拜一下四大组件。