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界面 一个安卓项目界面主要由以下几部分组成: 1.菜单栏:位于顶部,基本的各项菜单操作 2.项目结构:通常位于左侧,展示当前项目的目录结构 3.编辑窗口:通常位于中间,可以用于编…...

华为自反ACL实验
一、实验背景 做这个实验的原因是最近公司里上了三台小程序服务器,由于三台服务器的端口都映射出去了,领导要求A网段的三台服务器不能访问内网B,C网段,同时B、C网段内网用户可以访问A段的94、95、96服务器; 也就是PC4\…...
yml和xml分别代表什么
YML 和 XML 是两种不同的数据序列化格式,它们在软件开发和数据交换中有着广泛的应用: YAML (YAML Ain’t Markup Language): YAML 是一种用于数据序列化的人类可读语言。它被设计为易于阅读和编写,特别适合于配置文件。YAML 使用缩进来表示数…...
Qt多线程编程
在Qt中,多线程编程是一个常见的需求,特别是当你需要执行耗时的后台任务而不希望阻塞用户界面时。多线程编程它允许应用程序同时执行多个任务,从而提高性能和响应速度。Qt提供了一套完善的多线程支持,包括线程类(QThrea…...

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

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镜像都不能访问,目前亲测可用的docker镜像可用,并拉取mysql测试完成。 [缺点] docker search 查不到镜像的索引列表,只能手动查询索引目录(解决方案在最后)。 linux服务器vim打开镜像文件daemon.json vim /e…...

力扣——322. 零钱兑换
给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。 你可以认为每种硬币的数量是无限的。 示…...
.Net_比对Json文件是否一致
简介 该方法用于比较两个Json文件是否完全一致,仅考虑内容若两个文件中的内容只是顺序不一致,内容是一样的,那么也代表这两个文件是相等的 实现代码 调用 using CompareJsonFiles;Console.WriteLine(" 输入信息 ");Console.WriteL…...

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

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

用人话讲计算机:Python篇!(十二)正则运算+re模块
目录 一、正则表达式 (1)什么是正则表达式 (2)它的结构及使用 示例: 1.字符 . (←这里有个小点哦) 2.字符 | 3.字符 [ ] 4.字符^ 5.字符\d (3)补充ÿ…...

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

C# 探险之旅:第三十五节 - 类型class之抽象类 (Abstract Class) 和 抽象方法 (Abstract Method)
👋 嗨,勇敢的探险家们!欢迎再次踏上C#的神秘之旅。今天,我们要进入一片既神秘又充满无限可能的领域——抽象类与抽象函数的奇幻森林。想象一下,你是一名勇敢的骑士,要在这片森林里寻找传说中的“编程之宝”…...

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计算。 模拟: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根据模板勾选的内容查询
需求:根据模板列表勾选的字段查询列表数据 FreeMarker代码: /*** 分页列表查询** param ${entityName?uncap_first}* param pageNo* param pageSize* param req* return*///AutoLog(value "${tableVo.ftlDescription}-分页列表查询")ApiOp…...
深入理解 XPath:XML 和 HTML 文档的利器
XPath(XML Path Language)是一种用于在 XML 和 HTML 文档中定位节点的语言。它常用于 XML 解析、Web 数据抓取(如 Selenium 或 Scrapy)以及配置文件解析。本文将带你深入了解 XPath 的语法、功能及其在实际中的应用。 目录 一、什…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...