百度seo排名优化公司,wordpress后台优化,dedecms 倒计时 天数 网站首页,吉林企业建站系统费用目录
1、参考文档
2、简易打包
3、生成应用程序签名
4、项目中引用秘钥库
5、在build.gradle中配置签名
6、打包应用程序
7、测试安装包
8、Android build.gradle.kts过滤配置的演进与优化
历史背景
现代趋势#xff1a;专注于 64 位架构
为什么 Flutter 默认只包…目录
1、参考文档
2、简易打包
3、生成应用程序签名
4、项目中引用秘钥库
5、在build.gradle中配置签名
6、打包应用程序
7、测试安装包
8、Android build.gradle.kts过滤配置的演进与优化
历史背景
现代趋势专注于 64 位架构
为什么 Flutter 默认只包含 arm64-v8a 和 armeabi-v7a
为什么只使用 arm64-v8a 1、参考文档 API文档 链接 Build and release an Android app官网地址Android | FlutterFlutter快速上手入门教程Flutter快速上手入门教程_flutter教程-CSDN博客 2、简易打包
默认是debug如果需要打release包时TODO: Add your own signing config for the release build. 3、生成应用程序签名
在 macOS 或者 Linux 系统上执行下面的命令
keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key在 Windows 系统上执行下面的命令
keytool -genkey -v -keystore D:/key.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias key如果报错 java的jdk环境变量可能配置的有问题keytool命令前面加上jdk环境变量的路径试试注意空格需要用反引号 输入flutter doctor -v查看java的jdk的安装路径 新的命令
/Applications/Android\ Studio.app/Contents/jre/Contents/Home/bin/keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key4、项目中引用秘钥库
创建一个名为/android/key.properties 的文件内如如下
storePasswordpassword-from-previous-step
keyPasswordpassword-from-previous-step
keyAliasupload
storeFilekeystore-file-location 注意这个文件一般不要提交到代码仓库
5、在build.gradle中配置签名
通过编辑 /android/app/build.gradle 文件来为我们的 app 配置签名,在android{...}这一行前面,加入如下代码
import java.util.Properties
import java.io.FileInputStreamplugins {...
}val keystoreProperties Properties()
val keystorePropertiesFile rootProject.file(key.properties)
if (keystorePropertiesFile.exists()) {keystoreProperties.load(FileInputStream(keystorePropertiesFile))
}android {...
}
android {// ...signingConfigs {create(release) {keyAlias keystoreProperties[keyAlias] as StringkeyPassword keystoreProperties[keyPassword] as StringstoreFile keystoreProperties[storeFile]?.let { file(it) }storePassword keystoreProperties[storePassword] as String}}buildTypes {release {// TODO: Add your own signing config for the release build.// Signing with the debug keys for now,// so flutter run --release works.signingConfig signingConfigs.getByName(debug)signingConfig signingConfigs.getByName(release)}}
...
} 全部代码展示
// 在文件顶部添加这些导入语句
import java.io.FileInputStream
import java.util.Propertiesplugins {id(com.android.application)id(kotlin-android)// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.id(dev.flutter.flutter-gradle-plugin)
}val keystoreProperties Properties()
val keystorePropertiesFile rootProject.file(key.properties)
if (keystorePropertiesFile.exists()) {keystoreProperties.load(FileInputStream(keystorePropertiesFile))
}android {namespace com.flutter.testcompileSdk flutter.compileSdkVersionndkVersion flutter.ndkVersioncompileOptions {sourceCompatibility JavaVersion.VERSION_11targetCompatibility JavaVersion.VERSION_11}kotlinOptions {jvmTarget JavaVersion.VERSION_11.toString()}defaultConfig {// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).applicationId com.wyze.skystream// You can update the following values to match your application needs.// For more information, see: https://flutter.dev/to/review-gradle-config.minSdk flutter.minSdkVersiontargetSdk flutter.targetSdkVersionversionCode flutter.versionCodeversionName flutter.versionNamendk {abiFilters listOf(arm64-v8a) // 只包含 64 位 ARM 架构// 如果需要支持更多架构可以添加多个过滤器// abiFilters arm64-v8a, armeabi-v7a // 同时支持 64 位和 32 位 ARM}}signingConfigs {create(release) {keyAlias keystoreProperties[keyAlias] as StringkeyPassword keystoreProperties[keyPassword] as StringstoreFile keystoreProperties[storeFile]?.let { file(it) }storePassword keystoreProperties[storePassword] as String}}buildTypes {release {// TODO: Add your own signing config for the release build.// Signing with the debug keys for now, so flutter run --release works.
// signingConfig signingConfigs.getByName(debug)signingConfig signingConfigs.getByName(release)}}
}flutter {source ../..
}// 正确的 Kotlin 语法
dependencies {// 其他依赖...implementation(androidx.core:core-splashscreen:1.0.1)
}
6、打包应用程序
打包APK
# 运行 flutter build apk flutter build 默认带有 --release 参数
flutter build apk
打包AAB
# 运行 flutter build appbundle。 (运行 flutter build 默认构建一个发布版本。)
flutter build appbundle
7、测试安装包
直接把该包复制后发到手机安装即可
adb命令
1.安装apk到手机上 adb install 路径/apk文件
2.卸载app从手机上 adb uninstall 包名
3.查看应用的启动时间 adb shell am start -W
flutter devices 查看设备 然后你会发现这安装包咋这么大重点来了仔细看下面介绍...
8、Android build.gradle.kts过滤配置的演进与优化
Android 打包中的 ABI (Application Binary Interface) 过滤配置是一个重要的性能和兼容性权衡点。我来解释为什么会有这些变化以及为什么现代应用倾向于只支持 64 位架构。
历史背景
早期 Android 设备主要使用 32 位处理器因此默认配置通常包含以下 ABI armeabi-v7a (32 位 ARM) x86 (32 位 x86) arm64-v8a (64 位 ARM) x86_64 (64 位 x86)
现代趋势专注于 64 位架构
这种配置确保应用能在尽可能多的设备上运行但会显著增加 APK 大小。
现代趋势专注于 64 位架构
近年来Google 一直在推动 Android 生态系统向 64 位迁移 Google Play 要求从 2021 年 8 月起Google Play 要求所有新应用必须包含 64 位版本 设备市场份额64 位设备已经占据了绝大多数市场份额特别是在高端设备中 性能优势64 位架构提供更好的性能和内存管理 应用体积优化移除 32 位支持可以显著减小 APK 大小
为什么 Flutter 默认只包含 arm64-v8a 和 armeabi-v7a
从 Flutter 3.3 开始默认的 ABI 配置变为
abiFilters listOf(arm64-v8a, armeabi-v7a)
这是因为 x86 设备市场份额极低x86 设备主要是模拟器和少数低端设备的市场份额已经非常小 兼容性与体积的平衡保留 armeabi-v7a 是为了支持仍在使用的少量 32 位设备同时提供 64 位版本以满足 Google Play 要求 App Bundle 支持Flutter 推荐使用 App Bundle (AAB) 格式它会根据用户设备自动提供正确的 ABI 版本进一步优化下载大小
为什么只使用 arm64-v8a
如果你只配置
abiFilters listOf(arm64-v8a)
这意味着 最小化应用体积只支持 64 位 ARM 设备应用体积最小 高端设备优先专注于性能更好的现代设备 简化维护减少需要测试的设备组合 放弃 32 位兼容性你的应用将无法在任何 32 位设备上运行
代码展示
// 修复使用双引号而非单引号ndk {abiFilters listOf(arm64-v8a) // 只包含 64 位 ARM 架构// 或者更简洁的写法// abiFilters.add(arm64-v8a)// 如果需要支持更多架构// abiFilters listOf(arm64-v8a, armeabi-v7a)}