【安卓基础1】初识Android
🏆作者简介:|康有为| ,大四在读,目前在小米安卓实习,毕业入职。
🏆安卓学习资料推荐:
视频:b站搜动脑学院 视频链接 (他们的视频后面一部分没再更新,看看前面也挺好的)
书籍:《第一行代码》(第3版) by 郭霖 (z-lib.org)
思维导图: https://www.processon.com/view/link/62427cb2e0b34d0730e20e00(来自动脑学院)
🏆持续学习安卓知识中,共勉,我的【安卓】专栏中还有其他文章,持续更新中,欢迎关注
目录
一、创建HelloWorld程序
二、分析HelloWorld程序
目录分析
HelloWorld程序怎么启动的?
1.看配置文件AndroidManifest.xml
2.看MainActivity
3.看activity_main.xml
三、详解项目中的资源
如何使用资源
四、详解Gradle
Gradle介绍
自动化构建工具有哪些?
build.gradle
五、日志
六、AndroidStudio 操作
一、创建HelloWorld程序
前提:下载好了AndroidStudio(我用的是刺猬版)
直接 new project,选择Empty Views Activity (很多教程说的是创建Empty Activity, 老版本AndroidStudio的Empty Activity = 新版本AndroidStudio的 Empty Views Activity,所以这里选择 Empty Views Activity)
语言选择java
点击Finish,等待一会
这里切换成Project
点击启动按钮,就能在虚拟手机上看到HelloWorld了(虚拟机配置一下,好像新版本是自带了一个虚拟机,直接就能用)
二、分析HelloWorld程序
目录分析
将项目结构模式切换成Project,这就是项目真实的目录结构了。
除了app目录之外,大多数的文件和目 录是自动生成的,我们并不需要进行修改。app目录下的内容才是我们以后 的工作重点
HelloWorld程序怎么启动的?
1.看配置文件AndroidManifest.xml
首先打开AndroidManifest.xml文件,从中可以找到如下代码:
这段代码表示对MainActivity进行注册,没有在AndroidManifest.xml里注册的Activity是不 能使用的。
其中intent-filter里的两行代码非常重要, 它们 表示MainActivity是这个 项目的主Activity,在手机上点击应用图标,首先启动的就是这个Activity。
那MainActivity具体又有什么作用呢?Android四大组件,Activity是 Android应用程序的门面,凡是在应用中你看得到的东西,都是放在Activity中的。
2.看MainActivity
打开MainActivity文件,如下图
首先可以看到,MainActivity是继承自AppCompatActivity的。AppCompatActivity是 AndroidX中提供的一种向下兼容的Activity,可以使Activity在不同系统版本中的功能保持一 致性。而Activity类是Android系统提供的一个基类,我们项目中所有自定义的Activity都必须 继承它或者它的子类才能拥有Activity的特性(AppCompatActivity是Activity的子类)。
然后可以看到MainActivity中有一个onCreate()方法,这个方法是一个Activity被创建时必定要 执行的方法,其中只有两行代码,并且没有“Hello World! ”的字样。那么程序显示 的“Hello World! ”是在哪里定义的呢?
3.看activity_main.xml
布局文件都是定义在res/layout目录下的,当你展开layout目录,你会看到 activity_main.xml这个文件。打开该文件并切换到Text视图。
点击下图按钮切换Test视图
看到上面代码中有一个 TextView,这是Android系统提供的一个控件,用于在布局中显示文字。
终于 看到了 “HelloWorld”字样!
三、详解项目中的资源
如果你展开res目录看一下
所有 以“drawable”开头的目录都是用来放图片的
所有 以“mipmap”开头的目录都是用来放应用图标的
所有 以“values”开头的目录都是用来放字符串、样式、颜色等配置的
所有 以“layout”开头的目录都是用来放布局文件的。
之所以有这么多“mipmap”开头的目录,其实主要是为了让程序能够更好地兼容各种设备。 drawable目录也是相同的道理,虽然Android Studio没有帮我们自动生成,但是我们应该自 己创建drawable-hdpi、drawable-xhdpi、drawable-xxhdpi等目录。在制作程序的时候, 最好能够给同一张图片提供几个不同分辨率的版本,分别放在这些目录下,然后程序运行的时 候,会自动根据当前运行设备分辨率的高低选择加载哪个目录下的图片。当然这只是理想情 况,更多的时候美工只会提供给我们一份图片,这时你把所有图片都放在drawable-xxhdpi目 录下就好了,因为这是最主流的设备分辨率目录。
如何使用资源
知道了res目录下每个子目录的含义,我们再来看一下如何使用这些资源吧。
打开 res/values/strings.xml文件,内容如下所示:
<resources><string name="app_name">HelloWorld-Java</string>
</resources>
可以看到,这里定义了一个应用程序名的字符串,我们有以下两种方式来引用它。
在代码中通过R.string.app_name可以获得该字符串的引用。
在XML中通过@string/app_name可以获得该字符串的引用。
基本的语法就是上面这两种方式,其中string部分是可以替换的,如果是引用的图片资源就可 以替换成drawable,如果是引用的应用图标就可以替换成mipmap,如果是引用的布局文件就 可以替换成layout,以此类推。
下面举一个简单的例子来帮助你理解,打开AndroidManifest.xml文件,找到如下代码:
android:allowBackup="true"android:dataExtractionRules="@xml/data_extraction_rules"android:fullBackupContent="@xml/backup_rules"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.HelloWorldJava"
其中,HelloWorld项目的应用图标就是通过android:icon属性指定的,应用的名称则是通过 android:label属性指定的。可以看到,这里对资源引用的方式正是我们刚刚学过的在XML中 引用资源的语法。
四、详解Gradle
Gradle介绍
gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。
所谓的构建过程就是:编译,测试,依赖管理,打包,部署。以前我们开发是手动导入jar包的,类似于面向过程,一步一步来,缺什么包就导什么包,很麻烦,容易出错,jar包版本还不统一,需要关心jar包与jar包之间的依赖。通过采用gradle的构建方式,只需通过complie xxxxx引入一个jar包,然后这个jar包所依赖的其他jar包gradle会自动帮引入,无需关心jar包与jar包之间的依赖,在什么地方以什么形式引入外部jar包,都委托给gradle管理了,体现了面象对象的思想,无需关心内部实现过程,直接引入就可。(注意Gradle不是一种编程语言,它不能帮你实现软件中的任何实际功能)
Android studio的默认插件是Gradle,或许是因为Gradle编译速度比Maven 快很多,而且Gradle完全兼容kotlin语言。当我们新建一个android 项目,gradle已经默认配置好了。
打开gradle-wrapper.properties文件,查看配置信息:可以看到distributionUrl=https://services.gradle.org/distributions/gradle-5.1.1-all.zip说明默认使用的是gradle 5.1.1 的版本,当然可以改成我们本地有的版本,distributionUrl=file:///+gradle的本地路径,例如:distributionUrl=file:///c:/tools/gradle-5.6.4.zip就可以了。 android gradle插件详解地址:https://developer.android.com/studio/releases/gradle-plugin?hl=zh-cn
自动化构建工具有哪些?
Ant 2000年诞生,主要是编译代码,测试代码。
Maven 2007年诞生,主要是编译测试,依赖管理。
Gradle 2012年诞生 主要是是编译测试,依赖管理,DSL自定义扩展任务。
build.gradle
build.gradle文件分别在项目目录下和对应module目录都有存在。
下图是项目目录下的build.gradle:
接下来是module目录的build.gradle:
module目录下的的build.gradle里的dependencies {…}里面的依赖,是单单一个模块本身所需的依赖!是程序运行的编译依赖。
在External Libraries文件夹下,如图
可以看到项目添加的所有依赖,包括子依赖都会显示在里面。除build.gradle里的dependencies {…}里面添加的依赖之外的依赖都是子依赖。
子依赖都是gradle智能自动的帮你添加的,它检查到你主动添加的依赖,又依赖于其他依赖,就会帮你加上。另外当gradle检查到依赖间有冲突时,出现依赖间多次引用相同jar包(只能将库里的源码打进去,而资源什么的不能打进去)、aar包(自动的将资源文件和源码一起打进去,不用担心资源缺失的问题),它只会默认选择版本较高的添加,不会重复添加。这就是gradle出色的依赖管理。
切换成显示代码
五、日志
Android的日志工具Log
打开MainActivity,在onCreate()方法中添加一行打印日志的语句,如下所示:
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//日志Log.d("MainActivity", "onCreate execute");}
}
Log.d()方法中传入了两个参数:
第一个参数是tag,一般传入当前的类名就好,主要用于对 打印信息进行过滤;
第二个参数是msg,即想要打印的具体内容。
重新启动后看到日志输出
Android中的日志工具类是Log(android.util.Log),这个类中提供了如下5个方法来供我 们打印日志。
- Log.v()。用于打印那些最为琐碎的、意义最小的日志信息。对应级别verbose,是 Android日志里面级别最低的一种。
- Log.d()。用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的。 对应级别debug,比verbose高一级。
- Log.i()。用于打印一些比较重要的数据,这些数据应该是你非常想看到的、可以帮你分 析用户行为的数据。对应级别info,比debug高一级。
- Log.w()。用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好去修 复一下这些出现警告的地方。对应级别warn,比info高一级。
- Log.e()。用于打印程序中的错误信息,比如程序进入了catch语句中。当有错误信息打 印出来的时候,一般代表你的程序出现严重问题了,必须尽快修复。对应级别error,比 warn高一级。
为什么用Log不用println()
在真正的项目开发中, 是极度不建议使用System.out.println()或println()方法的,如果你在公司的项目中经 常使用这两个方法来打印日志的话,就很有可能要挨骂了。
为什么System.out.println()和println()方法会这么不受待见呢?经过我仔细分析之 后,发现这两个方法除了使用方便一点之外,其他就一无是处了。方便在哪儿呢?在Android Studio中你只需要输入“sout”,然后按下代码提示键,方法就会自动出来了,相信这也是很多 Java新手对它钟情的原因。那缺点又在哪儿了呢?这个就太多了,比如日志开关不可控制、不能添加日志标签、日志没有级别区分……
Logcat中的过滤器
目前只有3个过滤器,Show only selected application表示只显示当前选中程序的日志; Firebase是Google提供的一个开发者工具和基础架构平台,我们可以不用管它;No Filters相当于没有过滤器,会把所有的日志都显示出来。那可不可以自定义过滤器呢?当然可以,我们 现在就来添加一个过滤器试试。
新版本筛选方式:
新版Android Studio Logcat 筛选日志
六、AndroidStudio 操作
创建模块
相关文章:

【安卓基础1】初识Android
🏆作者简介:|康有为| ,大四在读,目前在小米安卓实习,毕业入职。 🏆安卓学习资料推荐: 视频:b站搜动脑学院 视频链接 (他们的视频后面一部分没再更新,看看前面…...

08-静态pod(了解即可,不重要)
我们都知道,pod是kubelet创建的,那么创建的流程是什么呐? 此时我们需要了解我们k8s中config.yaml配置文件了; 他的存放路径:【/var/lib/kubelet/config.yaml】 一、查看静态pod的路径 [rootk8s231 ~]# vim /var/lib…...

PROBIS铂思金融破产后续:ASIC牌照已注销
2024年1月31日,PROBIS铂思金融的澳大利亚ASIC牌照 (AFSL 338241) 被注销《差价合约经纪商PROBIS宣布破产,澳大利亚金融服务牌照遭暂停》,这也就意味着,PROBIS铂思金融目前已经没有任何金融牌照。 值得注意的是,时至今日…...

数字世界的探索者:计算机相关专业电影精选推荐
目录 推荐计算机专业必看的几部电影 《黑客帝国》 《社交网络》 《乔布斯传》 《心灵捕手》 《源代码》 《盗梦空间》 《头号玩家》 《我是谁:没有绝对安全的系统》 《战争游戏》(WarGames) 《模仿游戏》(The Imitation Game) 《硅谷》(Silicon Valley) …...

Spring Boot项目中TaskDecorator的应用实践
一、前言 TaskDecorator是一个执行回调方法的装饰器,主要应用于传递上下文,或者提供任务的监控/统计信息,可以用于处理子线程与主线程间数据传递的问题。 二、开发示例 1.自定义TaskDecorator import org.springframework.core.task.Task…...
511. 游戏玩法分析 I
文章目录 题意思路代码 题意 题目链接 统计每个用户第一次登陆平台时间 思路 代码 select player_id, min(event_date) as first_login from Activity group by player_id;...

大模型训练流程(三)奖励模型
为什么需要奖励模型 因为指令微调后的模型输出可能不符合人类偏好,所以需要利用强化学习优化模型,而奖励模型是强化学习的关键一步,所以需要训练奖励模型。 1.模型输出可能不符合人类偏好 上一篇讲的SFT只是将预训练模型中的知识给引导出来…...
替换if...else的锦囊妙计
目录 前言 一、又臭又长的if...else 二、消除if...else的锦囊妙计 1、使用注解 2、动态拼接名称 3、模板方法判断 4.策略工厂模式 5.责任链模式 6、其他的消除if...else的方法 1.根据不同的数字返回不同的字符串 2.集合中的判断 3.简单的判断 4.spring中的判断 原文…...
新建一个flask项目
在Flask中创建一个新的项目,您可以遵循以下步骤: 确保您已经安装了Python环境。如果还未安装Flask,可以通过pip来安装: pip install flask创建一个新的文件夹作为您的项目文件夹,例如myflaskapp: mkdir …...
【Linux 内核源码分析】物理内存组织结构
多处理器系统两种体系结构: 非一致内存访问(Non-Uniform Memory Access,NUMA):这种体系结构下,内存被划分成多个内存节点,每个节点由不同的处理器访问。访问一个内存节点所需的时间取决于处理器…...

力扣日记2.21-【回溯算法篇】46. 全排列
力扣日记:【回溯算法篇】46. 全排列 日期:2023.2.21 参考:代码随想录、力扣 46. 全排列 题目描述 难度:中等 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&…...
[AIGC] Kafka 消费者的实现原理
在 Kafka 中,消费者通过订阅主题来消费数据。每个消费者都属于一个消费者组,消费者组中的多个消费者可以共同消费一个主题,实现分布式消费。每个消费者都会维护自己的偏移量,用于记录已经读取到的消息位置。消费者可以选择手动提交…...

Dubbo框架admin搭建
Dubbo服务监控平台,dubbo-admin是图形化的服务管理界面,从服务注册中心获取所有的提供者和消费者的配置。 dubbo-admin是前后端分离的项目,前端使用Vue,后端使用springboot。因此,前端需要nodejs环境,后端需…...

Linux 内存top命令详解
通过top命令可以监控当前机器的内存实时使用情况,该命令的参数解释如下: 第一行 15:30:14 —— 当前系统时间 up 1167 days, 5:02 —— 系统已经运行的时长,格式为时:分 1 users ——当前有1个用户登录系统 load average: 0.00, 0.01, 0.05…...

OCP使用CLI创建和构建应用
文章目录 环境登录创建project赋予查看权限部署第一个image创建route检查pod扩展应用 部署一个Python应用连接数据库创建secret加载数据并显示国家公园地图 清理参考 环境 RHEL 9.3Red Hat OpenShift Local 2.32 登录 通过 crc console --credentials 可以查看登录信息&…...

Chrome关闭时出现弹窗runtime error c++R6052,且无法关闭
环境: Chrome 版本121 Win10专业版 问题描述: Chrome关闭时出现弹窗runtime error cR6052,且无法关闭 解决方案: 1.任务管理器打开,强制结束进程 2.再次打开谷歌浏览器,打开设置关于Chrome࿰…...

【动态规划专栏】专题二:路径问题--------6.地下城游戏
本专栏内容为:算法学习专栏,分为优选算法专栏,贪心算法专栏,动态规划专栏以及递归,搜索与回溯算法专栏四部分。 通过本专栏的深入学习,你可以了解并掌握算法。 💓博主csdn个人主页:小…...
flink operator 1.7 更换日志框架log4j 到logback
更换日志框架 flink 1.18 1 消除基础flink框架log4j 添加logback jar 1-1 log4j log4j-1.2-api-2.17.1.jar log4j-api-2.17.1.jar log4j-core-2.17.1.jar log4j-slf4j-impl-2.17.1.jar 1-2 logback logback-core-1.2.3.jar logback-classic-1.2.3.jar slf4j-api-1.7.25.jar2 …...

算法项目(1)—— LSTM+CNN+四种注意力对比的股票预测
本文包含什么? 项目运行的方式(包教会)项目代码(在线运行免环境配置)不通注意力的模型指标对比一些效果图运行有问题? csdn上后台随时售后.项目说明 本项目实现了基于CNN+LSTM构建模型,然后对比不同的注意力机制预测股票走势的效果。首先看一下模型结果的对比: 模型MS…...

Qt C++春晚刘谦魔术约瑟夫环问题的模拟程序
什么是约瑟夫环问题? 约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N6,M5,被杀掉的顺序是:5ÿ…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...