Android Studio开发(一) 构建项目
1、项目创建测试
1.1 前言
Android Studio 是由 Google 推出的官方集成开发环境(IDE),专门用于开发 Android 应用程序。
-
基于 IntelliJ IDEA: Android Studio 是基于 JetBrains 的 IntelliJ IDEA 开发的,提供了丰富的功能和插件支持,使开发 Android 应用更加高效和便捷。
-
功能丰富: Android Studio 提供了许多功能丰富的工具,如代码编辑器、调试器、布局编辑器、性能分析工具等,帮助开发者快速构建高质量的 Android 应用。
-
Gradle 构建系统: Android Studio 使用 Gradle 作为构建系统,使项目配置和构建更加灵活和可控,可以方便地管理依赖关系、资源文件等。
-
模拟器和调试器: Android Studio 集成了 Android 模拟器和调试器,开发者可以方便地在模拟器或真机上调试和测试应用程序。
-
布局编辑器: Android Studio 提供了强大的布局编辑器,支持可视化设计界面和 XML 布局文件的编辑,帮助开发者快速构建用户界面。
-
版本控制: Android Studio 集成了版本控制系统,如 Git,使团队协作开发更加方便,可以轻松管理代码版本和协作开发。
1.2 新建项目
选择file-->New-->New Project进行项目创建,选用Empty Activity:

选择编程语言和兼容的最低安卓版本后点击finish即可:

创建完成后的项目如图所示:

1.3 运行项目
在如图所示的位置点击下拉选择Device Manager:

进行虚拟设备创建,首先选择设备的外观信息:

然后选择虚拟设备的Android版本,并进行下载:

最后选择设备名称和屏幕的放置形式:

点击运行按钮可以查看新建工程的运行效果:

展示运行界面:

2、项目文件介绍
新建项目的目录结构大致如下:

2.1 app目录
2.1.1 manifests
manifests:包含应用程序的清单文件(AndroidManifest.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"><applicationandroid:allowBackup="true" // 允许备份android:dataExtractionRules="@xml/data_extraction_rules" // 数据提取规则android:fullBackupContent="@xml/backup_rules" // 完全备份内容android:icon="@mipmap/ic_launcher" // 应用图标android:label="@string/app_name" // 应用名称android:supportsRtl="true" // 支持RTL布局android:theme="@style/Theme.MyApplication" // 应用主题tools:targetApi="31"> // 工具:目标API版本为31<activityandroid: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>
2.1.2 java
包含Java代码文件,包括应用程序的源代码文件,按照包名结构组织。
2.1.3 res
包含资源文件:
-
drawable:- 包含图形资源文件,如图片(.png、.jpg等)。
- 可以按照不同分辨率(hdpi、mdpi、xhdpi等)存放不同版本的图片。
-
layout:- 包含布局文件,定义应用程序的界面布局。
- 使用XML文件编写,描述UI元素的位置、大小和交互方式。
-
values:- 包含各种资源值文件,如字符串(strings.xml)、颜色(colors.xml)、尺寸(dimens.xml)等。
- 可以在代码中引用这些值,实现资源的重用和统一管理。
-
mipmap:- 包含应用程序图标资源文件。
- 用于存放应用程序的图标,支持不同分辨率的图标。
-
xml:
- 用于存放应用程序的配置信息
2.2 gradle script
2.2.1 build.gradle (Project)
定义了整个项目的构建配置,包括项目的构建脚本依赖关系、全局配置等。
2.2.2 build.gradle (Module:app)
定义了当前模块(app模块)的构建配置,包括应用程序的依赖关系、版本信息等。
plugins {// 应用com.android.application插件,用于构建Android应用程序id 'com.android.application'
}android {// 定义应用程序的命名空间namespace 'com.example.myapplication'// 编译SDK的版本compileSdk 33defaultConfig {// 应用程序的包名applicationId "com.example.myapplication"// 最低支持的SDK版本minSdk 24// 目标SDK版本targetSdk 33// 版本号versionCode 1// 版本名称versionName "1.0"// 测试运行器testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}buildTypes {release {// 是否启用代码混淆minifyEnabled false// 混淆规则文件proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileOptions {// 源码和目标代码的兼容性sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}
}dependencies {// AppCompat库implementation 'androidx.appcompat:appcompat:1.4.1'// Material Design组件库implementation 'com.google.android.material:material:1.5.0'// ConstraintLayout库implementation 'androidx.constraintlayout:constraintlayout:2.1.3'// 单元测试库testImplementation 'junit:junit:4.13.2'// Android测试库androidTestImplementation 'androidx.test.ext:junit:1.1.3'// Espresso测试库androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
2.2.3 proguard-rules.pro
用于配置 ProGuard 的混淆规则,用于在构建 Release 版本时对代码进行混淆,以保护代码安全并减小 APK 大小。
2.2.4 gradle.properties
该文件用于存储Gradle构建脚本中使用的属性值。
2.2.5 gradle-wrapper.properties
Gradle包装器的配置文件,用于指定Gradle的版本等信息。
2.2.6 local.properties
存储本地环境相关的配置信息,通常包括 SDK 路径、密钥等。
2.2.7 settings.gradle
定义了项目的模块信息,包括模块的名称、路径等。
3、总结
本文讲解了Android Studio创建工程的一般过程,使用模拟器运行新建项目;讲解了项目的目录结构。
相关文章:
Android Studio开发(一) 构建项目
1、项目创建测试 1.1 前言 Android Studio 是由 Google 推出的官方集成开发环境(IDE),专门用于开发 Android 应用程序。 基于 IntelliJ IDEA: Android Studio 是基于 JetBrains 的 IntelliJ IDEA 开发的,提供了丰富的功能和插件…...
stm32flash模拟eeprom
stm32f103CB的flash是128k(起始地址是 0x08000000 到 0x0801FFFF) falsh的末地址是0x801FFFF,即倒数一页是0x801FBFF(1页按照1kB1024B来算) stm32f103参考手册stm32f103cb.pdf stm32的FLASH分为主存储块和信息块&…...
多模态MLLM都是怎么实现的(2)-DDPM
上一篇的链接:多模态MLLM都是怎么实现的(2) (qq.com) 上上篇的链接:多模态MLLM都是怎么实现的(1) (qq.com) 在第一篇我们简单介绍了一下多模态训练的原理,包括clip,第二篇正好Sora横空出世,也让我就Dit做了一下抛砖引玉,顺便讲了VAE和ViT的部分,上节课我说过, DiT…...
QT----写完的程序打包为APK在自己的手机上运行
目录 1、qt安装android组件2、打开qt配置Android 环境3、手机打开开发者模式,打开usb调试,连接电脑4、运行代码 1、qt安装android组件 qtcreater–工具-QTMaintenaceTool-startMaintenaceTool—登陆—添加或修改组件—找到android,安装 若是…...
Windows C++ SecurityImpersonation级别:线程临时采用另一个用户(客户端)的身份进行操作的能力
SecurityImpersonation 是 Windows 操作系统中安全模型的一个级别,用于描述一个线程临时采用另一个用户(客户端)的身份进行操作的能力。这是Windows安全性的一个核心概念,允许服务或进程在执行特定任务时拥有与请求该服务的用户相…...
重学SpringBoot3-yaml文件配置
重学SpringBoot3-yaml文件配置 引言YAML 基本语法YAML 数据类型YAML 对象YAML 数组复合结构标量引用 YAML 文件结构Spring Boot 中的 YAML 配置注意事项总结参考 引言 YAML(YAML Ain’t Markup Language)是一种常用于配置文件的数据序列化格式ÿ…...
【管理咨询宝藏资料33】某头部咨询公司组织效能提升模型方案
本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏资料33】某头部咨询公司组织效能提升模型方案 【关键词】战略规划、组织效能、管理咨询 【文件核心观点】 - 通过长期行业积累和市场洞察&#…...
特征值和特征向量及其在机器学习中的应用
特征值和特征向量是线性代数中的概念,用于分析和理解线性变换,特别是由方阵表示的线性变换。它们被用于许多不同的数学领域,包括机器学习和人工智能。 在机器学习中,特征值和特征向量用于表示数据、对数据执行操作以及训练机器学…...
【Vue3】Ref 和 ShallowRef 的区别
这里写自定义目录标题 什么是 Ref什么是 ShallowRef区别对比示例代码 什么是 Ref Ref 是 Vue 3 中的一个新的基本响应式数据类型,它允许我们包装任意的 JavaScript 值,并且在数据变化时发出通知。Ref 提供了一个 .value 属性来访问其内部的值࿰…...
Linux - 进程概念
1、冯诺依曼体系结构 我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系; 截至目前,我们所认识的计算机,都是有一个个的硬件组件组成: 输入单元:…...
H5小游戏,象棋
H5小游戏源码、JS开发网页小游戏开源源码大合集。无需运行环境,解压后浏览器直接打开。有需要的,私信本人,发演示地址,可以后再订阅,发源码,含60+小游戏源码。如五子棋、象棋、植物大战僵尸、开心消消乐、扑鱼达人、飞机大战等等 <!DOCTYPE html PUBLIC "-//W3C/…...
LLM春招准备(1)
llm排序 GPT4V GPT-4V可以很好地理解直接绘制在图像上的视觉指示。它可以直接识别叠加在图像上的不同类型的视觉标记作为指针,例如圆形、方框和手绘(见下图)。虽然GPT-4V能够直接理解坐标,但相比于仅文本坐标,GPT-4V在…...
网络安全知识点总结
1、常见的网络攻击有哪些? 答:(1)口令攻击:也就是窃取用户的账户和密码,普通用户习惯于设置简单的密码,且多个系统用同一套密码,黑客可以使用字典攻击(常用密码库&#…...
服务完善的智能组网系统?
智能组网是现代信息技术的重要组成部分,它通过将各种设备和计算机连接起来,实现高效的数据传输和远程通信。在一个全球化、高度互联的时代背景下,智能组网已经成为了各行各业的必需品。传统的组网方案往往面临着许多问题和挑战。为了解决这些…...
VS2022如何添加行号?(VS2022不显示行号解决方法)
VS2022不显示行号解决方法 VS2022是非常好用的工具,很多同学在初学C/C的时候,都会安装,默认安装好VS2022后,写代码时,在编辑框的窗口左边就有显示行号,如下图所示: 但是有些同学安装好后&#…...
125.验证回文字符串
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s,如果它是 回文串 ,返回 true ;否则&#…...
Spring Boot的启动流程(个人总结,仅供参考)
SpringBoot应用程序的启动流程主要包括初始化SpringApplication和运行SpringApplication两个过程。 1.初始化SpringApplication包括配置基本的环境变量、资源、构造器和监听器,初始化阶段的主要作用是为运行SpringApplication实例对象启动环境变量准备以及进行必要的…...
用BIO实现tomcat
一、前言 本课程的难度较高,需要将Servlet原理和IO课程全部学完。 二、当前项目使用方式 (1).自定义servlet 自定义servlet需要实现WebServlet并且实现name和urlMapping 重启进行访问 http://localhost:8090/myServlet (2).自定义html 重启进行访问 http://loc…...
JS逆向进阶篇【去哪儿旅行登录】【下篇-逆向Bella参数JS加密逻辑Python生成】
目录: 每篇前言:引子——本篇目的1、 代码混淆和还原(1)单独替换:(2)整个js文件替换: 2、算法入口分析3、 深入分析(0)整体分析:(1&am…...
【机器学习】生成对抗网络GAN
概述 生成对抗网络(Generative Adversarial Network,GAN)是一种深度学习模型架构,由生成器(Generator)和判别器(Discriminator)两部分组成,旨在通过对抗训练的方式生成逼…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
