Flutter Release apk 无法正常工作?
Posted
技术标签:
【中文标题】Flutter Release apk 无法正常工作?【英文标题】:Flutter Release apk is not working properly? 【发布时间】:2018-09-27 04:33:17 【问题描述】:我运行了这个flutter build apk
来发布我的应用程序。现在我已经构建了它的第 2 版。
现在我想再次发布我的第 2 版应用程序。为了获得发布 apk,我再次运行 flutter build apk
。我获得了发布的 apk,但这是我发布的第 1 版 apk。
我转到我的已发布目录并删除了我已删除的已发布 apk 并再次尝试,然后我也获得了第 1 版已发布 apk。
在构建版本 2 时,我正在调试模式下进行测试。在粪便模式下一切正常。
这是该应用程序的 Github 链接:https://github.com/nitishk72/Flutter-Github-API
【问题讨论】:
【参考方案1】:如果您使用 API 调用#
确保您的 android Manifest 上有 Internet 权限
<manifest>
...
<uses-permission android:name="android.permission.INTERNET"/>
...
</manifest>
如果您使用共享首选项插件
在 android\build.gradle
中设置您的依赖项以使用 classpath 'com.android.tools.build:gradle:3.5.1'
不是 classpath 'com.android.tools.build:gradle:4.1.0
像这样:
dependencies
classpath 'com.android.tools.build:gradle:3.5.1'
...
【讨论】:
【参考方案2】:1).
在android\app\src\mainAndroid manifest
中添加以下行
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
然后将这些行添加到android\app\build.gradle
buildTypes
release
shrinkResources false
minifyEnabled false
2).
使用以下命令构建apk
。
flutter build apk --no-shrink
或
flutter build apk --split-per-abi --no-shrink
两种解决方案都对我有用,但我个人推荐第二个
【讨论】:
【参考方案3】:当您创建新的 Flutter 项目时(从 Android Studio 菜单),在文件中:
/android/app/build.gradle
那里有:
你有:
buildTypes
release
signingConfig signingConfigs.debug // <--- HERE YOU ARE USING DEBUG KEY
这意味着release
构建(例如从菜单Build -> Flutter -> Build APK
触发)将使用debug
密钥进行签名。
完整的build.gradle
文件(由 Android Studio 创建):
解决方案
更改自:
signingConfig signingConfigs.debug
到:
signingConfig signingConfigs.release
所以(在build.gradle
)你应该有:
buildTypes
release
signingConfig signingConfigs.release
错误
当您遇到错误 Could not get unknown property 'release' for SigningConfig
- 只需在 build.gradle
中添加部分 release
,因此:
创建新的.jks
文件(通过Generate Signed Bundle / APK...
将凭据放入build.gradle (:app)
:
【讨论】:
它对我不起作用,出现错误:无法为 org.gradle.api.internal.FactoryNamedDomainObjectContainer 类型的 SigningConfig 容器获取未知属性“释放”。 @MarcoA.Braghim 错误非常明显。SigningConfig container
中没有 property 'release'
。在android
你必须创建它,所以android signingConfigs release
然后把你的keyAlias
、storeFile
、keyPassword
和storePassword
。【参考方案4】:
我遇到了同样的问题“应用程序在调试模式下正常工作,但在发布模式下不能正常工作”。我不知道为什么......但最后,我通过在 android/app/build.gradle 文件中添加这些行 shrinkResources false minifyEnabled false
解决了。
buildTypes
release
signingConfig signingConfigs.config
shrinkResources false
minifyEnabled false
【讨论】:
由于某些原因,--no-shrink 构建参数对我不起作用,但这有帮助【参考方案5】:问题在于,flutter build 会使用 R8 自动收缩代码。 flutter build --no-shrink
解决了这个问题。我想我需要将所有必需的例外添加到 proguard-rules.pro 文件中。
使用以下命令构建 apk。
输入cd <app dir>
(替换为您的应用程序目录。)
flutter build apk --split-per-abi --no-shrink
(flutter build 命令默认为 --release。)
删除--split-per-abi
标志会生成一个胖APK,其中包含为所有目标ABI 编译的代码。此类 APK 的大小比拆分后的版本大,导致用户下载不适用于其设备架构的原生二进制文件。
【讨论】:
【参考方案6】:我希望这可以帮助某人。我遇到了一个问题,我的发布版本不起作用,并且 logcat 中没有任何错误消息。
问题原来是我有FutureBuilder
,我在其中开始Future<void>
。通过运行flutter run
,它可以正常工作(snapshot.hasData
是true
),但在发布版本中它始终是false
。当然,FutureBuilder
的文档说在这种情况下hasData
应该是false
。但实际上在调试模式下它有不同的行为。
附: 另一个可能的问题: 现在我的应用程序仍然无法运行,但这次我在 logcat 上看到了下一个错误:
Unhandled Exception: MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/shared_preferences)
将 gradle 插件版本从 7.* 降级到 3.5.4 可以解决此问题。
classpath 'com.android.tools.build:gradle:3.5.4'
【讨论】:
【参考方案7】:我决定在 android studio 中打开 MyProject/android 文件夹并从 android studio 构建 apk。 终于可以正常使用了。
【讨论】:
【参考方案8】:如果您的问题是 flutter build(APK、bundle)没有在真实设备中进行 API 调用,这是因为 在创建发布/构建之前,您需要将 Internet 权限添加到 Android Manifest。
默认情况下,“互联网使用”在模拟器上可以正常工作,但在真实设备上则不行。
要解决这个问题,只需:
打开文件“android/app/src/main/AndroidManifest.xml”并添加适当的用户权限:
<manifest>
...
<uses-permission android:name="android.permission.INTERNET"/>
...
</manifest>
然后再次创建您的构建。
【讨论】:
@Jumma:你的回答拯救了我的一天:)。谢谢 谢谢!这有点令人困惑,但很有意义,因为 Flutter 调试版本总是需要 Internet 权限才能使用调试工具。关于这个的讨论在这里:github.com/flutter/flutter/issues/20789 非常感谢!我不知道我应该如何在谷歌上提出我的问题,但这是答案!你拯救了我的一天!【参考方案9】:你可以在 local.properties android 项目中更改
sdk.dir=D:/SDK //your android SDK location
flutter.sdk=D:\\Flutter\\flutter //your flutter SDK location
flutter.versionName=1.0.0
flutter.versionCode=2
flutter.buildMode=release
你的 android/app/build.gradle 文件的变化
buildTypes
release
// if everything ok then not add
//minifyEnabled true
//another you can remove minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-
android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
你也可以在 android/app/build.gradle 中更改 defaultConfig 方法 身体。
multiDexEnabled true
如果您想迁移到 androidx,请进行设置。
依赖 testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' 实现'androidx.multidex:multidex:2.0.1'
并在创建构建文件夹之前按照此 cmd 进行清理。
- flutter clean
- flutter build apk --release
- flutter install
6.发布Apk位置。
in `android studio termial` or inside `project-root` you can navigate to this.
cd build\app\outputs\apk\release
【讨论】:
ios 开发者在这里。 Android 使用 Flutter。尝试过flutter clean,然后flutter apk --release,但它总是创建一个调试版本。遵循上述步骤并添加了signingConfig.release 并使用flutter apk 获得了Release 版本——release 还参考flutter.dev/docs/deployment/android,它本质上是上面的内容,但详细介绍了如何创建密钥文件以及存储和链接它的位置等。 它将创建 debugRelease。 (为什么因为在 android 代码内的 app 文件夹中,您会找到一个 build.gradle,您会在其中看到 release 标记,该标记默认绑定到 debug.keystore。 哦。那么如何创建 Release 版本呢? 您可以从 Android-studio 创建发布版本。有一个选项。 谢谢图沙尔。我在 Android Studio 上遇到了一些奇怪的错误。所以我从命令行(flutter apk --release)创建了发布版本。【参考方案10】:我认为你需要
flutter clean
(我认为这是一个必要的错误,但我也遇到了)
和
flutter build apk --release
【讨论】:
很高兴听到。 . @GünterZöchbauer 我仍然面临这个问题。它说`正在运行'gradlew assembleRelease'...... Dart快照生成器失败,退出代码为-1073741819 快照以非零退出代码退出:-1073741819`我觉得提供可调试版本很不舒服。 我也不认为发布调试版本是一个好主意(如果可能的话),但我不知道如何解决。您能否在 GitHub 中创建一个包含尽可能多信息的问题。 这对我不起作用。请帮忙。当打开应用程序被杀死。以上是关于Flutter Release apk 无法正常工作?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter 应用程序无法在 apk-release 中运行,但可以在调试模式下运行(即使在授予 Internet 权限后)
反编译flutter release apk。在哪里可以找到源代码?
Flutter:build/app/outputs下的apk/release目录和flutter-apk目录有啥区别?
Flutter PlayStore Distribution APK 无法正常工作,无法加载,卡在启动画面