刚开始接触安卓应用,生成第一个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 文件定义一些形状、选择器等图形。
总结:
以上这些就是我们需要了解的安卓应用项目的文件及每个的作用。理解这些文件的作用和原理,也是我们学习安卓开发的必经之路