安卓手机APP开发__支持16KB的页面大小

安卓手机APP开发__支持16KB的页面大小

目录

概述

得到的利益和性能

检查你的APP是否被影响了

构建你的APP支持16 KB的设备

升级到AGP版本到8.3或者更高

使用16 KB ELF对齐,来编译你的APP

安卓NDK r26及更低

安卓NDK r27及更高

检查引用了特定的页大小的代码实例

在一个16 KB环境中测试你的app


概述

从历史上看,安卓仅支持4 KB大小的内存页面。它已经优化了系统的内存的性能。
从安卓15开始,安卓支持设备配置为使用16KB的页面大小。

随着设备制造商持续地制造大容量的物理内存的设备,这些设备中的许多设备
将要配置为16KB的页面大小,来优化设备的性能。加上对这个配置的支持,
能让你的APP运行在这些新设备上,并且从相关的设备的性能的提升上受益。
为了帮助你实现这一点,我们提供了如何检查你的APP是否被影响,如何重构
你的APP,并且如何测试你的APP在16KB的页面大小上的表现。

得到的利益和性能

设备配置为16KB的页面大小,在平均来看,使用的内存稍微变多了,而且在
系统和APP上都得到了性能的提升。

当系统处于低的内存压力之下时,更低的APP开启时间:平均低了3.16%
在APP启动时,能耗更少了,平均降低4.56%
更多的照相机启动
系统启动更快了

这些提升基于我们的测试,在实际的设备上有差异。我们会提供额外的分析。

检查你的APP是否被影响了

如果你的APP使用了任何的原生的代码,你应该重构代码,来支持16 KB的设备。
如果你不确定是否使用了原生的代码,你能使用APK分析器来检测。

构建你的APP支持16 KB的设备

为了支持16 KB的设备,你的APP使用原生的代码,应该完成如下的步骤:

升级到AGP版本到8.3或者更高


我们推荐使用非压缩的共享库,但如果你没有升级到AGP版本到8.3,那么备选的方案是
使用压缩的共享库。
更新Gradle的配置,来使用压缩的共享库。

Groovy
Kotlin

在你的build.gradle文件中,加上如下的内容:


android {
  ...
  packagingOptions {
      jniLibs {
        useLegacyPackaging true
      }
  }
}

使用16 KB ELF对齐,来编译你的APP

16 KB的设备要求共享库的ELF段被合适的对齐,使用16 KB ELF对齐,来确保你的APP
正常地运行。

为了编译你的APP,完成如下的步骤,这依赖于你的安卓的NDK的版本。
重要的内容:如果你的APP使用了任何预构建的共享库,你都必须以相同的方式重编译它们。
然后重新导入16 KB ELF对齐的共享库进入你的APP.


安卓NDK r26及更低

为了支持编译16 KB ELF对齐的共享库,在安卓NDK r26及更低时,你需要更新
你的ndk-build 或者cmake的配置,如下:

ndk-build
CMake

更新你的Android.mk,启用16 KB ELF对齐:


LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"

重要的内容:如果你的APP动态地链接到C++标准库(libc++_shared.so)
使用的NDK是r26以及更低的版本,那么推荐更新到r27以及更高的版本。
否则将安装失败。

如果你不能升级到安卓NDK的新的版本,那么你可能要静态地编译C++标准库,
再更新你的APP。

安卓NDK r27及更高

为了支持编译共享库,你需要更新链接标识:


ndk-build
Groovy
Kotlin


其它的构建系统在你的Application.mk文件中加上:

APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true

检查引用了特定的页大小的代码实例

如果你的app是16 KB对齐的,你的app如果在代码中假定了一个设备使用一特定的页大小,
这将遇到程序错误。为了避免这一情况,完成如下的步骤:

移除任何对PAGE_SIZE的常数引用的硬编码依赖,或者是在你的代码逻辑中假定了一个
设备的页大小是4 KB的实例。
使用getpagesize() 或者是 sysconf(_SC_PAGESIZE)来代替。
查找对mmap() 和其它的 API的使用,这些方法需要页对齐的参数,如果需要的话,
用备选方法来替换它。
    

在一个16 KB环境中测试你的app

你构建了支持16 KB设备的app后,你将要在一个16 KB环境中测试你的app。为了做这一点,
使用如下的测试环境之一:

在ARM64上,使用有16 KB页大小的Cuttlefish
在x86-64上,使用有16 KB页大小的模拟Cuttlefish
使用有16 KB页大小的支持的Flash Pixel 6 和 Pixel 6 pro

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王伟1982

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值