前言
- 最近博主在unity开发独立游戏,UE5系列的相关长期教程先暂时不更新了,请大家多多谅解
- 本系列教程我们来看看如何使用Android Studio去开发一个APK用于用户的实时行程记录
- 本期我们来看看一个基础的APP项目的项目架构
熟悉项目结构
-
上一期我们快速了学会了如何新建一个项目和速通kotlin,我们这一小节来熟悉以下项目结构
-
上一期在新建项目的时候,我们选择了
Empty Activity
,这一期为了接下来新手入门方便,我们选择Empty View Activity
(下面会说明原因) -
这是我们选择模板
Empty View Activity
所创建的一个项目,接下来我们来过一遍整个结构
Activity
- 在Android开发中,
Activity
是一个非常重要的组件,它代表用户可以与之交互的单个屏幕。一个Activity
通常有一个用户界面,由布局文件定义,并通过XML文件进行配置。- 一般一个
Activity
通常由两个组件构成class MainActivity : ComponentActivity()
继承自ComponentActivity- 在
res
(resource)资源文件夹下的layout目录,我们可以找到Activity
布局设计的XML文件
- 一般一个
- 值得一提的是,当你新建的是一个
Empty Activity
而非Empty View Activity
时,res目录下并没有存在layout
目录,你可以通过自行创建来完善(这也是推荐初学者选择Empty View Activity
的原因) - 我们来关注新的
MainActivity.kt
kotlin
package com.example.pathrecorderapp
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_main)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
}
}
- 这里我们关注两个上面所说的重要组成部分
class MainActivity : AppCompatActivity()
:MainActivity
类继承自AppCompatActivity
,这是Activity
的一个扩展类,提供了更多的功能和兼容性支持.AppCompatActivity
本身继承自ComponentActivity
,它提供了对现代Android组件的支持。setContentView(R.layout.activity_main)
:setContentView()
方法是Activity
类的一个关键方法,它用于将布局资源(XML文件)设置到Activity
中。R.layout.activity_main
是一个资源ID,它引用了res/layout/activity_main.xml
文件。我们点开指定路径,可以看到实例程序对应的UI界面设计在这里
Mainfest
- AndroidManifest.xml:
AndroidManifest.xml
是每个 Android 应用程序的核心配置文件。它位于项目的根目录中,描述了应用程序的组件,如Activity
、Service
、BroadcastReceiver
和ContentProvider
,以及应用程序的权限、主题和所需的库。 - 我们来看看这个文件的内容
xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.PathRecorderApp"
tools:targetApi="31">
<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>
标签是根元素,它包含了所有其他元素,并定义了应用程序的包名和版本信息。 -
<application>
标签包含了应用程序的组件、主题、图标和所需权限等。android:allowBackup
:是否允许备份和恢复应用程序数据。
android:icon
:应用程序的图标。android:label
:应用程序的标签,通常在应用程序的启动器中显示。android:roundIcon
:应用程序的圆形图标,用于Android Wear设备。android:supportsRtl
:是否支持从右到左的文本。android:theme
:应用程序的主题。
-
<activity>
标签定义了应用程序中的一个活动(Activity
)。android:name
:活动的类名。
<intent-filter>
:定义了启动活动的方式。例如这里android.intent.action.MAIN
和android.intent.category.LAUNCHER
表示这个活动是应用程序的入口点,当用户点击应用程序图标时,会启动这个活动。
-
指定一提的,如果你的activity需要争取用户的权限,也需要在这里进行声明
kotlin+java
- 这个文件夹我们目前需要关注的点就是下面我展开的这个文件夹,他包含了我们基础的MainActivity
res
- 在 Android 开发中,
res
文件夹(资源文件夹)是项目中的一个重要目录,它包含了应用程序的资源文件,如布局、字符串、图片、颜色等。res
文件夹下的子目录分别用于存放不同类型的资源。-
drawable
文件夹用于存放图像资源,如图标、按钮背景、菜单项等。这些图像可以是 PNG、JPG 或其他格式。 -
layout
文件夹用于存放定义用户界面的 XML 文件。这些 XML 文件描述了 Activity、Fragment 或对话框的布局结构,包括其中的视图(如按钮、文本框、图像视图等)及其属性。通过在 Activity 中调用 setContentView() 方法,可以将布局文件设置为 Activity 的内容视图。 -
mipmap
文件夹用于存放应用程序图标(Launcher icons)。 -
values
文件夹用于存放各种类型的值资源,如字符串、颜色、尺寸、样式和数组。这些资源通常以 XML 文件的形式存储,并且可以通过资源 ID 在代码中引用。例如,你可以在 strings.xml 文件中定义字符串资源,然后在布局文件或代码中通过 @string/resource_name 引用它们。 -
xml
文件夹用于存放其他类型的 XML 资源,如搜索建议配置、设置偏好、菜单等。这些 XML 文件通常用于定义应用程序的特定功能或配置,如 searchable.xml 用于配置搜索界面,menu.xml 用于定义菜单项。
-
Gradle Scripts
- Gradle 是 Android 项目中使用的自动化构建工具。它负责编译代码、打包 APK、运行测试以及执行其他构建任务。在 Android Studio 项目中,Gradle 构建脚本定义了项目的构建配置。
build.gradle
文件:每个 Android 项目至少有两个build.gradle
文件:- 项目级
build.gradle
:位于项目的根目录中,它定义了项目的全局配置,如项目的构建脚本版本、编译 SDK 版本、构建工具版本、依赖仓库和项目级别的依赖项。 - 模块级
build.gradle
:位于每个模块的目录中,它定义了模块的构建配置,如应用的编译 SDK 版本、目标 SDK 版本、最小 SDK 版本、版本号、依赖项和构建类型。
- 项目级
- 这里我们关注 模块级
build.gradle
(Module: app)
kotlin
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
}
android {
namespace = "com.example.pathrecorderapp"
compileSdk = 34
defaultConfig {
applicationId = "com.example.pathrecorderapp"
minSdk = 24
targetSdk = 34
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
} compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}
dependencies {
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.appcompat)
implementation(libs.material)
implementation(libs.androidx.activity)
implementation(libs.androidx.constraintlayout)
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
}
插件配置
kotlin
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
}
- 这里使用了
plugins
块来应用插件。alias
方法用于从项目级别的依赖库中引用插件。这里引用了两个插件:libs.plugins.android.application
:这是 Android 应用插件,用于配置 Android 应用模块。libs.plugins.kotlin.android
:这是 Kotlin Android 插件,用于支持 Kotlin 语言。
Android 配置
namespace
:定义了应用的 Java 命名空间,用于生成 R 类和其他资源类。compileSdk
:指定了编译项目所需的 Android SDK 版本。defaultConfig
:包含了应用模块的默认配置,如applicationId
、minSdk
(最低 SDK 版本)、targetSdk
(目标 SDK 版本)、versionCode
(版本代码)和versionName
(版本名称)。testInstrumentationRunner
:指定了用于运行 instrumentation 测试的测试运行器。buildTypes
:定义了不同的构建类型,如release
和debug
。在这里,release
构建类型被配置为不启用代码混淆(isMinifyEnabled = false
),并指定了 ProGuard 规则文件。compileOptions
:配置了 Java 编译选项,这里设置了源兼容性和目标兼容性为 Java 8。kotlinOptions
:配置了 Kotlin 编译选项,这里设置了 JVM 目标版本为 1.8。
依赖配置
dependencies
块定义了项目所需的依赖项。这里使用了implementation
依赖配置,它表示依赖项仅在编译时需要,不会打包到 APK 中。libs
是一个可能位于项目根目录buildSrc
中的库对象,它包含了项目依赖的版本号和库的映射。这样可以在一个地方管理所有依赖项,避免在多个build.gradle
文件中重复配置。- 列出的依赖项包括 AndroidX 库、Kotlin 库、JUnit 测试库和 Espresso 测试库。
小结
- 下一期我们讲提提如何使用XML设计基础的UI
- 接下来博主会比较忙所以这一系列教程会以稍微短的形式分开完成,还请大家多多谅解
- 如有错误欢迎指出