第1章 Android应用和开发环境

依据电子工业出版社第4版完整目录,覆盖41个本页节点:锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用

第1章 Android应用和开发环境

本页依据电子工业出版社《疯狂Android讲义》第4版完整目录独立重构,不复制原文。版本锁定李刚、2019年3月、764页、ISBN 9787121360091,以Android 9.x、Android Studio与Java为基线;现代项目必须另建迁移层,不能无说明地把Compose或最新targetSdk规则写回原书语境。

学习目标

  • 能解释“第1章 Android应用和开发环境”全部正式节点的组件所有者、生命周期、线程、权限和Android 9.x版本边界。
  • 能实现“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”的最小垂直切片,并保存构建、设备操作、原始日志和断言。
  • 能比较正常运行、旋转、后台、进程重建、权限拒绝与外部故障下的行为差异。
  • 能设计推翻当前实现的反例,并凭环境指纹、Gradle任务图、组件清单、签名APK和安装日志完成独立交接。

从项目合同与生命周期开始

第4版以近百个实例和两个综合项目组织知识,不是零散API列表。每个节点都要回答用户从哪里进入、哪个组件拥有工作、回调在哪个线程发生、哪些事实必须恢复、需要什么权限、外部系统如何失败,以及资源何时释放。连接Activity、Fragment、View、Service、Receiver、线程与媒体资源。

界面字段和进程单例不是可靠事实源。要按大小和寿命放入Bundle、文件、SQLite或服务端。Intent、Provider、网络、定位、地图和系统服务构成,成功响应只是其中一个样本。

本书准确反映Android 9时代。要求先复现原书机制,再迁移组件导出、分区存储、通知、后台启动、位置和废弃API。保证示例不是只在作者机器上可用。

出版社完整目录逐节点映射

第1章 Android应用和开发环境

正式节点 1/41。 先说明“第1章 Android应用和开发环境”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.1 Android的发展和历史

正式节点 2/41。 先说明“1.1 Android的发展和历史”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.1.1 Android的发展和简介

正式节点 3/41。 先说明“1.1.1 Android的发展和简介”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.1.2 Android 9.x平台架构及特性

正式节点 4/41。 先说明“1.1.2 Android 9.x平台架构及特性”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.2 使用Gradle自动化构建项目

正式节点 5/41。 先说明“1.2 使用Gradle自动化构建项目”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.2.1 下载和安装Gradle

正式节点 6/41。 先说明“1.2.1 下载和安装Gradle”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.2.2 Gradle构建文件和创建任务

正式节点 7/41。 先说明“1.2.2 Gradle构建文件和创建任务”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.2.3 Gradle的属性定义

正式节点 8/41。 先说明“1.2.3 Gradle的属性定义”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.2.4 增量式构建

正式节点 9/41。 先说明“1.2.4 增量式构建”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.2.5 Gradle插件和java、application等插件

正式节点 10/41。 先说明“1.2.5 Gradle插件和java、application等插件”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.2.6 依赖管理

正式节点 11/41。 先说明“1.2.6 依赖管理”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.2.7 自定义任务

正式节点 12/41。 先说明“1.2.7 自定义任务”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.2.8 自定义插件

正式节点 13/41。 先说明“1.2.8 自定义插件”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.3 搭建Android开发环境

正式节点 14/41。 先说明“1.3 搭建Android开发环境”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.3.1 安装Android Studio

正式节点 15/41。 先说明“1.3.1 安装Android Studio”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.3.2 下载和安装Android SDK

正式节点 16/41。 先说明“1.3.2 下载和安装Android SDK”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.3.3 在安装过程中常见的错误

正式节点 17/41。 先说明“1.3.3 在安装过程中常见的错误”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.3.4 安装运行、调试环境

正式节点 18/41。 先说明“1.3.4 安装运行、调试环境”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.4 Android常用开发工具的用法

正式节点 19/41。 先说明“1.4 Android常用开发工具的用法”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.4.1 使用Monitor进行调试

正式节点 20/41。 先说明“1.4.1 使用Monitor进行调试”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.4.2 Android Debug Bridge(ADB)的用法

正式节点 21/41。 先说明“1.4.2 Android Debug Bridge(ADB)的用法”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.4.3 使用mksdcard管理虚拟SD卡

正式节点 22/41。 先说明“1.4.3 使用mksdcard管理虚拟SD卡”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.5 开始第一个Android应用

正式节点 23/41。 先说明“1.5 开始第一个Android应用”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.5.1 使用Android Studio开发第一个Android应用

正式节点 24/41。 先说明“1.5.1 使用Android Studio开发第一个Android应用”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.5.2 通过Andorid Studio运行Android应用

正式节点 25/41。 先说明“1.5.2 通过Andorid Studio运行Android应用”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.6 Android应用结构分析

正式节点 26/41。 先说明“1.6 Android应用结构分析”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.6.1 Android项目结构分析

正式节点 27/41。 先说明“1.6.1 Android项目结构分析”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.6.2 自动生成的R.java

正式节点 28/41。 先说明“1.6.2 自动生成的R.java”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.6.3 res目录说明

正式节点 29/41。 先说明“1.6.3 res目录说明”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.6.4 Android应用的清单文件:AndroidManifest.xml

正式节点 30/41。 先说明“1.6.4 Android应用的清单文件:AndroidManifest.xml”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.6.5 应用程序权限说明

正式节点 31/41。 先说明“1.6.5 应用程序权限说明”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.7 Android应用的基本组件介绍

正式节点 32/41。 先说明“1.7 Android应用的基本组件介绍”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.7.1 Activity和View

正式节点 33/41。 先说明“1.7.1 Activity和View”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.7.2 Service

正式节点 34/41。 先说明“1.7.2 Service”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.7.3 BroadcastReceiver

正式节点 35/41。 先说明“1.7.3 BroadcastReceiver”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.7.4 ContentProvider

正式节点 36/41。 先说明“1.7.4 ContentProvider”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.7.5 Intent和IntentFilter

正式节点 37/41。 先说明“1.7.5 Intent和IntentFilter”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.8 使用Android 9来签名APK

正式节点 38/41。 先说明“1.8 使用Android 9来签名APK”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.8.1 使用Android Studio对Android应用签名

正式节点 39/41。 先说明“1.8.1 使用Android Studio对Android应用签名”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.8.2 使用Android 9的命令对APK签名

正式节点 40/41。 先说明“1.8.2 使用Android 9的命令对APK签名”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

1.9 本章小结

正式节点 41/41。 先说明“1.9 本章小结”解决的用户任务和Android合同,再标出组件所有者、回调线程、持久状态、权限、外部输入与销毁点。实现必须服务于“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”,并留下可在模拟器或真机重放的输入、操作、日志和断言。

先预测旋转、后台、进程重建、权限拒绝、断网或设备能力缺失时会怎样,再只改变一个条件。只会复述API或跑通正常路径,不算覆盖该节点。

最小可执行切片

先把业务状态转换与Android副作用分开,便于在设备之外验证不变量:

sealed interface ScreenState permits Loading, Ready, Failed {}
record Loading() implements ScreenState {}
record Ready(String key) implements ScreenState {}
record Failed(String reason, boolean retryable) implements ScreenState {}
 
ScreenState reduce(ScreenState current, UiEvent event) { return nextState(current, event); }

固定环境并从命令行保留构建和设备证据:

./gradlew --no-daemon clean test assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apk
adb shell am force-stop org.example.app
adb shell monkey -p org.example.app 1
adb logcat -d -v threadtime > run.log

先写行为合同,再执行用户动作与故障注入:

Given a pinned JDK, SDK, Gradle build, device API, locale, permission state, and input
When the owner is recreated after state saving or process death
Then durable facts reconstruct the same user-visible state
And cancelled work cannot update a destroyed owner
And denied permission, offline input, malformed data, and missing hardware remain recoverable

三段代码分别约束状态模型、环境重放和行为结果。第4版源码使用当时Java/Android API;这里的状态骨架只说明测试边界,不冒充原书代码。真实项目还需要静态检查、仪器测试、无障碍检查和发布构建。

线程、权限、状态与资源

主线程负责输入、生命周期分发和UI;文件、SQLite、网络、图片解码、OpenGL准备与长计算不得阻塞帧。后台结果返回前确认所有者仍有效,Service并不自动拥有后台线程,Receiver也不能无限运行。每个实现列出入口、线程、事实源、权限、取消点、关闭责任和用户可见失败。

Intent、Provider、WebView、JSON、文件URI、地图Key、位置和传感器样本都按不可信输入处理。校验action、scheme、MIME、大小、授权、时效和响应者;导出组件最小授权;日志、截图与数据库不得泄露联系人、短信、位置、令牌或签名密钥。

性能以用户任务衡量:界面看首帧和掉帧,列表看回收与分配,媒体和图形看帧时间与内存,网络看超时和取消,传感器看采样与耗电,后台工作看约束与重复调度。比较时固定设备、构建类型、数据规模和网络条件。

现代迁移一次改变一个条件。AsyncTask、IntentService、旧Fragment、外部存储、后台Service、隐式广播、HTTP明文、旧定位和地图SDK都需要查当前合同;先保存Android 9基线,再迁移并保留行为差异、测试和回滚。

本章回顾

本页从“第1章 Android应用和开发环境”覆盖到“1.9 本章小结”,共41个正式目录条目。掌握标准是能沿“锁定Android 9.x、Java、Gradle与Android Studio环境,从工程结构、组件、权限和签名建立第一个可安装应用”解释组件与数据边界,运行正常、重建与失败实验,并让另一位开发者仅凭环境指纹、Gradle任务图、组件清单、签名APK和安装日志重放结论。

练习

问题 1:“第1章 Android应用和开发环境”覆盖哪些正式节点和主线?

问题 2:怎样建立本页最小可执行实验?

问题 3:为什么只在正常路径运行不能证明完成?

问题 4:怎样设计能推翻实现的反例?

问题 5:从Android 9迁移到现代targetSdk时如何控制变量?

问题 6:达到独立交接标准需要什么?

名词解释

本章出现的专业名词,用大白话再讲一遍。

生命周期所有者
负责创建、取消并最终释放组件、任务或资源的明确作用域。
可恢复状态
配置变化或进程重建后能从保存事实重新构造的最小用户状态。
外部合同
跨组件或系统边界交换数据时必须验证的类型、权限、大小、时序与失败约束。
版本边界
Android版本、targetSdk、设备能力、权限与依赖共同限定的行为适用范围。
证据链
由环境指纹、输入、操作、日志、状态快照和断言组成的可重放结论。

← 上一页:《疯狂Android讲义(第4版)》权威学习地图 · 下一页:第2章 Android应用的界面编程 →

资料与写作方式声明

本章以李刚《疯狂Android讲义》第4版权威目录界定学习范围,并结合正文列出的技术资料独立重写;不宣称复现原书正文,也不沿用原作表述。

原作版权归作者与出版社所有;本站原创教学结构与表述仅供学习交流。

讨论

评论区加载中…