当前位置: 首页 > news >正文

AndroidStudio——安卓项目结构与文件介绍

一、AndroidStudio界面

一个安卓项目界面主要由以下几部分组成:

1.菜单栏:位于顶部,基本的各项菜单操作

2.项目结构:通常位于左侧,展示当前项目的目录结构

3.编辑窗口:通常位于中间,可以用于编辑项目中的各种文件,也是我们平时使用最为频繁的窗口

4.状态窗口:通常位于底部,包括logcat、terminal、build等。用于展示编译、运行时的各种信息

此外,主界面的右侧有时还会展示虚拟设备、gradle配置等信息,这些一般由开发人员自定义。

二、安卓项目目录解析

1.app文件夹

一些较为重要的文件夹和文件包括: app目录:安卓应用程序的主要目录,包含了应用程序的代码、资源和配置文件

app/src/main/java/:主要的Kotlin代码文件,包括Activity、Fragment、Adapter等,以及其它自定义的类

app/src/main/res/:各种资源文件,如layout目录存放布局文件、values目录存放字符串、颜色值等资源文件

app/src/main/AndroidManifest.xml:定义了应用程序的组件和权限等信息

2.AndroidManifest.xml:

一些较为重要的xml节点包括:

android:label="@string/app_name":指定应用程序的显示名称,引用了资源中的字符串

android:roundIcon=“@mipmap/ic_launcher_round”:指定应用程序的图标

<activity>:描述了应用程序中的一个活动(Activity),即与用户交互的界面

android:name=“.MainActivity”:该Activity的名称,对应src下的文件

android:exported="true":指示这个活动是否可以被其他应用程序调用。

<intent-filter>:指定了与这个活动相关的意图过滤器,即哪些意图会触发这个活动的启动。

<action android:name="android.intent.action.MAIN" />:指定了这个活动是应用程序的主入口点。

<category android:name="android.intent.category.LAUNCHER" />:指定了这个活动是启动器类别,即应用程序的启动图标会指向这个活动。

上述内容确定了安卓的源代码、静态资源等内容。如果希望将这些“代码”变成可以在安卓系统中编译的“程序”,则还需要编译。与JAVA应用编译使用javac不同,编译安卓程序需要自动构建工具 – Gradle。 在使用Gradle进行编译之前需要进行配置,下面介绍和项目编译与构建相关的文件。

3.settings.gradle

该文件为gradle的配置文件。主要说明了本项目的名称,所包含的子项目,以及本项目仓库的位置等。如下述默认的配置文件规定了仓库位置是google和mavenCentral等,以及项目名称是“My Application”,包含一个子项目为app

4.build.gradle

在新建的安卓工程中,一般会有两个build.gradle。在主目录/根目录下的build.gradle也是gradle的配置文件,主要说明了本项目所需的依赖包、Kotlin/SDK的版本等信息。该配置为全局共享的配置选项,应用于所有模块。

5.app/build.gradle

在新建的安卓工程中,一般会有两个build.gradle。在app目录下的build.gradle定义了本模块的配置选项,如相应依赖包只适用于本模块。该配置文件的通常结构如下所示。

android 部分包含了 Android 构建的配置,其中常见的配置项包括:

(1)compileSdkVersion 和 buildToolsVersion:编译 SDK 版本和构建工具版本。

(2)defaultConfig:默认配置,包括应用程序的一些基本信息,如应用 ID、最小 SDK 版本、目标 SDK 版本、版本号等。

(3)buildTypes:构建类型,通常包括 debug 和 release 两种。

dependencies 部分包含了应用程序的依赖项,通常使用 implementation 关键字来声明依赖关系。其中,常见的依赖项包括:

(1)AndroidX 库:包括了 Jetpack 组件,如 appcompat, constraintlayout, lifecycle 等

(2)第三方库:例如 Google Material Design 组件等。

6.build.gradle 与 app/build.gradle 的区别:

(1)build.gradle 是顶层构建文件,配置了整个项目的通用构建选项和依赖项,而不是特定于某个模块。        

(2)app/build.gradle 是一个模块级别的构建文件,主要配置了该模块特定的构建选项和依赖项。

通过将构建逻辑拆分到不同的文件中,可以使项目的构建脚本更加清晰、易读和易于维护。这种模块化的构建配置方式允许开发者更灵活地管理项目的不同部分。

总的来说,settings.gradle 文件是 Gradle 构建的入口点,用于定义项目结构;接着是根项目的 build.gradle 文件,用于定义全局的构建配置;最后是每个模块的 build.gradle 文件,用于配置该模块的构建行为和设置。Gradle 在执行构建过程时会按照这个顺序逐步加载和执行这些文件,以完成整个项目的构建任务。

在多模块项目中,模块之间可能存在依赖关系,其中某些模块依赖于其他模块的输出。因此,必须确保依赖模块在被依赖模块之前被构建。正确的编译顺序可以确保所有依赖关系都被满足,并且每个模块都能够使用它所依赖的内容。

三、Android开发相关概念

1.Gradle

简单来说,Gradle是运行于JVM中的一个用于自动构建项目的程序,目前安卓将其作为官方的构建程序,且Springboot也逐渐支持Gradle。Gradle根据脚本中的内容逐步构建项目。在安卓项目中,这个脚本一般为build.gradle

为什么要使用项目构建工具?

2.JDK

Kotlin运行于JAVA虚拟机JVM中,因此需要确保本机已安装JDK,且告知AS正确的JDK路径。可以在终端中查看目前注册在环境变量中的JDK版本。

若希望查看所有可用的JDK版本,或修改本项目对应的JDK版本,可以进入file – project structure,修改对应的选项。

此外,还可以在app的build.gradle配置中确定JDK的版本。

即在android 元素中添加:

3.SDK

JDK提供了Java语言的基本工具和库,而Android SDK则提供了专门用于Android平台开发的工具和资源。在Android开发中,通常需要同时使用JDK和Android SDK来完整地进行应用程序开发:

(1)Android SDK是专门为Android平台开发的工具包,包含了用于构建Android应用程序的一系列库。

(2)Android SDK还提供了开发Android应用程序所需的所有资源,包括Android虚拟设备模拟器(Android Emulator)、调试工具、构建工具、Android API库等。它还包括与Android设备通信的工具,以及用于处理资源文件、图形等的工具。

在AS的tools中选择SDK manager,可以查看目前已经安装的SDK。比如勾选Android 9.0,然后点击apply,AS即会自动下载SDK。

4.NDK和CMake

配置好JDK和SDK就可以进行大部分安卓开发了。但是有时候我们可能需要和底层硬件交互,或者调用C/C++库。此时就需要NDK (Native Development Kit) 与 Cmake的支持。我们可以在SDK tools添加所需要的版本。

四、安卓页面布局

1.基本概念

在安卓应用(以及大部分的前端)中,向用户展示的界面是由“布局”和“控件”组成的。可以认为,控件相当于建筑中的砖瓦,布局相当于建筑整体框架。

2.View视图

从安卓中的类的角度来看,控件就是view类的对象,布局就是viewgroup类的对象。如下所示,viewgroup中可以包含view,也可以包含viewgroup。

3.页面布局编写方式

在app的res/layout文件夹中放置了类型为XML的布局文件。这么做的目的是为了将安卓应用的前后端开发分离。      

此外,XML的全称是可扩展标记语言(eXtensible Markup Language),与超文本标记语言(HyperText Markup Language)类似,都是一种标记语言。标记语言结构清晰,易于阅读和维护。通过XML文件,开发者可以清晰地看到界面的结构和组件的属性设置,从而更容易理解和修改界面布局。

一个hello world的默认布局如下:

其中的ConstraintLayout是ViewGroup类的对象。TextView是View的对象。

也可以通过Kotlin代码编写布局,实现一些动态修改布局的效果。但是这种方法使用的较少,因为无法剥离前后端代码。

4.常见的页面布局:

布局的通用属性:

(1)android:id 该布局的唯一标识。可在build/intermediates/runtime_symbol_list/debug/R.txt中找到id对应的int值

(2)android:layout_width

(3)android:layout_height

(4)android:background

(5)android:layout_margin

(6)android:padding

5.LinearLayout线性布局

在layout文件夹中创建新的layout资源文件:

6.RelativeLayout相对布局

相对布局中,每个控件会“相对于”另一个控件摆放。

7.Grid Layout网格布局

网格布局中,控件被放置在一个二维网格中。适用于展示“键盘”效果

(1)网格布局中,使用 android:columnCount 和 android:rowCount 属性来指定网格布局的列数和行数;

(2)子控件中,使用 android:layout_row 和 android:layout_column 属性为子视图指定行和列。(如果不指定这两个属性,就按照顺序排列)

(3)子控件中,使用 layout_columnWeight 和 layout_rowWeight 属性来确定每个控件所占的比重。例如如果一个2*2的网格布局中,所有控件的比重都为1,则将均分父控件。

(4)子控件中,使用 layout_columnSpan 和 layout_rowSpan 属性来确定每个控件所占的比重。

8.Frame Layout 帧布局

帧布局中,界面中放置单个子视图或多个子视图,并且可以通过堆叠的方式来显示它们。在帧布局中,后添加的视图会覆盖在先添加的视图之上。

帧布局的属性:

android:foreground

android:foregroundGravity

9.Constraint Layout 约束布局

约束布局使用约束(constraints)来定义视图之间的位置关系,而不依赖于视图的相对位置或者固定位置。这种方式使得布局更加灵活,可以适应不同屏幕尺寸和方向的变化

相关文章:

AndroidStudio——安卓项目结构与文件介绍

一、AndroidStudio界面 一个安卓项目界面主要由以下几部分组成&#xff1a; 1.菜单栏&#xff1a;位于顶部&#xff0c;基本的各项菜单操作 2.项目结构&#xff1a;通常位于左侧&#xff0c;展示当前项目的目录结构 3.编辑窗口&#xff1a;通常位于中间&#xff0c;可以用于编…...

华为自反ACL实验

一、实验背景 做这个实验的原因是最近公司里上了三台小程序服务器&#xff0c;由于三台服务器的端口都映射出去了&#xff0c;领导要求A网段的三台服务器不能访问内网B&#xff0c;C网段&#xff0c;同时B、C网段内网用户可以访问A段的94、95、96服务器&#xff1b; 也就是PC4\…...

yml和xml分别代表什么

YML 和 XML 是两种不同的数据序列化格式&#xff0c;它们在软件开发和数据交换中有着广泛的应用&#xff1a; YAML (YAML Ain’t Markup Language): YAML 是一种用于数据序列化的人类可读语言。它被设计为易于阅读和编写&#xff0c;特别适合于配置文件。YAML 使用缩进来表示数…...

Qt多线程编程

在Qt中&#xff0c;多线程编程是一个常见的需求&#xff0c;特别是当你需要执行耗时的后台任务而不希望阻塞用户界面时。多线程编程它允许应用程序同时执行多个任务&#xff0c;从而提高性能和响应速度。Qt提供了一套完善的多线程支持&#xff0c;包括线程类&#xff08;QThrea…...

springboot438校园志愿者管理系统(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统校园志愿者管理系统信息管理难度大&#xff0c;容错率低&…...

PostgreSQL 常用运维SQL整理

一、查询并杀会话 -- 查询会话 select pid,usename,client_addr,client_port,query_start,query,wait_event from pg_stat_activity; -- 杀会话 select pg_terminate_backend(pid号); -- 使用如下命令自动生成杀会话语句 select datid,datname,pid,usesysid,usename,applicat…...

Debezium Oracle CTAS 解析器实现:基于 ANTLR 的 CREATE TABLE AS SELECT 语句解析

Debezium Oracle CTAS 解析器实现:基于 ANTLR 的 CREATE TABLE AS SELECT 语句解析 本文详细介绍了 Debezium Oracle 连接器中如何解析 CREATE TABLE AS SELECT (CTAS) 语句,通过具体的实现代码帮助读者理解 ANTLR 监听器在复杂 SQL 解析中的应用。 文章目录 Debezium Oracle…...

从零开始学docker(五)-可用的docker镜像

最近docker镜像都不能访问&#xff0c;目前亲测可用的docker镜像可用&#xff0c;并拉取mysql测试完成。 [缺点] docker search 查不到镜像的索引列表&#xff0c;只能手动查询索引目录&#xff08;解决方案在最后&#xff09;。 linux服务器vim打开镜像文件daemon.json vim /e…...

力扣——322. 零钱兑换

给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。 你可以认为每种硬币的数量是无限的。 示…...

.Net_比对Json文件是否一致

简介 该方法用于比较两个Json文件是否完全一致&#xff0c;仅考虑内容若两个文件中的内容只是顺序不一致&#xff0c;内容是一样的&#xff0c;那么也代表这两个文件是相等的 实现代码 调用 using CompareJsonFiles;Console.WriteLine(" 输入信息 ");Console.WriteL…...

科研笔记:ARR 与 ACL rolling

1 ARR 介绍 ARR 提供 评审服务 —— 仅限评审 —— 对于提交的论文。评审不会针对特定会议/场所&#xff0c;但评审标准与传统会议的主会场长文或短文提交要求相同&#xff08;如 ACL 或其他由 ACL 主办的重要会议&#xff09; 2 提交论文进行 ARR 评审 提交截止日期 每两个…...

【2024】Camunda常用功能基本详细介绍和使用-上 (1)

这里写目录标题 前言一、 介绍基本概念介绍1.BPMN2.Form3.DMN 二、Camunda使用1、下载安装1.1、camunda-modeler&#xff1a;BPMN绘画工具1.2、camunda-bpm-run&#xff1a;web端控制页面 2、创建流程2.1、部署一个基础流程2.2、添加用户任务2.2.1、绑定表单2.2.1.1、Generated…...

用人话讲计算机:Python篇!(十二)正则运算+re模块

目录 一、正则表达式 &#xff08;1&#xff09;什么是正则表达式 &#xff08;2&#xff09;它的结构及使用 示例&#xff1a; 1.字符 . &#xff08;←这里有个小点哦&#xff09; 2.字符 | 3.字符 [ ] 4.字符^ 5.字符\d &#xff08;3&#xff09;补充&#xff…...

使用create-react-app创建工程时报错处理

1&#xff1a;全局安装create-react-app npm install -g create-react-app 2&#xff1a;切换到项目要创建的目录下 cd /d G:\vsCode_project\react 3&#xff1a;使用脚手架命令创建工程 create-react-app 项目名 项目名命名要遵循npm包命名规范&#xff1a;数字、小写字…...

C# 探险之旅:第三十五节 - 类型class之抽象类 (Abstract Class) 和 抽象方法 (Abstract Method)

&#x1f44b; 嗨&#xff0c;勇敢的探险家们&#xff01;欢迎再次踏上C#的神秘之旅。今天&#xff0c;我们要进入一片既神秘又充满无限可能的领域——抽象类与抽象函数的奇幻森林。想象一下&#xff0c;你是一名勇敢的骑士&#xff0c;要在这片森林里寻找传说中的“编程之宝”…...

qt-C++笔记之父类窗口、父类控件、对象树的关系

qt-C笔记之父类窗口、父类控件、对象树的关系 code review! 参考笔记 1.qt-C笔记之父类窗口、父类控件、对象树的关系 2.qt-C笔记之继承自 QWidget和继承自QObject 并通过 getWidget() 显示窗口或控件时的区别和原理 3.qt-C笔记之自定义类继承自 QObject 与 QWidget 及开发方式…...

Cisco Packet Tarcer配置计网实验笔记

文章目录 概要整体架构流程网络设备互连基础拓扑图拓扑说明配置步骤 RIP/OSPF混合路由拓扑图拓扑说明配置步骤 BGP协议拓扑图拓扑说明配置步骤 ACL访问控制拓扑图拓扑说明配置步骤 HSRP冗余网关拓扑图拓扑说明配置步骤 小结 概要 一些环境配置笔记 整体架构流程 网络设备互连…...

使用torch模拟 BMM int8量化计算。

使用torch模型BMM int8计算。 模拟&#xff1a;BMM->softmax->BMM 计算流程 import torch import numpy as np torch.manual_seed(777) def int8_quantize_per_token(x: torch.Tensor, axis: int -1, attnsFalse):if x.dtype ! torch.float32:x x.type(torch.float32)…...

【FreeMarker】实现生成Controller根据模板勾选的内容查询

需求&#xff1a;根据模板列表勾选的字段查询列表数据 FreeMarker代码&#xff1a; /*** 分页列表查询** param ${entityName?uncap_first}* param pageNo* param pageSize* param req* return*///AutoLog(value "${tableVo.ftlDescription}-分页列表查询")ApiOp…...

深入理解 XPath:XML 和 HTML 文档的利器

XPath&#xff08;XML Path Language&#xff09;是一种用于在 XML 和 HTML 文档中定位节点的语言。它常用于 XML 解析、Web 数据抓取&#xff08;如 Selenium 或 Scrapy&#xff09;以及配置文件解析。本文将带你深入了解 XPath 的语法、功能及其在实际中的应用。 目录 一、什…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...