如何构建符合 Google Play 64 位要求的应用程序?
Posted
技术标签:
【中文标题】如何构建符合 Google Play 64 位要求的应用程序?【英文标题】:How to build app compliant with Google Play 64-bit requirement? 【发布时间】:2019-09-22 18:40:11 【问题描述】:在我将 APK 上传到 Play 商店后,我收到了以下警告。为了满足 64 位要求,我应该进行哪些更改才能使用 Flutter SDK 发布 APK 构建?
警告信息:
【问题讨论】:
flutter 团队现已提供解决方案(版本 > 1.7.12)。请看下面我的回答。 ***.com/a/56817004/3567888 【参考方案1】:Edit/Update:
Google 已经在稳定频道发布了 Flutter 1.7.8+hotfix.3,可以轻松构建发布应用。
现在您有两个构建选项:
-
应用程序包(首选)
APK
生成应用程序包
运行flutter build appbundle
这将创建<app dir>/build/app/outputs/bundle/release/app.aab
T app bundle 包含你的 Dart 代码和为 armeabi-v7a (32-bit)
和 arm64-v8a (64-bit)
编译的 Flutter 运行时。
现在您可以将此应用程序包上传到 Google Play。
构建一个 APK
flutter build apk --split-per-abi
此命令会生成两个 APK 文件:
<app dir>/build/app/outputs/apk/release/app-armeabi-v7a-release.apk
<app dir>/build/app/outputs/apk/release/app-arm64-v8a-release.apk
删除 --split-per-abi 标志会生成一个胖 APK,其中包含为所有目标 ABI 编译的代码。此类 APK 的大小比拆分后的版本大,导致用户下载不适用于其设备架构的原生二进制文件。
如果你还没有升级到 Flutter 1.7 下面的解决方案应该仍然 工作。
您需要构建两个 apk 并将它们一起上传。一个用于 32 位,另一个用于 64 位。
这对我有用,我在 Flutter v1.5.4-hotfix.2 上
首先,运行flutter build apk --release
并上传apk文件
然后在pubspec.yml文件中增加版本号和内部版本号并运行
flutter build apk --release --target-platform=android-arm64
上传这个新的 apk 并开始部署。
祝你好运
【讨论】:
【参考方案2】:伙计们,他们更改了 64-bit
架构的新政策。所以请把这段代码放在你的gradle中
ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
例如
android
compileSdkVersion 28
defaultConfig
applicationId "com.test.test"
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
【讨论】:
@Stefan 你遇到了什么问题? 我将这一行添加到配置中并运行flutter build apk
并将apk 上传到google play。谷歌播放控制台出现了同样的错误......
只有在切换到颤振主频道后才对我有用。
有没有不使用flutter的解决方案?【参考方案3】:
对我有用的是
flutter build appbundle --release
上传 appbundle 文件
然后在pubspec.yml文件中增加版本号和内部版本号并运行
flutter build appbundle --release --target-platform=android-arm64
同时上传这个新的 appbundle。
然后Play商店接受了我的发布
【讨论】:
【参考方案4】:我终于能够通过将它添加到 build.gradle 来解决这个问题
ndk
abiFilters "armeabi-v7a", "arm64-v8a"
splits
abi
include "armeabi-v7a", "arm64-v8a"
applicationVariants.all variant ->
variant.outputs.each output ->
// For each separate APK per architecture, set a unique version code as described here:
// http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
def versionCodes = ["armeabi-v7a":1, "arm64-v8a":2]
def abi = output.getFilter(OutputFile.ABI)
if (abi != null) // null for the universal-debug, universal-release variants
output.versionCodeOverride =
versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
这方面没有很多明确的文档,我在网上搜索时碰巧遇到了这个。
【讨论】:
【参考方案5】:现在 futter 团队提供了一个新的更好的解决方案。 您需要使用新的 flutter 版本 1.7.12。 (我的设置)
Flutter 1.7.12-pre.40 • channel master • https://github.com/flutter/flutter.git
Framework • revision 3badcf51a4 (13 hours ago) • 2019-06-28 15:14:03 -0700
Engine • revision e96900df2f
Tools • Dart 2.4.0
然后您可以使用此命令为 x86 和 x64 构建您的(单个)应用程序包。flutter build appbundle
您可以添加--release --target-platform android-arm,android-arm64
。但这可能会导致应用损坏...
【讨论】:
【参考方案6】:使用最新的 Flutter 主通道。
flutter build apk
将生成一个胖 APK,同时支持 32 位和 64 位。
要分别创建 32 位和 64 位 APK,请使用 flutter build apk --split-per-abi
命令
【讨论】:
只有在切换到颤振主频道后才对我有用。【参考方案7】:Flutter 1.5.4-hotfix.2 appbundle 当前以 android-arm 为目标,它只构建 32 位原生代码 (flutter build appbundle -h
)。要更改此运行 flutter build appbundle --target-platform=android-arm64
以更改默认目标。
【讨论】:
在稳定通道上使用 Flutter 1.7.8+hotfix.3,如果我现在构建应用程序包,它将同时具有 32 位和 64 位,还是只需要使用主通道构建它?【参考方案8】:我用这段代码构建了我的,我仍然得到错误。
flutter build appbundle --target-platform=android-arm64
【讨论】:
为什么不直接使用flutter构建appbundle? 我已经尝试了所有可能的命令,包括那个,同样的错误【参考方案9】:如果您使用 Android Studio
上传到 google play 时,只需转到 Build -> Flutter -> Build App Bundle 将其替换为 apk
【讨论】:
【参考方案10】:将此行添加到您的 android/app/build.gradle 文件中
ndk
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86','x86_64'
【讨论】:
【参考方案11】:我尝试了所有答案,但它的停留显示相同的问题。
我尝试将此行添加为最多的答案:
ndk
abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
但没有解决。
什么 解决了 我的 问题?
只需在最后一个代码中添加“armeabi”即可:
ndk
abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'arm64-v8a'
这个解决方案节省了我的时间,我成功上传了我的 app bundle!
【讨论】:
以上是关于如何构建符合 Google Play 64 位要求的应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
此版本符合 Google Play 64 位要求本机应用程序
错误记录Google Play 上架报错 ( 此版本不符合 Google Play 关于提供 64 位版本应用的要求 )
Delphi 10.1 - Google Play Console - 查看和发布错误“此版本不符合 Google Play 64 位要求。”
Xamarin - 此版本不符合 Google Play 64 位要求
错误记录Google Play 上架报错 ( 此版本不符合 Google Play 关于提供 64 位版本应用的要求。| 如果提供 x86 架构动态库则必须提供 x86_64 架构的动态库 )