2、Android项目结构解析:了解Gradle构建系统、AndroidManifest.xml详解、资源文件(res)分类、R文件的作用
好,咱们现在正式开始动手了。你新建了一个项目,Android Studio 帮你生成了好多文件和文件夹。第一次看到这个项目结构,是不是有点懵?
别慌,我当年第一次打开也是这个感觉。这就像你搬进一个新家,总得先搞清楚厨房在哪、卧室在哪,对吧?
这一章,我就带你把这个「家」的每个房间都转一遍。搞清楚了这些,你后面写代码会顺手很多。
2.1 Gradle构建系统:项目的「大管家」
先说说 Gradle。它是个自动化构建工具。说白了,就是帮你把写的 Java/Kotlin 代码、资源文件、第三方库这些东西,打包成一个能在手机上跑的 APK 文件。
我个人习惯把 Gradle 想象成一个「大管家」。你告诉它你要用什么材料(依赖库)、打包成什么样子(构建类型),它就会帮你搞定一切。
2.1.1 项目级的 build.gradle
这个文件在项目的根目录下。它负责整个项目的全局配置。比如,所有模块都要用的插件版本、仓库地址等。
// 项目根目录下的 build.gradle
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:7.0.4"
// 注意:这里不要添加应用级别的依赖
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
嗯,这里要注意。这个文件你一般很少改动。只有在升级 Android Studio 或者添加全局插件时才会碰它。
2.1.2 模块级的 build.gradle
这个文件在 app 目录下。它才是你真正要打交道的文件。每个模块都有自己的 build.gradle。
// app/build.gradle
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
android {
compileSdk 33
defaultConfig {
applicationId "com.example.myfirstapp"
minSdk 21
targetSdk 33
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.8.0'
// 其他依赖...
}
这里有几个关键点,我重点说一下:
- applicationId:应用的唯一标识。说白了就是你的 App 在手机上的「身份证号」。发布后就不能改了。
- minSdk:最低支持的 Android 版本。我建议设成 21,这样能覆盖 95% 以上的设备。
- targetSdk:目标版本。表示你在这个版本上做过充分测试。
- dependencies:这里就是引入第三方库的地方。比如你想用 Google 的 Material Design 组件,就在这里加一行。
compileSdk 和 targetSdk 改成最新的稳定版。这样能用到最新的 API,也能避免一些兼容性问题。
2.2 AndroidManifest.xml:应用的「身份证」
这个文件在 app/src/main/ 目录下。它是每个 Android 应用必须有的文件。系统在安装和运行你的 App 时,第一件事就是读这个文件。
你可以把它理解成应用的「身份证」和「说明书」。里面记录了 App 的所有重要信息。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myfirstapp">
<!-- 声明权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.MyFirstApp">
<!-- 主 Activity -->
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我来拆解一下里面的关键元素:
- <manifest>:根标签,
package属性就是应用的包名。 - <uses-permission>:声明 App 需要的权限。比如访问网络、读取联系人等。
- <application>:应用的配置。图标、名称、主题都在这里设置。
- <activity>:声明一个界面(Activity)。
android:name指定了对应的 Java/Kotlin 类。 - <intent-filter>:这个很重要。它告诉系统,这个 Activity 是应用的入口。没有这个,你的 App 在桌面上就看不到图标。
2.3 资源文件(res)分类:应用的「素材库」
res 目录是存放所有非代码资源的地方。图片、布局文件、字符串、颜色值等等,都放在这里。
你想想看,如果把所有东西都写在代码里,那维护起来得多痛苦。所以 Android 设计了这套资源管理系统。
| 目录名 | 存放内容 | 使用示例 |
|---|---|---|
drawable/ |
图片文件(.png, .jpg, .svg)和自定义形状 | @drawable/ic_launcher |
layout/ |
界面布局文件(.xml) | @layout/activity_main |
mipmap/ |
应用图标(不同分辨率) | @mipmap/ic_launcher |
values/ |
字符串、颜色、尺寸、主题等 | @string/app_name |
raw/ |
原始文件(音频、视频等) | R.raw.sound_effect |
这里有个重要的概念:资源引用。在 XML 里用 @类型/名称 来引用,在 Java/Kotlin 代码里用 R.类型.名称 来引用。
重点: 资源文件的命名有讲究。只能用小写字母、数字和下划线。比如 my_image.png 可以,但 My Image.png 就不行。我刚开始学的时候,因为这个报错了好几次。
2.4 R文件的作用:代码和资源的「桥梁」
R 文件是 Android 自动生成的。你不需要手动创建它,也最好不要去修改它。
它的作用是什么?说白了,就是让 Java/Kotlin 代码能「找到」res 目录里的资源。
比如,你在 res/values/strings.xml 里定义了一个字符串:
<resources>
<string name="app_name">我的第一个App</string>
</resources>
然后,R 文件里就会自动生成一个对应的常量:
public static final class string {
public static final int app_name = 0x7f0a0014;
}
这样,你在代码里就可以通过 R.string.app_name 来获取这个字符串的 ID 了。
为什么会这样?因为 Android 系统在编译时,会给每个资源分配一个唯一的整数 ID。R 文件就是这些 ID 的「目录」。你通过 R 文件来引用资源,系统就能找到对应的文件。
R.id.xxx 报红了,别慌。先检查一下对应的布局文件里有没有定义这个 ID。如果定义了还是报错,试试菜单栏的 Build > Clean Project,让系统重新生成一下 R 文件。这个操作我一周至少用两三次。
好了,这一章的内容就到这里。项目结构这块,你不需要一次全记住。先有个大概印象,后面写代码时遇到不懂的,再回来翻翻就行。
下一章,我们就要开始写第一个界面了。到时候你会真正体会到,这些文件是怎么配合工作的。
公众号:蓝海资料掘金营,微信deep3321