NJUOS-31-Android系统

本文最后更新于:5 个月前

复习

  • 应用视角的操作系统

    • 对象 + API
  • 硬件视角的操作系统

    • 一个控制了整个计算机硬件的程序
  • 本次课回答的问题

    • Q: 一个真正 “实用” 的操作系统还需要什么?
  • 本次课主要内容

    • Android 应用和系统

走向移动互联网时代

我们的世界悄然发生的变化

我们已然无法想象没有手机的生活。

img

(把计算机变小从来不是一个新想法,但是……)

Android 应用

(把计算机变小从来不是一个新想法,但是……)

一次、再一次,改变世界

img

Android

Android 官方主页

  • Linux + Framework + JVM
    • 在 Linux/Java 上做了个二次开发?
    • 并不完全是:Android 定义了应用模型
  • 支持 Java 是一个非常高瞻远瞩的决定
    • Qualcomm MSM7201
      • ARMv6 指令集
      • 528MHz x 1CPU, 顺序八级流水线
      • TSMC 90nm
    • “跑个地图都会卡”
      • 但摩尔定律生效了!

Android Apps

Android 应用

“四大组件”

img

  • Activity

    • 应用程序的 UI 界面 (Event Driven)

    • 存在一个 Activity Stack (应用拉起)

  • Service

    • 无界面的后台服务
  • Broadcast

    • 接受系统消息,做出反应
      • 例如 “插上电源”、“Wifi 断开”
  • ContentProvider

    • 可以在应用间共享的数据存储 (insert, update, query, …)

例子:计算器

img

Calculator

  • AndroidManifest.xml - 应用的 “元数据”
    • 例如需要的权限、监听的 Intents 等
  • res - 资源文件
    • 各国语言的翻译
    • 图片文件 (例如图标)
  • 编写应用逻辑只需要重载 Activity 的 onCreate, … 即可

Android 系统

Platform API 之下:一个 “微内核”

img

  • 通过 “Binder IPC”

    • Remote Procedure Call (RPC)

      • remote.transact()
    • 在性能优化和易用之间的权衡

      • 注册机制
        • 相比之下,管道/套接字就太 “底层” 了,需要手工管理的东西太多
        • 基于共享内存实现
        • Linux Kernel binder driver
        • 服务端线程池

然后……海量的代码

一个真正的 “操作系统”

  • adb (Android Debug Bridge)

    • adb push/pull/install

    • adb shell

      • screencap /sdcard/screen.png
      • sendevent
    • adb forward

    • adb logcat/jdwp

  • 一系列衍生的工具

    • 开发者选项

    • scrcpy

    • Monkey/UI Automator

拥抱变化的世界

我们也试着蹭一波热度 (也决定不再蹭了)

  • Cross-device record and replay for Android apps (ESEC/FSE’22, Under review)
  • Detecting non-crashing functional bugs in Android apps via deep-state differential analysis (ESEC/FSE’22, Under review)
  • Push-button synthesis of watch companions for Android apps (ICSE’22)
  • ComboDroid: Generating high-quality test inputs for Android apps via use case combinations (ICSE’20)
  • Characterizing and detecting inefficient image displaying issues in Android apps (SANER’19)
  • User guided automation for testing mobile apps (APSEC’14)

总结

  • 本次课回答的问题

    • Q: 一个真正 “实用” 的操作系统 (生态) 是如何构成的?
  • Takeaway messages

    • 服务、服务、服务

      • Android Platform API
      • Google Mobile Service (GMS)
      • 海量的工程细节
    • 复杂系统无处不在

      • 能驾驭整个系统复杂性的架构师
        • 大量高水准的工程师,他们都在哪里?

References

  1. slides
  2. vedio

NJUOS-31-Android系统
https://alexanderliu-creator.github.io/2023/10/13/njuos-31-android-xi-tong/
作者
Alexander Liu
发布于
2023年10月13日
许可协议