让旧手机运行 Android O? 看看 Android Go 是如何做到的

简介:

1fac18706cc65bade2cb0a904609b29f708c7064

Android Go 是谷歌基于 Android 8.1 Oreo 的精简版 Android 系统,是成为针对 1GB 或更低内存的低端设备的 Android 优化版。Android Go 是为下一代入门级设备开发的,为的是确保发展中国家的消费者仍然可以使用功能正常的智能手机来访问互联网并使用应用程序。

Android Go 拥有各种性能优化和改进,比如其内存占用比普通 Android O 少一半,设备平均运行速度比在同一设备上安装常规的 Android O 快 15%。这些优化是通过谷歌制作的一些专门的构建配置完成的,将在后面进行解释。

87d2c2e38ba2fbe24187eb563401fb81beec524f

Android Go 还益于特殊的 “Go” 系列应用程序,比如 Files Go,YouTube Go 和 Google Maps Go。这些是由谷歌制作的轻量级版应用,不那么吃配置。这意味着那些使用 Android Go 设备的用户可以拥有标准的 Android 系统体验,开心地使用谷歌全家桶,无需购买昂贵的旗舰手机。

这关乎谷歌扩大智能机市场的计划。但是开发者们可能会有疑问,如果 Android Go 主要基于构建配置和一套优化过的谷歌应用组成,那么开发者是否可以自己构建一个 “Android Go”?答案是肯定的。

一些 LineageOS 开发者已经在开发拥有 Android Go 优化的 ROM

已经有一部分开发者对 Android Go 十分感兴趣,比如 XDA 认可的开发者 AdrianDC,正在做 LineageOS 15.1 上的工作,同时也在进行针对几款老式索尼手机的 Android Go 配置构建 。上面提到的索尼设备是索尼 Xperia SP,索尼 Xperia T,索尼 Xperia V 和索尼 Xperia TX。这些设备已经是五六年前推出的 “ 准古董 “ 了,但是他们将会得到拥有 Android Go 优化的 LineageOS 15.1,这可能会让这些 “ 准古董 “ 流畅地运行 Google “Go” 系列应用程序。

任何独立的 LineageOS 开发者都应该可以引入一个 Android Go 的构建配置,使得 LineageOS 成为 Android Go 优化和其他优化的综合版本。这意味着那些可能购买了索尼 Xperia T 的人,昨天手机还在运行 Android 4.0.4,明天就能够用上 Android 8.1,以及最新的 YouTube Go 和 Google Maps Go 等应用程序。

Android Go 如何帮助老 Android 手机运行 Android Oreo

Android 上的配置构建是一组与 Android 系统各个方面相关的参数,这些参数通常这会改变系统的行为,而 Android Go 主要就是针对构建配置进行优化。

bba2d764a3421188f52c8041a5cfa8681b930463

如果想让 Android Go 发挥作用。其中一些配置构建必须在重新编译的情况下才能修改,并且会成为 ROM 蓝图的一部分。但是这涉及诸如 Android 在存储和内存使用等多个方面,包括自动存储管理,Android 低内存杀手,dalvik 可执行文件 ( DEX ) ,优化和针对应用程序的 RAM 限制。而 APK 文件由 DEX 文件组成,因此你可以将 APK 文件看成一个包含许多 .dex 文件的 ZIP 文件。另外,自动存储管理将由 Files Go 来控制,而不是让 Android 系统控制。

Android Go 参考了 Android 的低 RAM 模式

在 Android 4.4 KitKat 中,谷歌推出了一个名为 “low-ram” 的新标志,旨在支持只有 512MB 内存的设备。它对系统进行了一些优化,这些改变对于低 RAM 设备是非常有效的。

  • 已验证的内存节省内核配置:切换到 ZRAM

  • 如果未被缓存或者缓存太大,杀死这个进程

  • 不要让大型服务把自己归类到 A 服务里(避免启动器被误杀)

  • 如果进程在空闲维护中变得过大,杀死这个进程

  • 序列化的后台服务启动

  • 调谐低 RAM 设备的内存使用:更严的内存不足预警级别,更小的图形缓存等

  • 修改 system_server 和 SystemUI 进程

  • 在 Dalvik 预载 dex 缓存

  • 经过验证的 JIT-OFF 选项

  • 减少了每个进程的字体缓存占用

  • 引入 ArrayMap / ArraySet,并在框架中广泛使用,作为 HashMap / HashSet 的轻量级替换

Android Go 使用修改的低内存杀手和 dex 优化

鉴于 Android Go 主要用于内存为 1GB 或更低的设备,还需要进行更积极的内存管理。Android Go 以几种不同的方式修改低内存杀手 ( low memory killer ) 。首先,当大量的 RAM 被消耗时,低内存杀手将进入 “ 临界压力 “ 状态。这是因为当内存使用率变得过高时,设备存储上的交换文件被频繁访问,系统就会变卡。保持 RAM 有足够的空余能避免系统不停地使用交换文件或者爆内存。

通过将各种基本服务以及 WiFi 服务设置为 “ 速度档 “,可以让这些服务进行提前编译,可以减少 RAM 的使用和存储。同时共享 APK 被设置为 “ 加速 “,通过优化 dex 指令来获得更好的性能,从而延长电池寿命和额外的 CPU 周期。

在 dex 优化方面,Android Go 做了很多,比如对不常用的应用进行降级处理。此处降级并不是说应用程序的实际版本号会被降低,而是指这个应用程序的 dalvik_cache 将被清除。使用 Dalvik 缓存是为了使设备不用重新编译应用程序,而只编译最需要的部分并对其进行缓存。其余部分在应用程序运行时使用 Just in Time(JIT)编译器进行编译。但是如果应用程序在 10 天内没有使用,那么预编译的应用程序的主要部分也将被删除。这样做是为了释放尽可能多的空间。另一个简单的变化是不允许应用程序的 RAM 使用超过 256MB,以至于应用程序无法使用设备上的所有 RAM。

Android Go 将成为低端设备定制 ROM 的未来吗?

目前并不能下一个定论,但是对于旧设备上的自定义 ROM 开发来说,前景很光明。虽然在设备上运行最新版本的 Android 可能还有其他问题,但从理论上说,基于 Android O 并进行了优化的 Android Go 肯定比 Android 4.4 用起来要舒服多了。


原文发布时间为:2018-11-25

本文作者:yuer

本文来自云栖社区合作伙伴“终端研发部”,了解相关信息可以关注“终端研发部”。

相关文章
|
2月前
|
算法 数据处理 Android开发
掌握安卓性能优化的秘诀:电池寿命与运行效率的提升
【10月更文挑战第6天】 本文深入探讨了安卓应用开发中的性能优化技巧,重点分析了影响电池寿命和运行效率的关键因素,并提供了针对性的优化策略。通过代码优化、资源管理、后台任务处理等方法,开发者可以显著提升应用的续航能力和流畅度。同时,结合具体案例,展示了如何在实际开发中应用这些技巧,确保应用在各种场景下都能保持高效运行。本文旨在为安卓开发者提供实用的性能优化指导,助力其打造更优质的应用体验。
51 2
|
6月前
|
Java API 开发工具
如何将python应用编译到android运行
【6月更文挑战第27天】本文介绍在Ubuntu 20上搭建Android开发环境,包括安装JRE/JDK,设置环境变量,添加i386架构,安装依赖和编译工具。并通过`p4a`命令行工具进行apk构建和清理。
90 6
如何将python应用编译到android运行
|
10天前
|
Android开发 数据安全/隐私保护 虚拟化
安卓手机远程连接登录Windows服务器教程
安卓手机远程连接登录Windows服务器教程
38 4
|
1月前
|
安全 搜索推荐 Android开发
Android vs. iOS:解锁智能手机操作系统的奥秘####
【10月更文挑战第21天】 在当今这个数字化时代,智能手机已成为我们生活中不可或缺的伙伴。本文旨在深入浅出地探讨两大主流操作系统——Android与iOS的核心差异、优势及未来趋势,帮助读者更好地理解这两个平台背后的技术哲学和用户体验设计。通过对比分析,揭示它们如何塑造了我们的数字生活方式,并展望未来可能的发展路径。无论您是技术爱好者还是普通用户,这篇文章都将带您走进一个充满创新与可能性的移动世界。 ####
51 3
|
2月前
|
Ubuntu Linux Android开发
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
本文介绍了如何在Android设备上安装Termux和AnLinux,并通过这些工具运行Ubuntu系统和桌面环境。
141 2
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
|
2月前
|
Web App开发 Android开发
利用firefox调试安卓手机端web
该教程详细介绍如何通过Firefox浏览器实现手机与电脑的远程调试。手机端需安装最新版Firefox,并按指定步骤设置完成;电脑端则需安装15版及以上Firefox。设置完成后,通过工具栏中的“远程调试”选项,输入手机IP地址即可连接。连接确认后,即可使用电脑端Firefox调试器调试手机上的Web信息。注意,调试前手机需提前打开目标网页。
72 2
|
2月前
|
Java Unix Linux
Android Studio中Terminal运行./gradlew clean build提示错误信息
遇到 `./gradlew clean build`命令执行出错时,首先应检查错误信息的具体内容,这通常会指向问题的根源。从权限、环境配置、依赖下载、版本兼容性到项目配置本身,逐一排查并应用相应的解决措施。记住,保持耐心,逐步解决问题,往往复杂问题都是由简单原因引起的。
278 2
|
3月前
|
移动开发 Android开发 数据安全/隐私保护
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
|
2月前
|
Android开发 iOS开发 UED
安卓与iOS的较量:谁才是智能手机市场的王者?
本文将深入探讨安卓和iOS两大智能手机操作系统之间的竞争关系,分析它们各自的优势和劣势。通过对比两者在市场份额、用户体验、应用生态等方面的表现,我们将揭示出谁才是真正的市场领导者。无论你是安卓粉丝还是iOS忠实用户,这篇文章都将为你提供一些有趣的观点和见解。
|
4月前
|
开发工具 Android开发
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
170 4
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file