【问题标题】:Flutter Release apk is not working properly?Flutter Release apk 无法正常工作?
【发布时间】: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

【问题讨论】:

    标签: android flutter dart release-apk


    【解决方案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 -&gt; Flutter -&gt; 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,因此:

        1. 创建新的.jks 文件(通过Generate Signed Bundle / APK...

        2. 将凭据放入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。

        1. 输入cd &lt;app dir&gt;(替换为您的应用程序目录。)

        2. flutter build apk --split-per-abi --no-shrink(flutter build 命令默认为 --release。)

        删除--split-per-abi 标志会生成一个胖APK,其中包含为所有目标ABI 编译的代码。此类 APK 的大小比拆分后的版本大,导致用户下载不适用于其设备架构的原生二进制文件。

        【讨论】:

          【解决方案6】:

          我希望这可以帮助某人。我遇到了一个问题,我的发布版本不起作用,并且 logcat 中没有任何错误消息。 问题原来是我有FutureBuilder,我在其中开始Future&lt;void&gt;。通过运行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】:
              1. 你可以在 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
                
              2. 你的 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
                            }
                        }
                
              3. 你也可以在 android/app/build.gradle 中更改 defaultConfig 方法 身体。

                  multiDexEnabled true
                
              4. 如果您想迁移到 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'

                }

                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 中创建一个包含尽可能多信息的问题。
              • 这对我不起作用。请帮忙。当打开应用程序被杀死。
              猜你喜欢
              • 2022-01-20
              • 2019-09-28
              • 2021-03-07
              • 1970-01-01
              • 2021-08-18
              • 2022-12-31
              • 1970-01-01
              • 2021-08-22
              • 2021-05-17
              相关资源
              最近更新 更多