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

前言


熟悉项目结构

  • 上一期我们快速了学会了如何新建一个项目和速通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 复制代码
<?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.MAINandroid.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:包含了应用模块的默认配置,如 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
  • 接下来博主会比较忙所以这一系列教程会以稍微短的形式分开完成,还请大家多多谅解
  • 如有错误欢迎指出
相关推荐
shuair1 小时前
idea 2023.3.7常用插件
java·ide·intellij-idea
太空漫步112 小时前
android社畜模拟器
android
WeiLai11124 小时前
CodeGPT 使用教程(适用于 VSCode)
ide·vscode·编辑器
海绵宝宝_5 小时前
【HarmonyOS NEXT】获取正式应用签名证书的签名信息
android·前端·华为·harmonyos·鸿蒙·鸿蒙应用开发
GEEK.攻城狮5 小时前
使用VSCODE开发C语言程序
c语言·ide·vscode
凯文的内存6 小时前
android 定制mtp连接外设的设备名称
android·media·mtp·mtpserver
天若子7 小时前
Android今日头条的屏幕适配方案
android
林的快手8 小时前
伪类选择器
android·前端·css·chrome·ajax·html·json
浪波湾8 小时前
汉化VScode
ide·vscode·编辑器
望佑8 小时前
Tmp detached view should be removed from RecyclerView before it can be recycled
android