基于Android Studio的行程记录APK开发指南(二):熟悉一个项目结构

devtools/2024/10/20 4:00:26/

前言

  • 最近博主在unity开发独立游戏,UE5系列的相关长期教程先暂时不更新了,请大家多多谅解
  • 本系列教程我们来看看如何使用Android Studio去开发一个APK用于用户的实时行程记录
    • 第一期:基于Android Studio的用户行程记录APK开发指南(一):项目基础配置与速通Kotlin-CSDN博客
  • 本期我们来看看一个基础的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  }  }  
}
  • 这里我们关注两个上面所说的重要组成部分
  1. class MainActivity : AppCompatActivity() :MainActivity类继承自AppCompatActivity,这是Activity的一个扩展类,提供了更多的功能和兼容性支持.AppCompatActivity本身继承自ComponentActivity,它提供了对现代Android组件的支持。
  2. 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 应用程序的核心配置文件。它位于项目的根目录中,描述了应用程序的组件,如 ActivityServiceBroadcastReceiverContentProvider,以及应用程序的权限、主题和所需的库。
  • 我们来看看这个文件的内容
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><applicationandroid: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"><activityandroid: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)。
    • <intent-filter>:定义了启动活动的方式。例如这里android.intent.action.MAINandroid.intent.category.LAUNCHER 表示这个活动是应用程序的入口点,当用户点击应用程序图标时,会启动这个活动。
  • 指定一提的,如果你的activity需要争取用户的权限,也需要在这里进行声明

kotlinjava_92">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:包含了应用模块的默认配置,如 applicationIdminSdk(最低 SDK 版本)、targetSdk(目标 SDK 版本)、versionCode(版本代码)和 versionName(版本名称)。
  • testInstrumentationRunner:指定了用于运行 instrumentation 测试的测试运行器。
  • buildTypes:定义了不同的构建类型,如 releasedebug。在这里,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
  • 接下来博主会比较忙所以这一系列教程会以稍微短的形式分开完成,还请大家多多谅解
  • 如有错误欢迎指出

http://www.ppmy.cn/devtools/107334.html

相关文章

使用python+opencv解析图像和文本数据

1. 创建虚拟环境 新建文件夹, 并在文件夹中创建虚拟环境,可以使用Vscode打开文件夹, 然后在终端中输入以下命令: python -m venv venv2. 激活虚拟环境 在终端中输入以下命令: venv\Scripts\activate3. 安装依赖 在终端中输入以下命令: pip install opencv-pythonpip inst…

计算机工具软件安装攻略:Visual Studio Code下载、安装和使用

Visual Studio Code下载、安装和使用 1 Visual Studio Code简介 Visual Studio Code通常简称为VS Code&#xff0c;是一款由微软开发的免费、开源的轻量级代码编辑器。它在开发者社区中非常受欢迎&#xff0c;具有强大的功能和扩展性&#xff0c;适用于多种编程语言和开发场景…

单片机与人工智能:融合创新的未来之路

摘要&#xff1a; 本文深入探讨了单片机与人工智能的融合&#xff0c;阐述了单片机在人工智能应用中的角色、挑战与机遇。通过对相关技术的分析、实际案例的展示以及未来发展趋势的展望&#xff0c;揭示了这一融合在推动科技创新和产业发展中的巨大潜力。 目录 一、引言 二、…

雅特力初步环境准备

声明&#xff1a; 一切学习资料源于雅特力官方网站&#xff0c;请尊重劳动成果与版权。 附件包含官网的入门使用指南的pdf文件&#xff0c;需要自取&#xff08;免费&#xff09;。 同样&#xff0c;笔者原创学习笔记&#xff0c;转载需联系作者本人&#xff0c;侵权必究&#…

828华为云征文|基于Flexus X实例云服务器的实际场景-等保三级服务器设置

&#x1f534;大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 先看这里 写在前面3️⃣mysql创建安全管理员、审计管理员✅解决方法增加安全管理员增加审计管理员账户❌问题描述✅解决方法 3️⃣linux登录失败问题❌问题描述✅解决方法 3️…

矮草坪渲染尝试

本来说写unity里的&#xff0c;由于three测试方便&#xff0c;先试试three 这个图片是目标效果 可以看见草很矮&#xff0c;很密集&#xff0c;如果用instance来绘制的话&#xff0c;遭不住的 忽然发现这个效果很像绒毛效果 于是找了博客康康 https://zhuanlan.zhihu.com/p/256…

SpringBoot学习(4)(yml配置信息书写和获取)(SpringEL表达式语言)

目录 1、yml配置信息的书写和获取介绍 2、案例学习 &#xff08;1&#xff09;配置信息的书写注意事项 &#xff08;2&#xff09;配置信息的获取 &#xff08;3&#xff09;注解Value &#xff08;4&#xff09;相同层级的共同前缀&#xff0c;可以使用下面这个注解 3、…

ChatGPT、Claude 和 Gemini 在数据分析方面的合作(第 3 部分):机器学习的最佳 AI 助手

人工智能如何加速你的机器学习项目从特征工程到模型训练 人工智能如何加速你的机器学习项目从特征工程到模型训练 欢迎来到雲闪世界。 在本文中&#xff0c;我们将重点介绍这些 AI 工具如何协助机器学习项目。机器学习是数据科学的基石。虽然使用 LLM 模型完全自动化建模过程具…