英文:
Flutter - how fix issue in appbudle?
问题
我有一个用于Android的Flutter应用程序(与网络一起工作)。该应用程序在调试模式下正常运行。我创建了App Bundle - 将控制台下载到Google,然后下载通用的APK文件(适用于所有平台)。但是,当我从商店安装应用程序(即针对特定设备 - 特定平台),应用程序的运行出现问题。
我成功地在计算机上本地重现了这个问题:
- 我创建App Bundle
- 我使用BundleTool从App Bundle创建一组APK文件
- 然后我使用BundleTool将APK安装到我的手机上 - 出现相同的问题
似乎问题与ABI相关。这是我的build.gradle
文件中的代码:
buildTypes {
release {
minifyEnabled false
zipAlignEnabled false
shrinkResources false
signingConfig signingConfigs.release
ndk.abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
}
debug {
minifyEnabled false
zipAlignEnabled false
shrinkResources false
signingConfig signingConfigs.release
ndk.abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
}
}
splits {
abi {
enable true // 启用ABI拆分机制
reset() // 重置要包括的ABI列表为空字符串
include 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
universalApk true
}
}
...
project.ext.versionCodes = ['armeabi-v7a': 1, 'arm64-v8a': 2, 'x86': 3, 'x86_64': 4]
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFileName = "myapp_" + variant.versionName + "_" + output.getFilter(com.android.build.OutputFile.ABI) + ".apk"
output.versionCodeOverride =
project.ext.versionCodes.get(output.getFilter(com.android.build.OutputFile.ABI), 0) *
1000000 + android.defaultConfig.versionCode
}
}
调试和发布的配置几乎相同,但在调试模式下应用程序正常运行。
如何理解错误的原因?如何将调试模式与发布APK合并 - 但这可能是不可能的。
任何建议 - 我将非常感激。
英文:
I have Flutter app for android(work with the network). the application works in debug mode. I create appbundle - download the console to Google, then download the universal apk file (for all platforms). But when I install the application from the store (that is, for a certain device - a certain platform), I have a problem with the operation of the application.
I managed to reproduce this issue locally on the computer:
- I create appbundle
- I will create a set of apks from appbundle(with bundletool)
- then I install the apk on my phone(with bundletool) - the same problem
it also seems that the problem is related to abi. This is my code from build.gradle:
buildTypes {
release {
minifyEnabled false
zipAlignEnabled false
shrinkResources false
signingConfig signingConfigs.release
ndk.abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
}
debug {
minifyEnabled false
zipAlignEnabled false
shrinkResources false
signingConfig signingConfigs.release
ndk.abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
}
}
splits {
abi {
enable true //enables the ABIs split mechanism
reset() //reset the list of ABIs to be included to an empty string
include 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
universalApk true
}
}
..........
project.ext.versionCodes = ['armeabi-v7a': 1, 'arm64-v8a': 2, 'x86': 3, 'x86_64': 4]
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFileName = "myapp_" + variant.versionName + "_" + output.getFilter(com.android.build.OutputFile.ABI) + ".apk"
output.versionCodeOverride =
project.ext.versionCodes.get(output.getFilter(com.android.build.OutputFile.ABI), 0) *
1000000 + android.defaultConfig.versionCode
}
}
Configs for debug and release are same almost the same. but when i run in debug the app works.
how can I understand what is the cause of the error?
how could I join in debug mode to the release apk - but it's probably not possible.
any advice - I will be very grateful
答案1
得分: 1
考虑移除 x86,因为 Flutter 不支持它,并且这将正常工作。
使用以下内容替代:
release {
minifyEnabled false
zipAlignEnabled false
shrinkResources false
signingConfig signingConfigs.release
ndk.abiFilters 'x86_64', 'armeabi-v7a', 'arm64-v8a'
}
而不是:
release {
minifyEnabled false
zipAlignEnabled false
shrinkResources false
signingConfig signingConfigs.release
ndk.abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
}
英文:
Consider removing x86 because flutter doesn't support it . and it will work fine.
put this :
release {
minifyEnabled false
zipAlignEnabled false
shrinkResources false
signingConfig signingConfigs.release
ndk.abiFilters 'x86_64', 'armeabi-v7a', 'arm64-v8a'
}
instead of this :
release {
minifyEnabled false
zipAlignEnabled false
shrinkResources false
signingConfig signingConfigs.release
ndk.abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
}
答案2
得分: 0
我修复了这个问题 - 将以下行添加到gradle.properties中:
android.bundle.enableUncompressedNativeLibs=false
英文:
I fixed this issue - added it line to gradle.properties
android.bundle.enableUncompressedNativeLibs=false
答案3
得分: 0
Removed the ndk.abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
Automatically showing google play store and apk install
buildTypes {
release {
debuggable false /// upload apk false
minifyEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
英文:
Removed the ndk.abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
Automatically showing google play store
and apk install
buildTypes {
release {
debuggable fale /// upload apk false
minifyEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
答案4
得分: 0
'ndk.abiFilters'中的文本是:'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
为什么需要ABI过滤器?您尝试过删除上面的行吗?
英文:
ndk.abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
why do you need abi filters? Did you try removing the above line?
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论