如何解决Android AAB安装时的‘Library is not PAGE(16384)-aligned’错误
问题:AAB上传Google Play后,16KB页大小的.so库安装失败
背景信息
- 编译配置:
- Android.mk中添加:
LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384" - Application.mk中添加:
APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true
- Android.mk中添加:
- 本地测试:Android Studio Koala环境下,开启16KB页大小模式的Android 15设备可正常运行
- 问题现象:打包签名AAB上传Google Play后,下载安装报错,日志关键信息:
09-03 22:26:02.654 1336 1697 E NativeLibraryHelper: Library 'libsqlc-native-driver.so' is not PAGE(16384)-aligned - will not be able to open it directly from apk. 09-03 22:26:02.654 1336 1697 W NativeHelper: Failure copying native libraries [errorCode=-2] 09-03 22:26:02.654 1336 1697 D PackageInstallerSession: Marking session 1857550392 as failed: INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2 - 已确认:构建前的.so库已16KB对齐(
./libsqlc-native-driver.so: ALIGNED (2**14))
解决方案
1. 阻止打包流程破坏.so对齐
Google Play处理AAB时的自动优化可能会破坏.so的对齐,需在打包配置中保留对齐:
- 在Module级
build.gradle中添加:android { packagingOptions { jniLibs { // 禁止剥离目标so的符号或修改结构 doNotStrip "**/libsqlc-native-driver.so" } } } - 用
zipalign验证最终APK中的.so对齐:zipalign -c -v 16384 app-release.apk
2. 强化NDK编译的对齐参数
除了链接器参数,强制编译和链接阶段都对齐到16KB:
- 修改Android.mk:
# 编译阶段对齐函数/跳转/循环到16KB LOCAL_CFLAGS += -falign-functions=16384 -falign-jumps=16384 -falign-loops=16384 # 链接阶段同时设置公共页大小和最大页大小 LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384" "-Wl,-z,common-page-size=16384"
3. 临时关闭Google Play的Native库优化
在Play Console中进入应用→发布→应用签名→高级选项,关闭Native库相关的优化选项,重新上传AAB测试。
4. 跳过AAB直接测试APK
打包签名APK后,手动安装到目标设备或上传至Play内部测试轨道,确认是否是AAB处理流程导致的问题。若APK安装正常,需联系Play开发者支持反馈对齐被破坏的问题。
5. 升级NDK版本
确保使用NDK 26及以上版本(Android 15要求的最低NDK版本),旧版本可能存在灵活页大小特性的兼容性问题。
内容的提问来源于stack exchange,提问作者italia57
相关产品推荐
相关产品推荐

