第二章 Android 基础--开发基础

news2024/11/28 20:52:10

文章目录

  • 1.使用真机调试运行
  • 2.Android开发涉及的编程语言
  • 3.工程目录结构
  • 4.编译配置文件 build.gradle
  • 5.清单文件
  • 6.界面显示与逻辑处理
  • 7.Activity创建与跳转
  • 8.练习题

本专栏主要在B站学习视频: B站Android视频链接
本视频范围:P9—P16

工程结构、设计规范、活动页面

1.使用真机调试运行

想要观察App的运行效果,有两种办法:

  • 在模拟器上运行App应用【90%选择】【可以更好模拟不同版本的环境】
  • 使用真实手机调试App【某些需要硬件的支持,比如 拍照】【运行起来比模拟器更快】

在真实手机上调试的时候:打开开发者选项、启动USB调试

  1. 使用数据线把手机连到电脑上
    手机的电源线拔掉插头就是数据线。数据线长方形的一端接到电脑的USB接口,即可完成手机与电脑的连接。
  2. 在电脑上安装手机的驱动程序
    一般电脑会把手机当作USB存储设备一样安装驱动,大多数情况会自动安装成功。如果遇到少数情况安装失败,需要先安装手机助手,由助手软件下载并安装对应的手机驱动。
  3. 打开手机的开发者选项并启用USB调试
    手机出厂后默认关闭开发者选项,需要开启开发者选项才能调试App。打开手机的设置菜单,进入“系统"→"关于手机"→版本信息"页面,这里有好几个版本项,每个版本项都使劲点击七、八下,总会有某个版本点击后出现"“你将开启开发者模式的提示。继续点击该版本开启开发者模式,然后退出并重新进入设置页面,此时就能在"系统’菜单下找到"开发者选项"或"开发人员选项"了。进入"开发者选项"页面,启用“开发者选项"和"USB调试"两处开关,允许手机通过USB接口安装调试应用。
  4. 将连接的手机设为文件传输模式,并允许计算机进行USB调试
    手机通过USB数据线连接电脑后,屏幕弹出如图2-1所示的选择列表,请求选择某种USB连接方式。这里记得选中"传输文件",因为充电模式不支持调试App。
    选完之后手机桌面弹出如图2-2所示的确认窗口,提示开发者是否允许当前计算机进行USB调试。这里勾选"始终允许使用这台计算机进行调试"选项,再点击右下角的确定按钮,允许计算机在手机上调试App。

在这里插入图片描述
选择传输文件

在这里插入图片描述

2.Android开发涉及的编程语言

App 开发主要有两大技术路线,分别是原生开发【谷歌官方的技术】和混合开发【与网页技术混合,可以跨平台,性能没有原生开发好】。
Android 的官方编程语言包括JavaKotlin

C/C++

  • 不管是ava还是Kotlin,它们都属于解释型语言,这类语言在运行之时才将程序翻译成机器语言,故而执行效率偏低。虽然现在手机配置越来越高,大多数场景的App运行都很流畅,但是涉及图像与音视频处理等复杂运算的场合,解释型语言的性能瓶颈便暴露出来。
  • 编译型语言在首次编译时就将代码编译为机器语言,后续运行无须重新编译,直接使用之前的编译文件即可,因此执行效率比解释型语言高。CIC++正是编译型语言的代表,它能够有效弥补解释型语言的性能缺憾,借助于JNI技术(Java Native Interface,即Java原生接口),Java代码允许调用C/C-++编写的程序。事实上,Android的SDK开发包内部定义了许多JNI接口,包括图像读写在内的底层代码均由C/C++编写,再由外部通过封装好的Java方法调用。
  • 不过Android系统的JNI编程属于高级开发内容,初学者无须关注JNI开发,也不要求掌握C/C++。

XML

  • 全称为Extensible Markup Language,即可扩展标记语言,严格地说,XML并非编程语言,只是一种标记语言。它类似于HTML,利用各种标签表达页面元素,以及各元素之间的层级关系及其排列组合。每个XML标签都是独立的控件对象,标签内部的属性
    以"android."打头,表示这是标准的安卓属性,各属性分别代表控件的某种规格。比如下面是以XML书写的文本控件:
    在这里插入图片描述

  • 上面的标签名称为TextView,翻译过来叫文本视图,该标签携带4个属性
    说明如下:
    id:控件的编号。
    layout_width:控件的布局宽度
    wrap_content表示刚好包住该控件的内容
    layout_height:控件的布局高度
    wrap_content表示刚好包住该控件的内容。
    text:控件的文本,也就是文本视图要显示什么文字。

  • 综合起来,以上XML代码所表达的意思为:这是一个名为tv_hello的文本视图,显示的文字内容是"Hello World",它的宽度和高度都要刚好包住这些文字。

APP连接的数据库
在学习Java编程的时候,基本会学到数据库操作,通过JDBC连接数据库进行记录的增删改查,这个数据库可能是MySQL,也可能是oracle,还可能是SQL Server。然而手机应用不能直接操作上述几种数据库,因为数据库软件也得像应用软件那样安装到操作系统上,比如MySQL提供了Windows系统的安装包,也提供了Linux系统的安装包,可是它没有提供Android系统的安装包呢,所以MySQL没法在Android系统上安装,手机里面的App也就不能直连MySQL。

既然MySQL、Oracle这些企业数据库无法在手机安装,那么App怎样管理业务方面的数据记录呢?其实Android早已内置了专门的数据库名为SQLite,它遵循关系数据库的设计理念,SQL语法类似于MySQL。不同之处在于,SQLite无须单独安装,因为它内嵌到应用进程当中,所以App无须配置连接信息,即可直接对其增删改查。由于SQLite嵌入到应用程序,省去了配置数据库服务器的开销,因此它又被归类为嵌入式数据库。

可是SQLite的数据库文件保存在手机上,开发者拿不到用户的手机,又该如何获取App存储的业务数据?比如用户的注册信息、用户的购物记录,等等。如果像Java Web那样,业务数据统一保存在后端的数据库服务器,开发者只要登录数据库服务器,就能方便地查询导出需要的记录信息。

手机端的App,连同程序代码及其内置的嵌入式数据库,其实是个又独立又完整的程序实体,它只负责手机上的用户交互与信息处理,该实体被称作客户端。而后端的Java Web服务,包括Web代码和数据库服务器,同样构成另一个单独运行的程序实体,它只负责后台的业务逻辑与数据库操作,该实体被称作服务端。客户端与服务端之前通过HTTP接口通信,每当客户端觉得需要把信息发给服务端,或者需要从服务端获取信息时,客户端便向服务端发起HTTP请求,服务端收到客户端的请求之后,根据规则完成数据处理,并将处理结果返回给客户端。这样客户端经由HTTP接口并借服务端之手,方能间接读写后端的数据库服务器(如MySQL),具体的信息交互过程如图2-10所示。

3.工程目录结构

  • App工程分为两个层次,第一个层次是项目,另一个层次是模块。
  • 模块依附于项目,每个项目至少有一个模块,也能拥有多个模块。
  • 一般所言的“编译运行App”,指的是运行某个模块,而非运行某个项目,因为模块才对
    应实际的App。

在这里插入图片描述

  • App项目下面有两个分类:app(代表app模块)、Gradle Scripts。
  • app下面有3个子目录,Gradle Scripts下面主要是工程的编译配置文件
    在这里插入图片描述
    在这里插入图片描述

(1) manifests子目录,下面只有一个XML文件,即AndroidManifest.xml,它是App的运行配置文件。
(2) java子目录,下面有3个com.example.myapp包,其中第一个包存放当前模块的Java源代码,后面两个包存放测试用的Java代码。
(3) res子目录,存放当前模块的资源文件。res下面又有4个子目录:
——drawable目录存放图形描述文件与图片文件。
——layout目录存放App页面的布局文件。
——mipmap目录存放App的启动图标。
——values目录存放一些常量定义文件【例如字符串常量strings.xml、像素常量dimens.xml、 颜色常量colors.xml、样式风格定义styles.xml等】。

Gradle Scripts下面主要是工程的编译配置文件,主要有:
(1) build.gradle,该文件分为项目级与模块级两种,用于描述App工程的编译规则。
gradle:Gradle是一个项目自动化构建工具,帮我们做了依赖、打包、部署、发布、各种渠道的差异管理等工作。

(2) proguard-rules.pro,该文件用于描述Java代码的混淆规则。
(3) gradle.properties,该文件用于配置编译工程的命令行参数,一般无须改动。
(4) settings.gradle,该文件配置了需要编译哪些模块。初始内容为include ‘:app’,表示只编译app模块。
(5) local.properties,项目的本地配置文件,它在工程编译时自动生成,用于描述开发者电脑的环境配置,包括SDK的本地路径、NDK的本地路径等。

4.编译配置文件 build.gradle

  • 项目级别的build.gradle指定了当前项目的总体编译规则。
  • 模块级别的 build.gradle对应于具体模块,每个模块都有自己的 build.gradle,它指定
    了当前模块的详细编译规则。

在这里插入图片描述
模块级别的 build.gradle:

在这里插入图片描述
在这里插入图片描述

5.清单文件

每个应用的根目录中都必须包含一个AndroidManifest.xml并且文件名必须一模一样。这个文件中包含了APP的配置信息,系统需要根据里面的内容运行APP的代码,显示界面

在这里插入图片描述

可见AndridManifest.xml的根节点为manifest, 它的package属性指定了该App的包名。manlfest 下面有个application节点,它的各属性说明如下:

  • android:allowBackup,是否允许应用备份。允许用户备份系统应用和第三方应用的apk安装包和应用数据,以便在刷机或者数据丢失后恢复应用,用户即可通过adb backup和adb restore来进行对应用数据的备份和恢复。为true表示允许,为false则表示不允许。
  • android:icon,指定App在手机屏幕上显示的图标。
  • android:label,指定App在手机屏幕上显示的名称。
  • android:roundlcon,指定App的圆角图标。
  • android:supportsRtl,是否支持阿拉伯语/波斯语这种从右往左的文字排列顺序。为true表示支持,为false则表示不支持
  • android:theme,指定App的显示风格。

在这里插入图片描述
Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项
任务。

注意到application下面还有个activity节点,它是活动页面的注册声明,只有在AndroidManifest.xml中正确配置了activity节点,才能在运行时访问对应的活动页面。初始配置的MainActivity正是App的默认主页,之所以说该页面是App主页,是因为它的activity节点内部还配置了以下的过滤信息:
在这里插入图片描述

  • 其中action节点设置的android.intent.action.MAIN表示该页面是App的入口页面,启动App时会最先打开该页面。
  • 而category节点设置的android.intent.category.LAUNCHER决定了是否在手机屏幕上显示App图标,如果同时有两个activity节点内部都设置了android.intent.category.LAUNCHER,那么桌面就会显示两个App图标。

以上的两种节点规则可能一开始不太好理解,读者只需记住默认主页必须同时配置这两种过滤规则即可。

6.界面显示与逻辑处理

利用XML标记描绘应用界面,使用Java代码书写程序逻辑。

把 App的界面设计与代码逻辑分开的好处:

  • 使用XML文件描述APP界面,可以很方便地在Android Studio上预览界面效果。
  • 一个界面布局可以被多处代码复用,反过来,一个Java 代码也可能适配多个界面布局。

利用XML标记描绘应用界面:

在这里插入图片描述
展示效果:

在这里插入图片描述
在MainActivity中代码修改:

在这里插入图片描述
运行效果为:

在这里插入图片描述

7.Activity创建与跳转

创建新的App页面:

完整的页面创建过程包括三个步骤:

  • 在 layout目录下创建XML文件
  • 创建与XML文件对应的Java代码
  • 在AndroidManifest.xml中注册页面配置

创建 layout下的xml文件:

在这里插入图片描述
在这里插入图片描述
在values下的strings.xml文件中添加代码:
在这里插入图片描述
创建activity文件

在这里插入图片描述
在这里插入图片描述
在清单文件中注册:
在这里插入图片描述
从原来的activity中跳转到新建的activity中:
创建按钮
在这里插入图片描述
跳转需要点击事件:

在这里插入图片描述

发布运行:

在这里插入图片描述
点击:

在这里插入图片描述

更简便的创建activity的方法:

  • 依次选择右键菜单New→Activity→Empty Activity,弹出图示的页面创建窗口。
  • 输入各项信息后,单击窗口右下角的Finish按钮,即可完成新页面的创建动作。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在清单文件中也配置了:

在这里插入图片描述

8.练习题

在这里插入图片描述
答案:1.USB调试的开关 2.原生开发 3.build.gradle 4.gradle 5.startActivity( )

在这里插入图片描述
答案:1.对 2.对 3.错(客户端程序) 4.对 5.错(放在drawable下)

在这里插入图片描述
在这里插入图片描述

答案:1.C 2.A D 3.C 4.D 5.A

在这里插入图片描述
答案:1.可以在android studio中快速的预览布局 2.同一个布局可以被多个代码逻辑复用 3.同一个代码逻辑可以被多个布局复用,提升代码的复用性

在这里插入图片描述
答案:先不要添加阿里云的仓库地址

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

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

相关文章

redis数据类型和数据结构你了解吗 学习总结篇!

大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。 这期给大家讲一下关于 Redis 数据类型和数据结构的区别,很多读者包括笔者自己,早期也是傻傻分不清。备注:部分图片借鉴小林哥&…

计数排序

计数排序 排序步骤 1、以最大值和最小值的差值加一为长度创建一个新数组 2、将索引为0对应最小值,索引为1对应最小值1,索引为2对应最小值2,以此类推,将索引对应最小值到最大值之间所有的值 3、遍历一遍,遇到一个数字…

hcip第一天——复习静态路由习题

目录 1.绘制拓扑及划分网段 2.配置 1.lsw1 2.lsw2 3.R1 4.R2 5.R3 6.R4 7.R5 8.R6 9.部分pc 10.部分测试 要求 1.绘制拓扑及划分网段 2.配置 1.lsw1 2.lsw2 3.R1 4.R2 5.R3 6.R4 7.R5 8.R6 9.部分pc 10.部分测试

SpringBoot【原理分析、YAML文件、SpringBoot注册web组件】(二)-全面详解(学习总结---从入门到深化)

目录 SpringBoot原理分析_核心注解 YAML文件_配置文件介绍 YAML文件_自定义配置简单数据 YAML文件_自定义配置对象数据 YAML文件_自定义配置集合数据 YAML文件_读取配置文件的数据 使用ConfigurationProperties读取 YAML文件_占位符的使用 YAML文件_配置文件存放位置及优…

react+unittest+flask 接口自动化测试平台

目录 1 前言 2 框架 2-1 框架简介 2-2 框架介绍 2-3 框架结构 3 平台 3-1 平台组件图 1 新建用例 2 生成测试任务 3 执行并查看测试报告 3-2 用例管理 3-2-1 用例设计 3-3 任务管理 3-3-1 创建任务 3-3-2 执行任务 3-3-3 测试报告 3-3-4 邮件通知 1 前言 在现…

【电路原理学习笔记】第3章:欧姆定律:3.4 电阻的计算

第3章:欧姆定律 3.4 电阻的计算 电阻相关欧姆定律公式: R V I R\frac{V}{I} RIV​ 【例3-16】在图3-13所示的电路中,电阻为多少时,电池的电流才为3.08A? 【答】 R V I 12 V 3.08 A 3.90 Ω R\frac{V}{I}\frac{1…

AI大模型的现状与发展

AI大模型的现状与发展 😇博主简介:我是一名正在攻读研究生学位的人工智能专业学生,我可以为计算机、人工智能相关本科生和研究生提供排忧解惑的服务。如果您有任何问题或困惑,欢迎随时来交流哦!😄 ✨座右铭…

leetcode 108. 将有序数组转换为二叉搜索树

2023.7.16 由数组构造二叉搜索树地问题,本题可以借鉴从中序与后序遍历序列构造二叉树 这道题,这类题本质就是寻找分割点,分割点作为当前节点,然后递归左区间和右区间。 下面直接看代码: class Solution { public:Tree…

电子器件系列43:贴片led、发光二极管

干货!发光二极管的全面解读 二极管、发光二极管参数详解_sam-zy的博客-CSDN博客 对几个型号的贴片led进行参数解读: ols-330 特性: 带镜头,从PCB背面安装 视角40 贴片1206 尺寸:3.2(长)x1.6(宽)x1.9(高)mm …

明代元素时装小姐姐【InsCode Stable Diffusion美图活动一期】

一、 Stable Diffusion 模型在线使用地址:https://inscode.csdn.net/inscode/Stable-Diffusion 二、模型版本及相关配置: 模型:chilloutmix_NiPrunedFp32Fix Lora:hanfu_ming 采样迭代步数(steps): 40 采样…

故障排错篇之OSPF协议

一、OSPF邻居建立不成功 1、从理论上判断问题的所在 1.1、检查邻居两端的接口物理和协议状态是否UP,状态是否稳定,接口是否有丢包,两边互ping大包是否能通 若物理接口不Up或是不稳定(有振荡现象),请排查…

NodeJS 文件操作封装 ②①

文章目录 前言导入模块创建文件递归删除文件&文件夹下载写入图片根据URL路劲返回Base64图片链接根据URL路劲异步返回Base64图片链接封装代码暴露模块总结 ⡖⠒⠒⠒⠤⢄⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸ ⠀⠀⠀⡼⠀⠀⠀⠀ ⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢶⣲⡴⣗⣲⡦…

【java爬虫】使用selenium获取某宝联盟淘口令

上一篇文章我们已经介绍过使用selenium获取优惠券基本信息的方法 (15条消息) 【java爬虫】使用selenium爬取优惠券_haohulala的博客-CSDN博客 本文将在上一篇文章的基础上更进一步,获取每个优惠券的淘口令,毕竟我们只有复制淘口令才能在APP里面获取优惠…

Appium python 框架

目录 前言 流程 结构 具体说说 run.py 思路 其他模块 前言 Appium是一个开源的移动应用自动化测试框架,它允许开发人员使用多种编程语言(包括Python)来编写自动化测试脚本。Appium框架提供了一套API和工具,可以与移动设备进…

C语言——指针详解(初阶)

轻松学会C语言指针 前言:一、指针是什么?1.1 指针是什么?1.2 指针变量1.3 总结 二、指针和指针类型2.1指针-整数2.2 指针的解引用 三、野指针3.1野指针的成因3.2如何避免野指针 四、指针运算4.1 指针-整数4.2指针-指针4.3指针的关系运算 五、…

【学会动态规划】不同路径(5)

目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后: 动态规划怎么学? 学习一个算法没有捷径,更何况是学习动态规划, 跟我…

Delete `␍`eslint(prettier/prettier)报错的终极解决方案

1.背景 在进行代码仓库clone打开后,vscode报错全屏的 Delete ␍eslint(prettier/prettier)问题 2. 解决方案: 1.vscode直接转化 好处:直接转化当前页面的报错 坏处:每个界面都需要来一遍 2.设置git配置 好处:一…

竞赛信息管理系统——SSM

目录 一、项目简介 二、前置配置 1、创建数据库 2、编写application.yml文件 三、公共基础类 1、自定义登录拦截器类 2、自定义拦截规则 3、统一数据返回类 4、统一异常处理类 5、工具类 a、密码工具类 b、时间工具类 6、全局变量 四、用户模块 1、定义…

echarts环形图两层

1、实现效果 环形图&#xff0c;有两层环形&#xff0c;扇形之间有间隔&#xff0c;中间是标题&#xff0c;图例是自定义图片 2、实现 在template里写一个盒子放图表 <div class"chartMachineStyle" ref"chartMachine"></div>在style里设置盒…