安卓应用开发入门:Kotlin 项目文件详解

刚开始接触安卓应用,生成第一个Kotlin语言的安卓项目后, 面对密密麻麻的文件和代码,感觉一头雾水。下面这篇文章来了解一下安卓项目中的核心文件,快速理解每个文件的作用及内容,也以此记录我的学习之路

一、创建项目

我们通过在File --> New --> New Project,可以选择Empty Views Actvity创建一个新项目,点击next,再命名为MyNewProject ,最后点击finish,即可成功创建

项目创建完成后,我们可以看到这个列表,这是 Android Studio里项目视图的切换选项,不同选项决定左侧项目面板展示文件的分类 / 筛选逻辑,可以帮开发者按需查看项目内容,最常用选择Android 。按安卓开发的 “组件逻辑” 整理文件:把 Java/Kotlin 代码、资源文件(res)、清单文件(AndroidManifest.xml)等,用更贴近安卓开发流程的方式分类展示。比如 java 目录放代码、res 目录放资源、manifests 放清单文件,隐藏了一些对安卓开发 “非必要” 的目录细节,新手友好,日常开发用得最多

二、Gradle 相关文件

Gradle Scripts 目录是构建 “灵魂”,这些文件控制着项目编译、依赖、打包等核心流程。

1. build.gradle.kts (Project: MyNewProject)

    项目级构建脚本,管整个项目的 “大框架”:

  • 定义 Gradle 插件版本(比如安卓构建插件、Kotlin 插件 ),所有模块共享这些基础配置。

  • 配置 全局依赖仓库(像 google()mavenCentral() ),告诉 Gradle 从哪下载库。

作用:统一项目构建环境,确保所有模块用相同的插件、仓库,改全局配置(比如升级构建插件)时,改这里就行

2. build.gradle.kts (Module :app)

     模块级(app 模块)构建脚本,管单个模块(这里是 app 模块,即最终打包成 APK 的模块 )的细节:

  • 配置 模块专属信息:应用 ID(applicationId)、编译 SDK(compileSdk)、版本号(versionCode/versionName )。

  • 声明 模块依赖(比如 implementation("androidx.core:core-ktx:1.12.0") ),控制这个模块要用哪些库。

  • 定义 构建变体buildTypes ):比如 release 包要混淆、debug 包开调试,都在这配置。

这些代码都是自动生成的,虽然语法结构上看上去可能有点难理解,但是我们如果忽略语法结构,只看最关键的部分,其实还是很好懂的。

作用:模块的 “个性化” 构建全靠它,不同模块(比如 app 和 library 模块 )的差异配置,都写在各自的 build.gradle.kts 里

3. proguard-rules.pro (ProGuard Rules for ":app")

    代码混淆规则文件,配合 build.gradle.kts 里的 minifyEnabled true 使用:

  • 告诉 ProGuard 哪些代码要保留(比如自定义控件、反射用到的类,否则混淆后会崩溃 )。

  • 哪些代码可以 压缩、混淆、优化(比如第三方库的冗余代码,减少 APK 体积 )。

作用:上架应用前,靠它保护代码不被轻易反编译,同时尽可能压缩 APK 体积,但配错规则会导致应用崩溃,得仔细调试。

4.  gradle.properties (Project Properties)

    项目级属性配置,存一些 “键值对” 参数,给 Gradle 构建脚本用:

  • 常用配置比如 内存限制org.gradle.jvmargs=-Xmx2048m ,加大 Gradle 编译时的内存,避免内存不足报错 )。

  • 开启 守护进程org.gradle.daemon=true ,让 Gradle 后台常驻,加速后续构建 )。

作用:不用改构建脚本代码,通过配置参数微调 Gradle 行为,比如加速编译、解决内存不足问题

5. gradle-wrapper.properties (Gradle Version)

    Gradle wrapper 配置,控制项目用哪个版本的 Gradle:

  • distributionUrl 指定 Gradle 发行版的下载地址(比如 https\://services.gradle.org/distributions/gradle-8.4-bin.zip )。

  • 团队协作时,保证所有人用 相同版本的 Gradle,避免因版本差异导致构建问题。

作用:统一 Gradle 版本,新人拉取项目时,Gradle wrapper 会自动下载配置好的版本,不用手动装对应 Gradle。

6. libs.versions.toml (Version Catalog)

版本目录文件(Gradle 7.0+ 支持 ),专门管理 依赖版本,让 build.gradle.kts 更简洁:

把重复的版本号、库坐标抽到这里,方便统一维护。

7. local.properties (SDK Location)

本地环境配置,存一些 “只在你电脑生效” 的路径:

  • 最核心的是 安卓 SDK 路径sdk.dir=/Users/yourname/Library/Android/sdk ),Gradle 编译时要靠它找安卓 SDK 里的工具、平台文件。

  • 一般 不用手动改,Android Studio 会自动生成,换电脑 / SDK 路径变了,AS 也会自动更新。

8. settings.gradle.kts (Project Settings)

项目模块配置,告诉 Gradle 项目里有哪些模块:

  • 比如 include(":app") 表示包含 app 模块,新增模块(如 :library )时,要加 include(":library")

  • 还能配置 仓库别名、项目名称等全局设置。

二、AndroidManifest.xml

AndroidManifest.xml是整个安卓应用的配置文件(注册表),它描述了应用的组件(活动、服务、广播接收器等)、权限、应用的元数据等重要信息。 

三、App 模块核心代码文件

        MainActivity.kt是安卓应用的主活动文件,通常也是应用启动后显示的第一个界面。在 Kotlin 语言编写的安卓项目中,它的基本结构如下:

package com.example.mynewproject

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. package声明了该类所在的包名,用于组织和管理代码

2.import语句导入了需要使用的类。MainActivity类继承自AppCompatActivity,它是安卓中用于创建活动的基础类。

3.onCreate方法是活动生命周期中的一个重要方法,当活动被创建时调用。

4.setContentView(R.layout.activity_main)这行代码的作用是将activity_main.xml布局文件与当前活动关联起来,这样应用启动时就会显示该布局对应的界面。

  • override fun onCreate(savedInstanceState: Bundle?):重写了 AppCompatActivity 中的 onCreate 方法,该方法在活动被创建时调用,是活动初始化的关键入口。​
  • super.onCreate(savedInstanceState):调用父类的 onCreate 方法,确保父类的初始化逻辑得以执行,这是重写生命周期方法时必须的操作,以保证安卓系统的正常运行机制。​
  • enableEdgeToEdge():调用该函数启用边缘到边缘显示效果,使应用内容铺满整个屏幕,增强用户的视觉体验。​
  • setContentView(R.layout.activity_main):将 activity_main.xml 布局文件与当前活动关联起来,告诉安卓系统在该活动显示时,使用此布局文件定义的界面结构和视图元素。​
  • ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->... }:​
  • 1. findViewById(R.id.main):通过资源 ID main 找到对应的视图
  • 2. ViewCompat.setOnApplyWindowInsetsListener:为找到的视图设置窗口内边距应用监听器。当窗口内边距(如状态栏、导航栏高度变化)发生改变时,该监听器会被触发。
  • 3.​val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()):从 WindowInsetsCompat 对象中获取系统栏(即状态栏和导航栏)占用的空间大小。​
  • 4.v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom):根据获取到的系统栏内边距,为视图设置相应的内边距,确保视图内容不会被状态栏和导航栏遮挡。​
  • 5. insets:返回 WindowInsetsCompat 对象,以便系统继续处理后续的内边距相关逻辑 

四、资源文件

1. res/layout 目录​

res/layout目录存放应用的布局文件,默认有activity_main.xml文件。布局文件使用 XML 格式来定义界面的视图结构和外观。例如:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

这里定义了一个ConstraintLayout作为根布局,其中包含一个TextView。通过各种属性设置,如android:layout_width、android:layout_height定义视图的尺寸,app:layout_constraint系列属性来约束视图在布局中的位置。

2. res/values 目录​

res/values目录用于存放各种资源值的定义文件,比如字符串(strings.xml)、颜色(colors.xml)、尺寸(dimens.xml)等。​

strings.xml文件用于定义应用中使用的字符串,方便进行多语言适配和统一管理,示例如下:

<resources>
    <string name="app_name">MyNewProject</string>
</resources>

colors.xml文件用于定义颜色资源:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="black">#FF000000</color>
    <color name="white">#FFFFFFFF</color>
</resources>

还有两种theme.xml文件用于定义主题资源(其中night为深色夜间主题):

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Base.Theme.MyNewProject" parent="Theme.Material3.DayNight.NoActionBar">
        <!-- Customize your light theme here. -->
        <!-- <item name="colorPrimary">@color/my_light_primary</item> -->
    </style>

    <style name="Theme.MyNewProject" parent="Base.Theme.MyNewProject" />
</resources>

3. res/drawable 目录​

res/drawable目录用于存放图形资源,如图片、形状定义等。可以将图片文件(如.png、.jpg)放在这里,也可以通过 XML 文件定义一些形状、选择器等图形。

总结:

以上这些就是我们需要了解的安卓应用项目的文件及每个的作用。理解这些文件的作用和原理,也是我们学习安卓开发的必经之路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值