Android入门

news2025/1/18 20:18:25

一、Android系统架构

Android大致可以分为4层架构:Linux内核层、系统运行库层、应用框架层和应用层

1.1Linux内核层

Android系统是基于Linux内核的,这一层为Android设备的各种硬件提供了如显示、音频、照相机、蓝牙、Wi-Fi等底层的驱动。

1.2系统运行层

这一层通过一些C/C++库如SQLite、OpenGL|ES、Webkit等为Android系统提供了主要的特性支持。

此外,这一层还有Android运行时库,允许开发者使用Java语言来编写Android应用,并且还包含了Dalvik虚拟机,它使得每一个Android应用都能运行在独立的进程中,并且拥有自己的虚拟机实例。

1.3应用框架层

这一层主要提供了构建应用程序时可能用到的各种API。

1.4应用层

所有安装在手机应用上的应用程序都是属于这一层。

二、Android应用的四大组件

Android系统四大组件分别是Activity、Service、BroadcastRecevier和ContentProvider

Activity是所有Android应用程序的门面,凡是在应用中看得到的东西,都是放在Activity中。

Service你无法看到它,但它会在后台默默运行,即使用户退出了应用,Service仍然是可以继续运行。

BroadcastRecevier允许你的应用来自各处的广播信息,如电话、短信等,当然,你的应用也可以向外发出广播消息。

ContentProvider则为应用程序之间的共享数据提供了可能,比如你想要读取系统通讯录中的联系人,就需要通过ContentProvider来实现。

三、创建第一个Android项目

#具体安装Android Studio教程可自行查询相关安装教程

3.1创建HelloWorld项目

步骤1:点击New Project创建新项目

步骤2:选择项目类型界面(这里我们选择“Empty Activity”创建一个空的Activity)

 

步骤3:项目配置

  

Name表示项目名称,这里我们填“HelloWorld”即可;

Package name表示项目的包名,Android系统就是通过包名来区分不同应用程序的,因此包名具有唯一性;

Save location表示项目代码存放的位置;

Language表示使用的编程语言,有Java和Kotlin两种选择;

Minimum SDK表示设置项目的最低兼容版本

步骤4:点击Finish即项目创建成功

3.2运行项目

 

左边的锤子按钮是用来编译项目的;

中间第一个下拉列表是用来选择运行哪一个项目,通常app就是当前的主项目;

中间另一个下拉是用来选择运行到哪台设备上的;

右边三角形按钮是用来运行项目的

点击三角形按钮运行程序

四、分析Android项目结构

 

五、代码分析

5.1分析HelloWorld项目代码

打开AndroidManifest.xml文件

 <activity
           android:name=".MainActivity"
           android:exported="true">
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>

这段代码表示对MainActivity进行注册,没有在AndroidManifest.xml里注册的Activity是不能使用的。

其中intent-filter里的两行代码非常重要,<action android:name="android.intent.action.MAIN" />和<category android:name="android.intent.category.LAUNCHER" />表示MainActivity是这个项目的主Activity,在手机上点击应用图标,首先启动的就是这个Activity。

打开MainActivity

package com.example.helloworld
​
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
​
class MainActivity : AppCompatActivity() {
   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)
  }
}

首先可以看到,MainActivity是继承自AppCompatActivity的。AppCompatActivity是AndroidX中提供的一种向下兼容的Activity,可以使Activity在不同系统版本中的功能保持一致性。

MainActivity中有一个onCreate()方法,这个方法是一个Activity被创建时必定要执行的方法,在该方法的第二行调用了setContentView()方法,就是这个方法给当前的Activity引入了一个activity_main布局,“Hello World”就是在其中定义的。

打开res/layout目录下的activity_main.xml,打开该文件,并切换到Code视图,代码如下:

<?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: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>

在代码中有一个TextView,这是Android系统提供的一个控件,用于在布局中显示文字,在其中有“Hello World!”字样,就是通过该句代码显示输出的。

5.2解释项目中的资源

打开res/values/strings.xml文件,内容如下:

<resources>
   <string name="app_name">HelloWorld</string>
</resources>

可以看到,这里定义了一个应用程序名的字符串,我们可以通过以下两种方式来引用它:

  • 在代码中通过R.string.app_name可以获得该字符串的引用;

  • 在XML中通过@string/app_name可以获得该字符串的引用。

基本语法就是上面两种方式,其中string部分是可以替换的,如果引用的图片资源就可以替换成drawable,如果引用的应用图标就可以替换成mipmap,如果是引用的布局文件就可以替换成layout,以此类推。

5.3 解释build.gradle文件

不同于Eclipse,Android Studio是采用Gradle来构建项目的,Gradle是一个非常先进的项目构建工具。

如在HelloWorld项目中有两个build.gradle文件,一个在最外层目录下,一个在app目录下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/435000.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023MathorCup 高校数学建模挑战赛D题思路解析

如下为MathorCup 高校数学建模挑战赛D题思路解析&#xff1a; D 题 航空安全风险分析和飞行技术评估问题 飞行安全是民航运输业赖以生存和发展的基础。随着我国民航业的快速发展&#xff0c;针对飞行安全问题的研究显得越来越重要。2022 年 3 月 21 日&#xff0c;“3.21”空难…

如何使用vim的插件Ctags查看Linux源码

一.ubuntu下安装Linux内核源码 (1).查看自己的内核版本 (2).查看源内的内核源码类表 (3).下载源码 (4).进入/usr/src (5).解压下载的文件到用户主 二.安装vim插件Ctags和使用 插件的介绍 Ctags工具是用来遍历源代码文件生成tags文件&#xff0c;这些tags文件能被编辑器或其它工…

2023年的深度学习入门指南(4) - 在你的电脑上运行大模型

2023年的深度学习入门指南(4) - 在你的电脑上运行大模型 上一篇我们介绍了大模型的基础&#xff0c;自注意力机制以及其实现Transformer模块。因为Transformer被PyTorch和TensorFlow等框架所支持&#xff0c;所以我们只要能够配置好框架的GPU或者其他加速硬件的支持&#xff0…

同为科技(TOWE)防雷科普篇1—雷电灾害认识与雷电预警信号解读

前 言 雷电是自然界最为壮观的大气现象之一。其强大的电流、炙热的高温、猛烈的冲击波以及强烈的电磁辐射等物理效应能够在瞬间产生巨大的破坏作用&#xff0c;常常导致人员伤亡&#xff0c;击毁建筑物、供配电系统、通信设备&#xff0c;造成计算机信息系统中断&#xff0c;引…

电风扇出口欧美CE/UL507认证办理

电风扇简称电扇&#xff0c;是一种利用电动机驱动扇叶旋转&#xff0c;来达到使空气加速流通的家用电器&#xff0c;主要用于清凉解暑和流通空气。风扇主要由扇头、叶片、网罩和控制装置等部件组成。电风扇的主要部件是:交流电动机。其工作原理是:通电线圈在磁场中受力而转动。…

Streamlit 中函数多次进入的问题

Streamlit 函数多次进入的问题 Streamlit 学习的背景重要案例心得踩坑或注意点 Streamlit 学习的背景 最近在学习ai相关的知识&#xff0c;同时需要做一些方便使用的web网页。 例如&#xff1a;调用chatGPT的api&#xff0c;做对话窗。 之前用过gradio, 但是发现在手机端上&am…

NestJS:理解ORM(Object Relational Mapping)

一、理解ORM(Object Relation Mapping) ORM是对象—关系映射&#xff08;Object/Relation Mapping&#xff0c;ORM&#xff09;是为了解决面向对象与关系数据库存在的互不匹配现象而产生的技术。业务实体在内存中表现为对象&#xff0c;在数据库中表现为关系数据。ORM通过使用描…

【网络技术】HULK攻击实验

一、重要声明 请勿攻击公网&#xff01;请勿攻击公网&#xff01;请勿攻击公网&#xff01; 一切责任自负&#xff01;一切责任自负&#xff01;一切责任自负&#xff01; 二、工具介绍 HULK&#xff08;Http Unbearable Load King&#xff0c;字面意思是“不能承受的HTTP&a…

项目三:双人骰子

项目三&#xff1a;双人骰子 文章目录 项目三&#xff1a;双人骰子一、导入(5分钟&#xff09;学习目的 二、新授(65分钟)1.预展示结果(5分钟)2.本节课所用的软硬件(5分钟)3.硬件介绍(1分钟)4.图形化块介绍(1分钟)5.单个模块的简单使用(1分钟)6.双人骰子编程逻辑分析(30分钟)7.…

Faster RCNN系列——RoI Pooling与全连接层

在RPN网络中&#xff0c;已经计算过一次类别真值与类别预测值、偏移量真值与偏移量预测值之间的损失值&#xff0c;但这里的类别预测值只包含两类&#xff1a;前景和背景。 RPN网络输出的Proposal作为生成的区域&#xff0c;继续在后续的RoI Pooling和全连接层中进行分类与回归…

企业电子招投标系统源码之电子招投标系统建设的重点和未来趋势

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及…

性能优化3-分帧寻路+寻路任务统一管理

前言 当项目里的地图越来越大&#xff0c;一些性能上的问题开始逐渐出现&#xff0c;比如寻路。玩家在操控角色移动的时候&#xff0c;指引需要实时更新&#xff0c;同时一些npc也需要做移动&#xff0c;容易出现cpu占用率短时间过高&#xff0c;甚至掉帧的情况。 去年底的时候…

ChatGPT,音乐,与数据库

小编君是个不务正业&#xff0c;喜欢搞跨界&#xff0c;干啥啥不成的DBA&#xff0c;大概在十一年前就有个不成熟的妄念&#xff0c;能否用计算机来写音乐&#xff1f; ▌用ChatGPT来搞音乐&#xff1f; 音乐是一个个的音符&#xff0c;按照乐理规则排列的。音符之间是否和谐…

横扫一线大厂面试的高并发笔记到底有多硬核?

处处需要高并发 “为什么Java面试必问高并发&#xff1f;” 这个问题已经让程序员们倍感头疼&#xff0c;尤其是想要跳槽到更大公司的程序员&#xff0c;能否漂亮的回答高并发的问题已经成为求职者是否是一个优秀程序员的评判标准&#xff0c;大厂面试尤为明显。 不得不说&am…

springMvc(二)

一、SSM整合 前面我们已经把 Mybatis 、 Spring 和 SpringMVC 三个框架进行了学习&#xff0c;今天主要的内容就是把这三个 框架整合在一起完成我们的业务功能开发&#xff0c;具体如何来整合&#xff0c;我们一步步来学习。 1.1 流程分析 (1) 创建工程 创建一个Maven的we…

BUUCTF-PWN-ciscn_2019_n_1

1.溢出到shell位置 下载文件 checksec file 发现是64位的 然后 放入ida 查看字符串 发现 cat flag 然后看看 F5反编译 我们发现了system 然后get()函数 我们可以使用栈溢出 我们看看 v1函数的地址 是30h 然后是64位的 所以 基地址是8字节 我们开始查看 system的地址 所以…

Web3 营销:项目方如何使用空投奖励以及激励真实用户

Apr. 2023, Daniel 在GameFi中&#xff0c;举行成功的空投活动是最难做到的事情之一。 虽然今年Arbitrum和Blur的活动再次使空投成为一个热门话题&#xff0c;但通过空投赚取收益造成了一个机器人问题&#xff0c;即空投者使用多个账户来进入游戏系统。 Trading volume on Bl…

【LeetCode】剑指 Offer 61. 扑克牌中的顺子 p298 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/bu-ke-pai-zhong-de-shun-zi-lcof/ 1. 题目介绍&#xff08;61. 扑克牌中的顺子&#xff09; 从若干副扑克牌中随机抽 5 张牌&#xff0c;判断是不是一个顺子&#xff0c;即这5张牌是不是连续的。2&#xff5e;10为数字本身…

活动需求中灵活使用Redis提升生产力

抽奖 一堆用户参与进来&#xff0c;然后随机抽取几个幸运用户给予实物/虚拟的奖品&#xff1b;此时&#xff0c;开发人员就需要写上一个抽奖的算法&#xff0c;来实现幸运用户的抽取&#xff1b;其实我们完全可以利用Redis的集合&#xff08;Set&#xff09;&#xff0c;就能轻…

汽车CAN、LIN汇总

目录&#xff1a; 一、准备知识 1、什么是CAN 2、汽车网络发展时间轴 3、如何通信 4、CAN总线结构 1&#xff09;ISO 11898 2&#xff09;CAN 和 J1850的比较 3&#xff09;CAN 和 UART的比较 5、关于节点 1&#xff09;什么是节点 2&#xff09;节点&#xff1a;报文传…