11

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

而且我的应用程序也使用 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"/>
4

8 回答 8

8

我的应用程序也无法在发布版本中运行,问题是由于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

于 2020-09-06T11:29:24.250 回答
7

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

minifyEnabled false shrinkResources false

于 2021-03-21T16:08:18.180 回答
4

我也面临同样的问题。在我的情况下,问题不是我的代码,问题是 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 版本

于 2021-01-04T04:49:12.373 回答
2

我只是改变了:

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

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

然后

  • 扑干净
  • 颤振构建 apk --release

它肯定会起作用。

于 2021-03-20T05:07:16.077 回答
1

使用颤振构建 apk --no-shrink 构建解决了我

于 2020-09-03T12:28:43.850 回答
0

这对我真的有用,你可以试试----

使用-> 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());
}

在此处输入图像描述

于 2021-02-24T06:59:45.473 回答
0

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

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

它对我有用

于 2021-03-06T07:52:04.087 回答
0

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

于 2021-01-25T22:20:37.643 回答