Android开发基础知识-官方文档摘录

1,545 阅读10分钟

应用基础知识

介绍

您可以使用 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 和使用密钥为应用签名。如需了解详情,请参阅发布应用