【问题标题】:SharedPreferences not instantiating in release buildSharedPreferences 未在发布版本中实例化
【发布时间】:2020-07-22 11:59:53
【问题描述】:

在我的颤振应用程序中,我实现了一个入职视图。因为它应该只加载一次,所以我使用共享首选项来存储一个整数来表示已经显示了入职。当我在调试模式下运行应用程序时,一切正常。但是当我构建它的发布版本时,它不起作用。

而且我的应用程序使用 firebase 移动身份验证。我之所以提到这一点,是因为它也可能是一个原因。

代码:

case InitializeEvent:
        SharedPreferences prefs = await SharedPreferences.getInstance();
        int initScreen = prefs.getInt(SharedPrefUtil.INIT_SCREEN);
        await prefs.setInt(SharedPrefUtil.INIT_SCREEN, 1);
        if (initScreen == 1) {
          add(CheckAppConfigEvent());
        } else {
          yield state.clone(page: RootState.ONBOARDING_PAGE);
        }
        yield state.clone(loading: false);
        break;

所以在上面的代码中,如果我评论初始化共享首选项、读写行并在 if else 语句中设置 true 或 false,那么在发布版本中一切正常。这就是为什么我认为问题在于初始化共享偏好。

而且我只允许互联网。我是否缺少 AndroidManifest.xml 中的任何权限

<uses-permission android:name="android.permission.INTERNET"/>

【问题讨论】:

  • 所以我找到了问题所在。如果我使用命令flutter build apk --no-shrink 构建它,它在发布版本中也可以正常工作。因此,如果有任何解决方案不应用代码收缩,那将是可观的。
  • 我有同样的问题,也找不到任何解决方案!
  • 我也遇到了同样的问题,找不到解决办法。如果有人找到解决方案,请在此处告知我们。
  • 我仍然没有找到任何东西。它看起来像是 package:shared_preferences 中一个非常严重但罕见的错误。
  • 我也有这个问题:在调试中它工作得很好,在发布中 - 没有错误但没有任何内容存储在 SharedPreferences 中......所以下次我重新启动应用程序时,一切都是空的。 --no-shrink 也无济于事。

标签: android flutter sharedpreferences release-builds


【解决方案1】:

我的应用在发布版本中也无法运行,问题是由于 shared_preferences 包造成的。

我在发布版本中遇到以下错误:

MissingPluginException(在通道 plugins.flutter.io/shared_preferences 上找不到方法 getAll 的实现)

我尝试了几种解决方案:

  1. 切换颤振通道
  2. 尝试了多个版本的 shared_preferences
  3. 删除 .pub-cache 文件夹,如此处所述https://github.com/flutter/flutter/issues/38873#issuecomment-680788165

但没有任何效果。

该应用在调试版本中运行良好,但在发布版本中却不行。

然后我尝试了

flutter build apk --no-shrink

flutter build appbundle --no-shrink

并且该应用程序在发布版本中也运行良好。但是在不缩小代码的情况下解决了这个问题。 所以这需要修复。

希望 Flutter 团队会调查并解决该问题。

编辑:
已将问题报告给 Flutter 团队。
https://github.com/flutter/flutter/issues/65334

【讨论】:

  • 看来你已经做了一些研究。你会在 shared_preferences 的 GitHub 存储库上创建一个问题吗?我也有同样的问题。
  • 非常感谢兄弟。我希望你在这里知道我有多高兴。你救了我的命,我已经为此工作了两天。非常感谢。
【解决方案2】:

以前的解决方案在我的情况下不起作用,然后我尝试禁用这两个然后它起作用了。

minifyEnabled false shrinkResources false

【讨论】:

    【解决方案3】:

    我也遇到了同样的问题。在我的情况下,问题不是我的代码,问题是 Gradle 版本,当我使用任何大于 4 的 Gradle 版本时,就会出现这个问题。但是当我将 Gradle 版本降低到 3.5.0 时,它工作正常。我还使用 Gradle 3.6.4 进行了测试,它也可以正常工作。

    改变这个

    dependencies {
            classpath 'com.android.tools.build:gradle:4.1.1'
        }
    

    dependencies {
            classpath 'com.android.tools.build:gradle:3.6.4'
        }
    

    注意:在颤振中不要总是升级你的 Gradle 版本

    【讨论】:

      【解决方案4】:

      我刚刚换了:

      dependencies {
         classpath 'com.android.tools.build:gradle:**4.1.0**'
      }
      

      dependencies {
         classpath 'com.android.tools.build:gradle:**3.5.0**'
      }
      

      然后

      • 干净利落
      • flutter build apk --release

      它肯定会起作用。

      【讨论】:

        【解决方案5】:

        用 flutter build apk --no-shrink 构建解决了我

        【讨论】:

        • 嗯,但我确实想利用 Dart 的摇树。
        【解决方案6】:

        classpath 'com.android.tools.build:gradle:4.1.0' 替换为 classpath 'com.android.tools.build:gradle:3.5.0' 在 android/build.gradle 文件中为我解决了这个问题

        【讨论】:

          【解决方案7】:

          对我来说真的很管用,你可以试试----

          使用 -> SharedPreferences.setMockInitialValues({});

          void main() {
            SharedPreferences.setMockInitialValues({});
          
            SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
                systemNavigationBarColor: Colors.indigo[900], // navigation bar color
                statusBarColor: Colors.indigo[900],
                systemNavigationBarIconBrightness: Brightness.light));
            runApp(MyApp());
          }
          

          【讨论】:

            【解决方案8】:

            也许你忘记在 MainActivity.java 上添加这行代码 `@Override

            public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            GeneratedPluginRegistrant.registerWith(this.getFlutterEngine());
             }`
            

            它对我有用

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-02-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-12-11
              • 1970-01-01
              • 2023-03-18
              相关资源
              最近更新 更多