项目概述
在本课中,您将了解 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.kt 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# http://www.gradle.org/docs/current/userguide/build_environment.html 6# 指定守护进程使用的 JVM 参数。 7# 此设置对调整内存非常有用。 8org.gradle.jvmargs=-Xmx1536m 9# 启用后,Gradle 将以孵化并行模式运行。 10# 此选项仅建议在解耦项目中使用。更多详情请参考: 11# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 12# org.gradle.parallel=true 13# 使用 AndroidX 包结构,明确区分哪些包属于 Android 系统, 14# 哪些包随应用 APK 打包 15# https://developer.android.com/topic/libraries/support-library/androidx-rn 16android.useAndroidX=true 17# 自动将第三方库转换为使用 AndroidX 18android.enableJetifier=true
gradle、gradlew 和 gradlew.bat 文件与 Gradle Wrapper 相关,这意味着我们无需手动安装 Gradle。
最后,build.gradle 是项目的顶层构建文件,用于定义适用于所有模块的公共配置。在本例中,我们希望所有模块都能访问 Google 的 Maven 仓库和 Bintray 的 JCenter 仓库,这些仓库提供了核心 Android 功能依赖。此外,我们还在此文件中指定 Gradle 和 Kotlin 的版本。
1buildscript { 2 ext.kotlin_version = '1.3.70' 3 4 repositories { 5 google() 6 jcenter() 7 8 } 9 dependencies { 10 classpath "com.android.tools.build:gradle:3.5.0" 11 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 12 } 13} 14 15allprojects { 16 repositories { 17 google() 18 jcenter() 19 20 } 21} 22 23task clean(type: Delete) { 24 delete rootProject.buildDir 25}
模块文件
每个模块都有唯一的名称。本例中模块名为 'app',这是我们存放应用程序源码的地方。
模块级别的 build.gradle 文件仅包含该模块特有的配置,例如:
apply plugin- 当前模块使用的插件:com.android.application- 表示这是一个 Android 应用模块kotlin-android-extensions- 提供一系列针对 Android 项目的 Kotlin 实用工具kotlin-android- 添加对 Kotlin 语言的支持(基于 Java)
compileSdkVersion- 编译项目所使用的 Android SDK 版本minSdkVersion- 应用支持的最低 Android 版本targetSdkVersion- 目标 Android SDK 版本,用于通知系统启用相应的兼容性行为applicationId- 应用在设备及 Google Play 商店中的唯一标识符versionCode- 内部版本号(整数)versionName- 显示给用户的版本名称compileOptions- 编译选项,用于启用 Java 1.8 的某些特性dependencies- 第一方和第三方库依赖,将在后续课程中详细介绍
1apply plugin: 'com.android.application' 2apply plugin: 'kotlin-android-extensions' 3apply plugin: 'kotlin-android' 4 5android { 6 compileSdkVersion 28 7 defaultConfig { 8 applicationId "com.travelblog" 9 minSdkVersion 21 10 targetSdkVersion 28 11 versionCode 1 12 versionName "1.0" 13 } 14 15 compileOptions { 16 sourceCompatibility = 1.8 17 targetCompatibility = 1.8 18 } 19} 20 21dependencies { 22 // kotlin 23 implementation "androidx.core:core-ktx:1.2.0" 24 implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 25 26 // ui 27 implementation 'androidx.appcompat:appcompat:1.1.0' 28 implementation 'androidx.constraintlayout:constraintlayout:1.1.3' 29 implementation 'com.google.android.material:material:1.1.0' 30}
AndroidManifest.xml 是声明应用中所有核心组件的位置,例如 Activity、Service、权限等。
当前的清单文件包含以下内容:
package- 应用的包名,本例中为com.travelblogtheme- 全局应用主题,本例中为MaterialComponents主题label- 显示在应用图标下方的名称activity- 声明的 Activity,目前只有一个MainActivityintent-filter- 定义 Activity 的特定行为,此处表示当用户点击应用图标时应启动该主 Activity
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/Kotlin 源代码。
目前我们只有一个类文件 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 分钟,但后续构建会快得多。
如果修改了代码,请先保存更改,然后再次点击 运行 以重启应用。请注意,构建过程可能需要一些时间,可通过终端标签页查看进度。