How to build app compliant with Google Play 64-bit requirement?
What worked for me was
flutter build appbundle --release
Upload the appbundle file
Then increase the version and build number in the pubspec.yml file and run
flutter build appbundle --release --target-platform=android-arm64
Upload also this new appbundle.
Then the play store accepted my release
Edit/Update:
Google has released Flutter 1.7.8+hotfix.3 in stable channel, which makes easy to build an app for release.
Now you have two options to build :
- App bundle (preferred)
- APK
Generating App Bundle
Run flutter build appbundle
This will create <app dir>/build/app/outputs/bundle/release/app.aab
T app bundle contains your Dart code and the Flutter runtime compiled for armeabi-v7a (32-bit)
and arm64-v8a (64-bit)
.
Now you can upload this app bundle to google play.
Build an APK
flutter build apk --split-per-abi
This command results in two APK files:
<app dir>/build/app/outputs/apk/release/app-armeabi-v7a-release.apk
<app dir>/build/app/outputs/apk/release/app-arm64-v8a-release.apk
Removing the --split-per-abi flag results in a fat APK that contains your code compiled for all the target ABIs. Such APKs are larger in size than their split counterparts, causing the user to download native binaries that are not applicable to their device’s architecture.
If you haven't upgraded to flutter 1.7 Below solution should still work.
You need to build two apk and upload them together. one for 32 and another for 64 bit.
This is what worked for me I am on flutter v1.5.4-hotfix.2
First, run flutter build apk --release
and upload the apk file
Then increase the version and build number in pubspec.yml file and run
flutter build apk --release --target-platform=android-arm64
Upload this new apk and start rollout.
Good luck
Guys they changed new policies for 64-bit
architectures. So please put this code in your gradle
ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
for e.g.
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"
}
}
I finally was able to fix this by adding this to 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
}
}
}
There is not a lot of clear documentation on this, I happened to run into this by scouring the internet.