Android模块化开发项目式教程(Android Studio)
上QQ阅读APP看书,第一时间看更新

项目1-2 第一个Android程序开发

学习目标

■ 熟悉Android Studio开发界面,认识Android项目结构。

■ 初识Android的基本组件。

■ 掌握新建Android Studio工程的方法。

■ 掌握Android Studio的简单设置。

■ 掌握创建Android Studio虚拟设备的方法

■ 掌握Android程序运行和程序打包的方法。

项目描述

新建一个 FirstDemo程序,进行 Android Studio简单设置。然后,创建 Android Studio模拟器,调试运行此程序。最后,将Android程序打包成apk文件。

知识储备

1.2.1 Android Studio开发环境介绍

Android Studio是Google公司官方提供的Android应用开发平台,它由菜单栏和工具栏、工程目录区、代码编辑区及后台日志窗口组成,如图1-15所示。如果单击代码编辑区左下角处【Design】按钮,可切换到UI设计窗口,查看UI布局设计效果。菜单栏和工具栏用于选择操作命令,如图1-16所示。工程目录区用于显示Android项目结构。代码编辑区用于编写XML或Java代码。后台日志窗口用于显示程序运行与调试结果。

图1-15 Android Studio主页(开发环境)

图1-16 Android Studio菜单栏和工具栏

说明:

①—APP运行配置按钮;②—APP运行按钮;③—AVD管理器;④—SDK管理器;⑤—后台调试工具

1.2.2 Android项目结构

Android项目结构由工程清单文件AndroidManifest.xml、工程源代码和资源文件夹组成,如图1-17所示。

图1-17 Android项目结构

1.资源文件夹

Android 项目下有 drawable、layout、mipmap、values 等资源文件夹,它们的作用介绍如下。

drawable子目录:通常用于存放图片资源。

layout子目录:用于存放Android项目中UI界面的XML布局文件。

mipmap 子目录:用于放置启动图标,Android Studio 新建项目的 ic_launcher.png都是默认放在mipmap文件夹下。

values子目录:用于放置颜色(colors.xml)、尺寸(dimens.xml)、字符(strings.xml)和样式(styles.xml)等资源文件。

同时,开发者还可以根据需要创建资源文件夹,如menu菜单文件夹用于存放菜单设置的XML文件。

2.工程清单文件AndroidManifest.xml

每个 Android 应用程序必须包含一个工程清单文件 AndroidManifest.xml。它位于整个项目的根目录。它是Android应用的全局描述文件。在该文件内,不仅需要标明应用程序的名称和使用的图标,还要描述package中暴露的组件(Activity和Service等)。它们各自的实现类以及各种能被处理的数据和启动位置,除了能声明程序中的 Activities、Services、ContentProviders和Intent Receivers以外,还能指定Permissions和Instrumentation(安全控制和测试)。如FirstDemo程序中的AndroidManifest.xml文件代码:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android" //第一层次

  package="com.zzhn.zheng.firstdemo">

  <application //第二层次,声明描述应用程序的相关特征

    android:allowBackup="true"

    android:icon="@mipmap/ic_launcher"

    android:label="@string/app_name"

    android:supportsRtl="true"

    android:theme="@style/AppTheme">

     <activity        //第三层次,声明应用程序中的组件,如Activity

       android:name=".MainActivity">

       <intent-filter>   //第四层次,声明此Activity的filter特性

         <action android:name="android.intent.action.MAIN" />

         <category android:name="android.intent.category.LAUNCHER" />

       </intent-filter>   //第四层次声明结束

     </activity>       //第三层次声明结束

    </application>      //第二层次声明结束

</manifest>            //第一层次声明结束

AndroidManifest.xml文件中的重要元素说明如下。

① manifest:根节点,描述了package中所有的内容。

② xmlns:android:定义Android命名空间。

③ package:指定应用程序的包名。

④ application:包含package中application级别组件声明的根节点,一个AndroidManifest.xml中必须包含零个或一个application标签。

⑤ android:icon:应用程序图标。

⑥ android:label:应用程序标签,即设置显示的名称。

⑦ activity:与用户交互的主要工具,它是用户打开一个应用程序的页面。

⑧ android:name:Activity的名称。

⑨ intent-filter:即“意图过滤器”,是对 Activity 的过滤器 Filter 的声明,需要第四层次intent-filter内设定的资料,包括action、data和category 3种。也就是说,Filter只会与Intent里的这3种资料做对比动作。

⑩ action:只有android:name这个属性。常见的android:name值为android.intent.action.MAIN,表明此Activity是作为应用程序的入口,该属性的功能与C语言程序中的main()函数相同,因此,android.intent.action.MAIN属性只赋值给一个Activity。

⑪ category:也只有android:name这个属性。常见的android:name值为android.intent.category.LAUNCHER,它用来决定应用程序是否显示在程序列表里。

⑫ data:每个data元素指定一个URI和数据类型(MIME类型)。它有4个属性:scheme、host、port和 path,它们分别对应URI(scheme://host:port/path)的每个部分。上述代码中没有涉及data属性。

AndroidManifest.xml文件中有4个标签与permission有关,它们分别是<permission>、<permission-group>、<permission-tree>和<uses-permission>,其中最常用的是<usespermission>。如果需要获取某个权限时,就必须在 AndroidManifest.xml 文件中声明<uses-permission>,如设置访问网络的权限名为<uses-permission android:name="android.permission.INTERNET" />。<uses-permission>与<application>同层次,一般位于<application>标签前面。

由此可见,AndroidManifest.xml文件能实现的主要功能如下。

① 命名应用程序的Java应用包,这个包名用来唯一标识应用程序。

② 描述应用程序的组件——活动、服务、广播接收者、内容提供者;对实现每个组件和公布其功能的类进行命名。这些声明使得Android系统了解这些组件以及它们在什么条件下可以被启动。

③ 决定应用程序组件运行在哪个进程里。

④ 声明应用程序所必须具备的权限,用以访问受保护的部分API,以及和其他应用程序交互。

⑤ 声明应用程序其他的必备权限,用于组件之间的交互。

⑥ 列举测试设备Instrumentation类,用来提供应用程序运行时所需的环境配置及其他信息。这些声明只在程序开发和测试阶段存在,发布前将被删除。

⑦ 声明应用程序所要求的Android API的最低版本级别。

⑧ 列举application所需要链接的库。

1.2.3 Android的基本组件

Android 应用程序通常由一个或多个基本组件组成,其基本组件为 Activity、Service、BroadcastReceiver和ContentProvider。下面分别对Android的这四大基本组件进行介绍。

1.Activity

Activity是活动的意思。在应用程序中,一个Activity通常表现为一个可视化的用户界面,是Android程序与用户交互的窗口。它可以显示一些控件,也可以监听并对用户的事件做出响应。同时,Activity 为保持各个界面状态,需要做很多持久化的事情,还需要妥善管理生命周期和一些转跳逻辑。而Activity之间是通过Intent进行通信的。

2.Service

Service 是指服务。服务是运行在后台的一个组件,它是一段具有长生命周期,没有用户界面的程序,可以用来开发如监控类的程序。

下面通过媒体播放器的例子来说明Service的作用。在一个媒体播放器的应用中,应该会有多个 Activity,让使用者可以选择歌曲并播放歌曲。然而,音乐重放这个功能并没有对应的Activity,因为使用者会认为在导航到其他屏幕(如查看天气预报)时音乐应该还在播放的。此时系统前台是查看天气预报的界面,但媒体播放器会使用Context.startService()来启动一个事先定义好的具有歌曲播放功能的 Service,从而可以实现在后台保持音乐的播放。同时,系统也将保持这个 Service 一直执行,直到这个 Service 运行结束。另外,我们还可以通过使用Context.bindService()函数连接到一个Service上(如果这个Service还没有运行,则将它启动)。当连接到一个Service之后,可以用Service提供的接口与它进行通信。以媒体播放器为例,用户还可以进行暂停、重播等操作。

3.BroadcastReceiver

BroadcastReceiver 是指广播接收者,它不执行任何任务。广播是一种广泛运用在应用程序之间传输信息的机制,而BroadcastReceiver是对发送出来的广播进行过滤接收并响应的一类组件。BroadcastReceiver 不包含任何用户界面,然而它们可以启动一个 Activity 以响应接收到的信息,或者通过 NotificationManager 通知用户。可以通过多种方式使用户知道有新的通知产生,如手机震动、闹钟等。

BroadcastReceiver组件提供了一种把Intent作为一个消息广播出去,由所有对其感兴趣的程序对其做出反应的机制。

4.ContentProvider

ContentProvider 是指内容提供者。作为应用程序之间唯一的共享数据的途径, ContentProvider主要的功能就是存储并检索数据以及向其他应用程序提供访问数据的接口。

Android 平台提供了 ContentProvider,使一个应用程序的指定数据集提供给其他应用程序,这些数据可以存储在文件系统、SQLite数据库,或以其他数据方式保存。其他应用程序可以通过ContentResolver类从该内容提供者中获取或存入数据。

在Android中还有一个很重要的概念就是Intent。Intent是一个对动作和行为的抽象描述,负责在组件之间和程序之间进行消息传递。除了 ContentProvider是通过 ContentResolver激活外,其他3种组件Activity、Service和BroadcastReceiver都是由Intent激活的。Intent在不同的组件之间传递消息,将一个组件的请求意图传给另一个组件。

另外,四大基本组件都需要注册才能使用,即每个 Activity、Service、ContentProvider都需要在AndroidManifest文件中进行声明,而BroadcastReceiver广播接收者的注册分静态注册(在AndroidManifest文件中配置)和通过代码动态创建并调用Context.registerReceiver()方法注册至系统。需要注意的是静态注册的广播接收者会随系统的启动而一直处于活跃状态,即使是程序未运行,只要接收到感兴趣的广播就会触发。

项目实施

1.新建一个名为FirstDemo的Android工程

其操作步骤如下。

① 打开Windows的“开始”菜单,单击【Android Studio】图标,运行工程启动向导,在 Android Studio的起始页界面上选择第1项新建一个 Android工程;或在图1-13所示的Android Studio主页中单击菜单栏【File】→【New】→【New Project】,就可创建一个Android工程。

② 在弹出的“New Project”对话框的Application name栏中输入工程的名称(FirstDemo), Company Domain栏中输入公司域名(zheng.zzhn.com),Project location栏中输入工程路径,单击【Next】按钮,如图1-18所示。

图1-18 输入工程名、公司域名和工程路径

③ 在弹出的“Target Android Devices”对话框中将【Phone and Tablet】项勾选上,并选择支持最低版本的SDK为Android 4.0.3(API 15),单击【Next】按钮,如图1-19所示。

图1-19 选择最低版本的SDK

④ 在弹出的“Add an activity to Mobile”对话框中选择【Empty Activity】项(创建一个空的Activity),单击【Next】按钮,如图1-20所示。

图1-20 添加一个Activity对话框

⑤ 在弹出的“Customize the Activity”对话框中输入Activity的名称和布局(layout)文件名,单击【Finish】按钮,如图1-21所示。此时,系统开始进行“FirstDemo”工程项目的自动构建,弹出“Building"FirstDemo"Gradle project info”提示框。待工程项目构建完成后,将打开“FirstDemo”工程项目的Android Studio开发环境,完成新建“FirstDemo”工程项目。

图1-21 定制Activity对话框

2.Android Studio简单设置

① 更换主题:如果要修改软件的界面,可以采用更换主题的方法。

操作步骤:选择菜单栏【File】→【Settings】→【Appearance & Behavior】→【Appearance】→【Theme】,可在下拉列表中选择主题,如选择【Darcula】,单击【OK】按钮。

② 修改代码字体大小。

操作步骤:选择菜单栏【File】→【Settings】→【Editor】→【Colors&Fonts】→【Font】,在Scheme的下拉列表中选择【Default copy】,可修改Primary font和Size项,调整字号大小,单击【OK】按钮。

③ 关闭自动检查更新。

操作步骤:选择菜单栏【File】→【Settings】→【Appearance & Behavior】→【System Settings】→【Updates】,取消自动检查更新项,单击【OK】按钮。

④ 设置自动导入包。

操作步骤:选择菜单栏【File】→【Settings】→【Editor】→【General】→【Auto Import】,将【Optimize imports on the fly】和【Add unambiguous imports on the fly】这两项勾选上,单击【OK】按钮。

⑤ 显示代码行数。

操作步骤:选择菜单栏【File】→【Settings】→【Editor】→【General】→【Appearance】,将【Show line numbers】项勾选上,单击【OK】按钮。

⑥ 修改文件编码方式。

操作步骤:选择菜单栏【File】→【Settings】→【Editor】→【File Encodeings】,可修改IDE Encodeing和project Encodeing中的编码方式,单击【OK】按钮。注意:Android默认的编码方式是UTF-8。

⑦ 禁止自动打开上次的工程。

操作步骤:选择菜单栏【File】→【Settings】→【Appearance & Behavior】→【System Settings】,将【Reopen last project startup】选项的对勾去掉,单击【OK】按钮。

3.创建Android Studio虚拟设备

创建Android Studio虚拟设备的操作步骤如下。

① 选择菜单栏【Tools】→【Android】→【AVD Manager】,或单击工具栏上的【AVD Manager】命令按钮。

② 打开“Your Virtual Devices”对话框,单击【+Create Virtual Device】按钮,打开Virtual Devices Configuration 中的“Select Hardware”对话框。选择手机硬件配置,单击【Clone Device】按钮,进入“Configure Hardware Profile”对话框,在此对话框中可修改配置信息,单击【OK】按钮返回。

③ 在“Select Hardware”对话框中,单击【Next】按钮,进入“System Image”对话框,选择一个System Image,然后单击【Next】按钮,进入“Android Virtual Device(AVD)”对话框,最后单击【Finish】按钮。当虚拟设备创建成功后就会在“Your Virtual Devices”对话框中出现已创建的虚拟设备记录,如图1-22所示。

图1-22 虚拟设备对话框

说明

在图1-22的右侧分别有一个“侧三角形”、一个“铅笔”和一个“倒三角形”的标志,其中,“侧三角形”标志是启动虚拟设备的命令按钮,“铅笔”标志是编辑虚拟设备的命令按钮,在“倒三角形”标志的下拉列表里有删除虚拟设备的命令,而单击【+Create Virtual Device】命令按钮则可创建一个新虚拟设备。

4.运行项目

创建Android应用程序项目后,还需要运行程序来查看显示的效果。而运行Android应用程序有两种方法,一种方法是在计算机上连接用来运行程序的手机,然后通过该手机来运行程序;另一种方法是通过Android模拟器来运行程序。下面介绍在Android Studio开发环境下通过Android模拟器来运行Android程序的操作步骤。

① 单击工具栏上的AVD Manager图标,打开虚拟设备对话框,在虚拟设备对话框中单击启动虚拟设备的命令按钮,打开Android Studio模拟器。

② 单击工具栏上的“三角形”运行按钮,在Device Chooser(设备选择)对话框中选择虚拟设备,如图1-23所示,单击【OK】按钮。

图1-23 设备选择对话框

③ 运行Android程序,在模拟器的屏幕上显示输出“Hello World!”字符串,运行效果如图1-24所示。

图1-24 应用程序运行效果

5.Android程序打包

Android 应用程序开发完成后,如果需要将其上传到市场,就必须保证应用程序的唯一性和安全性,这时就需要将应用程序打包成Android可安装的.apk文件。在Android Studio开发环境下,将应用程序打包的操作步骤如下。

① 打开Android应用程序项目,选择菜单栏上的【Build】→【Generate Signed APK】,在弹出的对话框(见图1-25)中单击【Create new】或【Choose existing】按钮,可新建或选择已有的密钥(jks)文件(密钥文件相当于程序的身份证书)。

图1-25 新建或选择密钥(jks)文件

② 在弹出的“New Key Store”对话框中输入新建或选择已有的密钥(jks)文件信息(见图1-26),单击【OK】按钮,返回到图1-25所示的对话框。

图1-26 输入密钥(jks)文件

③ 在图1-25所示的对话框中将显示密钥(jks)文件信息,然后,将【Remember passwords】(记住密码项)勾选上,单击【Next】按钮。

④ 在弹出的“Generate Signed APK”对话框中选择“Build Type”项为release,单击【Finish】按钮,如图1-27所示。打包成功后,将在Android Studio的右上角出现打包文件的链接提示,单击链接打开apk文件所在的文件夹,可将apk文件重命名或复制。

图1-27 选择打包程序和类型

说明

打包分debug版和release版,debug通常称为调试版本,它包含调试信息,并且不做任何优化,便于程序员调试程序。release称为发布版本,它往往是进行了各种优化,使程序在代码大小和运行速度上都是最优的,以便用户很好地使用。通常打包就是指生成release版的apk。

项目总结

通过本项目的学习,读者应了解Android Studio的开发环境和Android项目结构,掌握新建一个Android工程的操作方法,了解Android Studio的简单设置,学会创建Android Studio虚拟设备的方法,掌握项目运行和程序打包的操作。

项目训练——创建一个APP项目

创建一个“HelloAndroid”项目,运行该项目,实现输出“Hello Android!”字符串,并将该项目程序打包。

练习题

1-2-1 Android项目结构由哪些部分组成?

1-2-2 Android项目的工程清单文件有什么作用?

1-2-3 如何修改应用程序的标签?

1-2-4 如何更换Android Studio开发界面的主题样式?

1-2-5 Android项目中的图片、布局文件和字符串文件分别存放在什么文件夹下?