应用基础知识
介绍
您可以使用 Kotlin、Java 和 C++ 语言编写 Android 应用。Android SDK 工具会将您的代码连同任何数据和资源文件编译成一个 APK(Android 软件包),即带有 .apk
后缀的归档文件。一个 APK 文件包含 Android 应用的所有内容,它也是 Android 设备用来安装应用的文件。
每个 Android 应用都处于各自的安全沙盒中,并受以下 Android 安全功能的保护:
- Android 操作系统是一种多用户 Linux 系统,其中的每个应用都是一个不同的用户;
- 默认情况下,系统会为每个应用分配一个唯一的 Linux 用户 ID(该 ID 仅由系统使用,应用并不知晓)。系统会为应用中的所有文件设置权限,使得只有分配给该应用的用户 ID 才能访问这些文件;
- 每个进程都拥有自己的虚拟机 (VM),因此应用代码独立于其他应用而运行。
- 默认情况下,每个应用都在其自己的 Linux 进程内运行。Android 系统会在需要执行任何应用组件时启动该进程,然后当不再需要该进程或系统必须为其他应用恢复内存时,其便会关闭该进程。
应用组件
应用组件是 Android 应用的基本构建块。每个组件都是一个入口点,系统或用户可通过该入口点进入您的应用。有些组件会依赖于其他组件。注意区别于java的main函数。
共有四种不同类型的组件
- Activities
- Services
- Broadcast receivers
- Content providers
而且任何应用的组件可以启动其他应用的组件,比如启用相机
Activities
activity用于用户交互,表示一个界面,一个具体的activity是Activity类的子类。
activity中包含不同的生命周期函数,会在对应时刻调用,比如onCreate()、onStart()、onResume()、onPause()、onStop() 和 onDestroy()。
Services
服务用于因各种原因使应用在后台保持运行状态,是一个在后台运行的组件,没有界面,比如在后台播放音乐,是Service类的子类。
Receiver
广播接收器用于在常规用户流之外传递事件,从而响应系统范围的广播。比如系统通知应用屏幕已关闭,是BroadcastReceiver的子类
Provider
内容提供程序读写共享应用数据,这些数据可以存在文件系统、sqlite等,是ContentProvider的子类。
应用清单文件
在 Android 系统启动应用组件之前,系统必须通过读取应用的清单文件 (AndroidManifest.xml
) 确认组件存在。您的应用必须在此文件中声明其所有组件,该文件必须位于应用项目目录的根目录中。
声明组件
清单文件的主要任务是告知系统应用组件的相关信息。例如,清单文件可按如下所示声明 Activity:
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:icon="@drawable/app_icon.png" ... >
<activity android:name="com.example.project.ExampleActivity"
android:label="@string/example_label" ... >
</activity>
...
</application>
</manifest>
在 <application>
元素中,android:icon
属性指向标识应用的图标所对应的资源。
在 <activity>
元素中,android:name
属性指定 Activity
子类的完全限定类名,android:label
属性指定用作 Activity 的用户可见标签的字符串。
您必须使用以下元素声明所有应用组件:
- Activity
<activity>
元素。 - Services
<service>
元素。 - Receiver
<receiver>
元素。 - Provider
<provider>
元素。
如果未在清单文件中声明源代码中包含的 Activity、服务和内容提供程序,则这些组件对系统不可见,因此也永远不会运行。不过,您可以 BroadcastReceiver
对象的形式,在清单中声明或在代码中动态创建广播接收器;以及通过调用 registerReceiver()
,在系统中注册广播接收器。
如需详细了解如何为您的应用构建清单文件,请参阅 AndroidManifest.xml 文件文档。
其他
除了声明应用的组件外,清单文件还有许多其他作用,如:
- 确定应用需要的任何用户权限,如互联网访问权限或对用户联系人的读取权限。
- 根据应用使用的 API,声明应用所需的最低 API 级别。
- 声明应用使用或需要的硬件和软件功能,如相机、蓝牙服务或多点触摸屏幕。
应用资源
Android 应用并非仅包含代码,它还需要与源代码分离的资源,如图像、音频文件以及任何与应用的视觉呈现有关的内容。例如,您可以通过 XML 文件定义 Activity 界面的动画、菜单、样式、颜色和布局。借助应用资源,您无需修改代码即可轻松更新应用的各种特性。通过提供备用资源集,您可以针对各种设备配置(如不同的语言和屏幕尺寸)优化您的应用。
对于您在 Android 项目中加入的每一项资源,SDK 构建工具均会定义唯一的整型 ID,您可以利用此 ID 来引用资源,这些资源或来自应用代码,或来自 XML 中定义的其他资源。例如,如果您的应用包含名为 logo.png
的图像文件(保存在 res/drawable/
目录中),则 SDK 工具会生成名为 R.drawable.logo
的资源 ID。此 ID 映射到应用特定的整型数,您可以利用它来引用该图像,并将其插入您的界面。
项目基础知识
Android 项目视图
如需查看项目的实际文件结构(包括在 Android 视图中隐藏的所有文件),请从 Project 窗口顶部的下拉列表中选择 Project。
如果选择 Project 视图,您可以看到更多文件和目录。其中最重要的目录如下:
-
module-name/
-
build/
包含构建输出。
-
libs/
包含专用库。
-
src/
包含相应模块在以下子目录中的所有代码和资源文件:
-
androidTest/
包含在 Android 设备上运行的插桩测试的代码。如需了解详情,请参阅 Android 测试文档。
-
main/
包含“主”源代码集文件:所有 build 变体共享的 Android 代码和资源(其他 build 变体的文件位于同级目录中,例如调试 build 类型的文件位于
src/debug/
中)。-
AndroidManifest.xml
描述应用及其各个组件的性质。如需了解详情,请参阅 AndroidManifest.xml 文档。
-
java/
包含 Java 源代码。
-
jni/
包含使用 Java 原生接口 (JNI) 的原生代码。如需了解详情,请参阅 Android NDK 文档。
-
gen/
包含 Android Studio 生成的 Java 文件,例如
R.java
文件和使用 AIDL 文件创建的接口。 -
res/
包含应用资源,例如可绘制对象文件、布局文件和界面字符串。如需了解详情,请参阅应用资源。
-
assets/
包含应按原样编译为
.apk
文件的文件。您可以使用 URI 按照与典型文件系统相同的方式导航此目录,并使用AssetManager
以字节流的形式读取文件。例如,此目录非常适合存储纹理和游戏数据。
-
-
test/
包含在主机 JVM 上运行的本地测试代码。
-
-
build.gradle
(模块)这定义了特定于模块的构建配置。
-
-
build.gradle
(项目)这定义了适用于所有模块的构建配置。该文件是项目不可或缺的一部分,因此您应该将其与所有其他源代码一起保留在修订版本控制系统中。
如需了解其他构建文件,请参阅配置构建。
项目结构设置
如需更改 Android Studio 项目的各种设置,请依次点击 File > Project Structure 打开 Project Structure。该对话框包含以下各部分:
- SDK Location:设置项目使用的 JDK、Android SDK 和 Android NDK 的位置。
- Project:设置 Gradle 和 Android Plugin for Gradle 的版本以及代码库位置名称。
- Modules:可让您修改特定于模块的构建配置,包括目标和最低 SDK、应用签名以及库依赖项。请参阅下文的模块。
模块
“Modules”设置部分可让您更改项目的每个模块的配置选项。**每个模块的设置页面都分成以下标签页:
- Properties:指定编译模块所用的 SDK 和构建工具的版本。
- Signing:指定用于为您的应用签名的证书。
- Flavor:可让您创建多个 build 变种,其中的每个变种用于指定一组配置设置,例如模块的最低和目标 SDK 版本以及版本代码和版本名称。**例如,您可以定义两个变种,一个变种的最低 SDK 为 15、目标 SDK 为 21,另一个变种的最低 SDK 为 19、目标 SDK 为 23。
- build Types:可让您创建和修改 build 配置,如配置 Gradle build 中所述。默认情况下,每个模块都有“debug”和“release”这两种 build 类型,但您也可以根据需要定义更多 build 类型。****
- Dependencies:列出该模块的库、文件和模块依赖项。您可以在此窗格中添加、修改和删除依赖项。如需详细了解模块依赖项,请参阅配置 Gradle 构建。
工作流程基础知识
从概念上来讲,Android 应用的开发工作流程与其他应用平台相同。不过,要想高效地构建精心设计的 Android 应用,您需要用到一些专业工具。以下列表概述了构建 Android 应用的流程,并添加了指向部分 Android Studio 工具(在开发流程的每个阶段,您应该都会用到这些工具)的链接。
设置工作区
您可能已完成此阶段:安装 Android Studio 并创建项目。 如需查看介绍部分 Android 开发基础知识的 Android Studio 演示,您也可以参阅构建您的首个应用指南。
编写您的应用
现在您可以开始编写了。Android Studio 包含多种工具和智能功能,可帮助您更快速地编写应用、编写高质量的代码、设计界面以及为不同的设备类型创建资源。如需详细了解可用的工具和功能,请参阅编写应用。
构建并运行
在此阶段,您可以将项目构建成一个可调试的 APK 软件包,以便在模拟器或 Android 设备上安装和运行。如需详细了解如何运行代码,请参阅构建和运行应用。
您也可以开始自定义 build。例如,您可以创建 build 变体,从同一项目生成不同版本的应用,并缩减代码和资源,以减小应用大小。有关如何自定义 build 的说明,请参阅配置 build。
调试、剖析和测试
在这个迭代阶段,您可以继续编写应用,但精力侧重于消除错误并优化应用性能。当然,创建测试可以帮助您完成这些工作。
如需查看和分析各种性能指标(如内存使用情况、网络流量、CPU 影响等),请参阅性能剖析工具。
有关如何构建测试的说明,请参阅测试应用。
发布
当您准备好向用户发布应用时,还需要考虑一些其他事项,例如管理应用版本、构建 Android App Bundle 和使用密钥为应用签名。如需了解详情,请参阅发布应用。