项目概述
本课程将介绍 Android 项目结构、主要的项目文件和文件夹。
项目结构
让我们来看看一个典型的 Android 项目通常的结构。
- app - 根模块文件夹
- build.gradle - 模块配置文件
- src/main/AndroidManifest.xml - 模块清单文件
- src/main/java - 模块的 Java 或 Kotlin 源代码文件夹
- src/main/res - 模块的资源文件夹
- build.gradle - 项目配置文件
- gradle, gradle.properties, gradlew, gradlew.bat - 用于构建 Android 项目的 Gradle 相关文件
- settings.gradle - 项目设置文件
1项目名称 2├── app 3│ ├── build.gradle 4│ └── src 5│ └── main 6│ ├── AndroidManifest.xml 7│ ├── java 8│ │ └── com/travelblog/MainActivity.java 9│ └── res 10│ ├── layout/activity_main.xml 11│ └── values/ 12├── build.gradle 13├── gradle 14│ └── wrapper 15│ ├── gradle-wrapper.jar 16│ └── gradle-wrapper.properties 17├── gradle.properties 18├── gradlew 19├── gradlew.bat 20└── settings.gradle
Android 项目可以包含一个或多个模块。中小型项目通常只有一个模块,而大型项目则往往包含多个模块。每个模块可以对应一个独立的功能或通用逻辑。模块的定义与组合将在本课程后续部分详细讲解。
项目级别的文件通常对所有模块进行统一配置,属于整个项目的一部分。模块级别的文件则主要包含我们的源代码和资源。
项目文件
settings.gradle 文件是项目文件,用于列出项目中的所有模块以及项目名称。在本例中,模块名为 app,项目名为“Travel Blog”。
1include ':app' 2rootProject.name='Travel Blog'
gradle.properties 文件用于定义构建环境的配置参数。
1# 项目级 Gradle 设置。 2# IDE(如 Android Studio)用户: 3# 通过 IDE 配置的 Gradle 设置将覆盖 4# 本文件中指定的任何设置。 5# 如需了解更多关于如何配置构建环境的信息,请访问 6# http://www.gradle.org/docs/current/userguide/build_environment.html 7# 指定守护进程进程使用的 JVM 参数。 8# 此设置特别适用于调整内存配置。 9org.gradle.jvmargs=-Xmx1536m
gradle, gradlew, gradlew.bat 文件与 Gradle 包装器相关,这意味着我们无需手动安装 Gradle。
最后,build.gradle 是顶层构建文件,可用于添加适用于所有模块的通用配置。在本例中,我们希望所有模块都能访问 Google 的 Maven 仓库 和 Bintray 的 JCenter 仓库,以获取依赖项。这些仓库提供了核心 Android 功能的支持。
1buildscript { 2 repositories { 3 google() 4 jcenter() 5 } 6 dependencies { 7 classpath 'com.android.tools.build:gradle:3.5.0' 8 } 9} 10 11allprojects { 12 repositories { 13 google() 14 jcenter() 15 } 16} 17 18task clean(type: Delete) { 19 delete rootProject.buildDir 20}
模块文件
每个模块都有一个唯一的名称,在本例中模块名为 app。应用程序的源代码就存放于此。
模块的 build.gradle 文件包含仅与此模块相关的配置,例如:
compileSdkVersion- 用于编译项目的 Android SDK 版本minSdkVersion- 支持的最低 Android 版本targetSdkVersion- 目标 Android SDK 版本,用于通知系统启用兼容性行为applicationId- 应用在设备上及 Google Play 商店中的唯一标识符versionCode- 内部版本号versionName- 向用户展示的版本名称compileOptions- 用于启用 Java 1.8 的某些特性dependencies- 第一方和第三方库依赖项,将在后续课程中详细讨论
1apply plugin: 'com.android.application' 2 3android { 4 compileSdkVersion 28 5 defaultConfig { 6 applicationId "com.travelblog" 7 minSdkVersion 21 8 targetSdkVersion 28 9 versionCode 1 10 versionName "1.0" 11 } 12 13 compileOptions { 14 sourceCompatibility = 1.8 15 targetCompatibility = 1.8 16 } 17} 18 19dependencies { 20 // UI 组件 21 implementation 'androidx.appcompat:appcompat:1.1.0' 22 implementation 'androidx.constraintlayout:constraintlayout:1.1.3' 23 implementation 'com.google.android.material:material:1.1.0-alpha10' 24}
AndroidManifest.xml 是声明应用中使用的主要组件的地方,例如 Activity、Service、权限等。
当前的清单文件包含以下内容:
package- 应用的包名,本例中为com.travelblogtheme- 全局应用主题,本例中为MaterialComponents主题label- 用作应用图标显示的标签activity- 当前只有一个活动MainActivityintent-filter- 一组选项,用于为活动赋予特定行为,本例中声明它是主活动,当用户从启动器点击应用图标时应被启动
1<manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 package="com.travelblog"> 3 <application 4 android:theme="@style/Theme.MaterialComponents.DayNight.NoActionBar" 5 android:label="Travel Blog"> 6 <activity android:name=".MainActivity"> 7 <intent-filter> 8 <action android:name="android.intent.action.MAIN" /> 9 <category android:name="android.intent.category.LAUNCHER" /> 10 </intent-filter> 11 </activity> 12 </application> 13</manifest>
所有与资源相关的文件必须放置在 src/main/res 文件夹下的某个预定义子文件夹中。其中一个预定义文件夹是 layout,用于存放所有的布局文件;另一个是 values,通常用于存放颜色、样式、尺寸等资源。
目前我们只有一个布局文件 activity_main.xml,用于描述界面布局结构。我们将在下一课中更详细地介绍它。
1<androidx.constraintlayout.widget.ConstraintLayout 2 xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent"> 6 7 <TextView 8 android:layout_width="wrap_content" 9 android:layout_height="wrap_content" 10 android:text="Hello World!" 11 app:layout_constraintBottom_toBottomOf="parent" 12 app:layout_constraintLeft_toLeftOf="parent" 13 app:layout_constraintRight_toRightOf="parent" 14 app:layout_constraintTop_toTopOf="parent" /> 15 16</androidx.constraintlayout.widget.ConstraintLayout>
最后,我们有 src/main/java 文件夹,其中包含按包组织的 Java 源代码。
目前我们只有一个类文件 MainActivity,代表应用的主界面。我们将在下一课中详细讨论它。
1package com.travelblog; 2 3import androidx.appcompat.app.AppCompatActivity; 4import android.os.Bundle; 5 6public class MainActivity extends AppCompatActivity { 7 8 @Override 9 protected void onCreate(Bundle savedInstanceState) { 10 super.onCreate(savedInstanceState); 11 setContentView(R.layout.activity_main); 12 } 13}
Android 控件
在本课中,我们将使用一个 Android 代码组件来运行和测试 Android 项目。你可以浏览查看所有不同文件及其内容。

点击 运行 按钮,等待应用编译完成并启动模拟器。首次构建可能需要长达 3 分钟,但后续构建会快得多。
当终端窗口中出现 BUILD SUCCESSFUL 消息后,切换到 输出 标签页,查看 Android 模拟器及已启动的应用程序。花点时间尝试操作模拟器。
如果你对代码做了修改,请保存更改后再次点击 运行 以重新启动应用。请注意,这可能需要一些时间,你可以通过观察终端标签页了解构建进度。
No configuration found for ID: 297e38a4930330c1dca96eac4d7851f765ee8a0d4e08374db884dedd18fc9d6b
在下一课中,我们将介绍常用的 Android 库。