文章目录
- 1.使用真机调试运行
- 2.Android开发涉及的编程语言
- 3.工程目录结构
- 4.编译配置文件 build.gradle
- 5.清单文件
- 6.界面显示与逻辑处理
- 7.Activity创建与跳转
- 8.练习题
本专栏主要在B站学习视频: B站Android视频链接
本视频范围:P9—P16
工程结构、设计规范、活动页面
1.使用真机调试运行
想要观察App的运行效果,有两种办法:
- 在模拟器上运行App应用【90%选择】【可以更好模拟不同版本的环境】
- 使用真实手机调试App【某些需要硬件的支持,比如 拍照】【运行起来比模拟器更快】
在真实手机上调试的时候:打开开发者选项、启动USB调试
- 使用数据线把手机连到电脑上
手机的电源线拔掉插头就是数据线。数据线长方形的一端接到电脑的USB接口,即可完成手机与电脑的连接。 - 在电脑上安装手机的驱动程序
一般电脑会把手机当作USB存储设备一样安装驱动,大多数情况会自动安装成功。如果遇到少数情况安装失败,需要先安装手机助手,由助手软件下载并安装对应的手机驱动。 - 打开手机的开发者选项并启用USB调试
手机出厂后默认关闭开发者选项,需要开启开发者选项才能调试App。打开手机的设置菜单,进入“系统"→"关于手机"→版本信息"页面,这里有好几个版本项,每个版本项都使劲点击七、八下,总会有某个版本点击后出现"“你将开启开发者模式的提示。继续点击该版本开启开发者模式,然后退出并重新进入设置页面,此时就能在"系统’菜单下找到"开发者选项"或"开发人员选项"了。进入"开发者选项"页面,启用“开发者选项"和"USB调试"两处开关,允许手机通过USB接口安装调试应用。 - 将连接的手机设为文件传输模式,并允许计算机进行USB调试
手机通过USB数据线连接电脑后,屏幕弹出如图2-1所示的选择列表,请求选择某种USB连接方式。这里记得选中"传输文件",因为充电模式不支持调试App。
选完之后手机桌面弹出如图2-2所示的确认窗口,提示开发者是否允许当前计算机进行USB调试。这里勾选"始终允许使用这台计算机进行调试"选项,再点击右下角的确定按钮,允许计算机在手机上调试App。
选择传输文件
2.Android开发涉及的编程语言
App 开发主要有两大技术路线,分别是原生开发【谷歌官方的技术】和混合开发【与网页技术混合,可以跨平台,性能没有原生开发好】。
Android 的官方编程语言包括Java和Kotlin。
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.同一个代码逻辑可以被多个布局复用,提升代码的复用性
答案:先不要添加阿里云的仓库地址