惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog
C
Check Point Blog
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
SecWiki News
SecWiki News
有赞技术团队
有赞技术团队
Latest news
Latest news
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
Project Zero
Project Zero
H
Help Net Security
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
G
GRAHAM CLULEY
Engineering at Meta
Engineering at Meta
T
Threat Research - Cisco Blogs
腾讯CDC
P
Proofpoint News Feed
L
LINUX DO - 热门话题
C
Cisco Blogs
P
Palo Alto Networks Blog
Vercel News
Vercel News
P
Privacy International News Feed
爱范儿
爱范儿
Scott Helme
Scott Helme
L
Lohrmann on Cybersecurity
MyScale Blog
MyScale Blog
K
Kaspersky official blog
B
Blog RSS Feed
美团技术团队
Microsoft Security Blog
Microsoft Security Blog
O
OpenAI News
博客园 - 叶小钗
量子位
T
Tenable Blog
C
Cybersecurity and Infrastructure Security Agency CISA
J
Java Code Geeks
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Hacker News: Ask HN
Hacker News: Ask HN
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
L
LINUX DO - 最新话题
F
Fortinet All Blogs
N
News | PayPal Newsroom
The Hacker News
The Hacker News
C
CXSECURITY Database RSS Feed - CXSecurity.com
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
博客园 - 【当耐特】
N
News and Events Feed by Topic
V
Visual Studio Blog
Google DeepMind News
Google DeepMind News
Last Week in AI
Last Week in AI

崎径 其镜

Unity CVE-2025-59489 漏洞修复实践(Google Play 合规) 从零配置 VS Code C++ 环境 力扣笔记 一文详解Hexo 博客搭建 Unity 游戏的 Google Play 16 kb页面对齐处理 Unity 升级到 2022 踩坑记录(URP / 黑屏 / HTTP) iOS 应用开启包外存储访问(文件共享) xlua学习笔记 Lua新知 EFK日志分析系统的搭建 使用贝塞尔曲线实现道具随机飞动效果 震惊,JS不加分号会造成错误!? Linux升级Python Github图床工具 JS使用replace()函数全部替换 JS使用Splice()函数操作数组 当你的程序连接Mysql然后崩溃时 安卓应用闪屏 安卓各渠道SDK接入体验 某微信爬虫工具多开方案 U3D问题总结(七) lua U3D问题总结(六) 优化 U3D问题总结(五) 渲染与光照 U3D问题总结(四) 物理相关 U3D问题总结(三) Unity基础
Android Google Play 16 KB 页面对齐适配指南
Anqi Zhao · 2026-03-26 · via 崎径 其镜

Google Play 要求所有应用在 2026 年 5 月 31 日前完成 16 KB 内存页面大小适配。本文记录完整的检测与适配流程。

1. 背景

Android 15 引入了 16 KB 内存页面对齐要求,Google Play 强制要求应用中的所有 .so 文件满足以下三个条件:

  1. PT_LOAD segment 对齐 >= 16 KB
  2. RELRO 段必须位于 segment 末尾(suffix)
  3. RELRO 段末尾必须 16 KB 对齐

官方文档:Android 页面大小适配指南


2. 检测方法

2.1 方法一:NDK 工具手动检测

解压 APK 取出 .so 文件,使用 NDK 自带的 llvm-objdump 工具检测(必须用 PowerShell,cmd 不支持管道过滤):

llvm-objdump.exe -p E:\Test\so\arm64-v8a\libanogs.so | Select-String -Pattern "LOAD"

查看输出中 LOAD 行末尾的对齐值:

  • 2**14(即 16384)及以上 ✅ 合规
  • 2**12(4096)或 2**13(8192)❌ 不合规

工具路径:{YourNDKPath}\toolchains\llvm\prebuilt\windows-x86_64\bin

注意:此方法只检测 PT_LOAD,不检测 RELRO。


2.2 方法二:Google 官方脚本检测

Google 提供了完整的 ELF 对齐检测脚本,可同时检测 PT_LOAD 和 RELRO:

脚本地址:check_elf_alignment.sh

check_elf_alignment.sh APK_NAME.apk

2.3 方法三:Android Studio APK Analyzer

将 Android Studio 升级到最新版本,使用内置的 APK Analyzer 功能即可可视化检测。

常见报错信息:

# PT_LOAD 不合规
4 KB LOAD section alignment, but 16 KB is required

# RELRO 不合规
RELRO is not a suffix and its end is not 16 KB aligned

3. 适配方法

3.1 Unity 相关 .so

Unity 引擎生成的 .so 不合规时,需要升级 Unity 编辑器版本来解决,无法手动修改。

升级后若 C++ 代码没有重新导出,可以删除以下缓存目录强制重新生成:

Library/Bee/
Library/il2cpp_*/

3.2 第三方 SDK 的 .so

联系 SDK 提供商升级至合规版本。若提供商无法及时支持,应考虑移除该 SDK。

3.3 自行用 NDK 编译的 .so

升级 NDK 并添加链接参数

在编译命令中增加 max-page-sizecommon-page-size 参数:

{NDK Path}/ndk-build ^
NDK_PROJECT_PATH=. ^
APP_BUILD_SCRIPT=Android.mk ^
NDK_APPLICATION_MK=Application.mk ^
APP_ABI="armeabi-v7a x86 arm64-v8a x86_64" ^
APP_LDFLAGS="-Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384"

修改 Android.mk

Android.mk 中增加以下链接标志,确保 RELRO 对齐:

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

修改 Application.mk

1. 移除 cmd-strip 调用

NDK r23+ 中 strip 工具路径改为 LLVM 版本,旧的 cmd-strip 路径会报错。新版 NDK 会自动调用 strip,直接删除该行即可。

2. 替换 STL 类型


APP_STL := gnustl_static


APP_STL := c++_static

补充缺失的 PAGE_SIZE 宏

NDK 新版本不再提供 PAGE_SIZE / PAGE_MASK 宏,若代码中有使用,需手动定义:

#ifndef PAGE_SIZE
#define PAGE_SIZE 4096
#endif

#ifndef PAGE_MASK
#define PAGE_MASK (~(PAGE_SIZE - 1))
#endif

版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 崎径 其镜

赞助

  • 微信

    微信

  • 支付宝

    支付宝