Flutter 16KB 页面大小支持配置
Flutter 16KB 页面大小支持配置
f l配置支持Google Play的16KB页面大小要求,确保应用可以在使用16KB页面大小的Android设备上正常运行。
📋 配置概览
已完成的配置更改:
-
android/app/build.gradle
- 添加了
bundle
配置,禁用所有splits - 添加了
externalNativeBuild
配置,启用ANDROID_PAGE_SIZE_AGNOSTIC=ON
- 配置了CMakeLists.txt路径
- 添加了
-
android/gradle.properties
- 移除了已弃用的
android.bundle.enableUncompressedNativeLibs
配置 - 使用AGP 8.1+的默认行为(enableUncompressedNativeLibs=true)
- 移除了已弃用的
-
android/app/src/main/AndroidManifest.xml
- 添加了
android:extractNativeLibs="false"
- 添加了
-
android/app/CMakeLists.txt
- 创建了新的CMakeLists.txt文件
- 配置了16KB页面大小支持的编译和链接标志
🚀 使用方法
1. 验证配置
./verify_16kb_support.sh
2. 构建AAB文件
./build_16kb_aab.sh
3. 检查16KB对齐
./check_16kb_alignment.sh build/app/outputs/bundle/release/app-release.aab
📱 构建产物
构建完成后,AAB文件将位于:
build/app/outputs/bundle/release/app-release.aab
🔍 验证要求
Google Play要求所有native库(.so文件)必须按照16KB页面大小对齐。本配置确保:
- 所有native库都使用16KB页面大小对齐
- 禁用native库压缩
- 禁用bundle splits以避免对齐问题
- 使用页面大小无关的编译标志
📚 相关文档
- Google Play 16KB页面大小要求
- Android Bundle配置
- Flutter Android构建
⚠️ 注意事项
- 确保使用最新的Flutter版本(推荐3.16+)
- 构建时使用
--target-platform android-arm64
参数 - 上传到Google Play Console时选择AAB格式
- 定期检查Google Play Console的兼容性报告
🛠️ 故障排除
如果遇到构建问题:
- 清理项目:
flutter clean && cd android && ./gradlew clean && cd ..
- 重新获取依赖:
flutter pub get
- 检查Flutter和Android SDK版本
- 运行验证脚本检查配置
📞 支持
如有问题,请参考:
- Flutter官方文档
- Android开发者文档
- Google Play Console帮助
脚本
检测脚本
#!/bin/bash
# usage: alignment.sh path to search for *.so files
dir="$1"
RED="\e[31m"
GREEN="\e[32m"
ENDCOLOR="\e[0m"
matches="$(find $dir -name "*.so" -type f)"
IFS=$'\n'
for match in $matches; dores="$(objdump -p ${match} | grep LOAD | awk '{ print $NF }' | head -1)"if [[ $res =~ "2**14" ]] || [[ $res =~ "2**16" ]]; thenecho -e "${match}: ${GREEN}ALIGNED${ENDCOLOR} ($res)"elseecho -e "${match}: ${RED}UNALIGNED${ENDCOLOR} ($res)"fi
done
修复脚本
#!/bin/bash# ================================================
# Flutter 16KB Page Size AAB Build Script
# 构建支持16KB页面大小的AAB文件
# ================================================set -eecho "🚀 开始构建支持16KB页面大小的AAB文件..."# 清理之前的构建
echo "🧹 清理之前的构建..."
flutter clean
cd android
./gradlew clean
cd ..# 获取Flutter依赖
echo "📦 获取Flutter依赖..."
flutter pub get# 构建AAB文件
echo "🔨 构建AAB文件..."
flutter build appbundle --release --target-platform android-arm64# 检查构建的AAB文件
AAB_FILE="build/app/outputs/bundle/release/app-release.aab"
if [ -f "$AAB_FILE" ]; thenecho "✅ AAB文件构建成功: $AAB_FILE"# 使用现有的检查脚本验证16KB对齐if [ -f "check_16kb_alignment.sh" ]; thenecho "🔍 检查16KB页面大小对齐..."./check_16kb_alignment.sh "$AAB_FILE"elseecho "⚠️ 未找到check_16kb_alignment.sh脚本,跳过对齐检查"fiecho "📊 AAB文件信息:"ls -lh "$AAB_FILE"echo "🎉 构建完成!AAB文件位置: $AAB_FILE"echo "💡 提示: 请使用Google Play Console上传此AAB文件"
elseecho "❌ AAB文件构建失败"exit 1
fi