在发布模式下构建后 Flutter 安全存储不起作用

krl*_*xen 9 release gradle apk android-studio flutter

在调试模式下一切正常并在模拟器上发布,但FlutterSecureStorage在物理设备上读取值失败。当我使用FlutterSecureStorage.

在设备上安装 .apk 文件并启动应用程序后,它用于FlutterSecureStorage获取用户是否登录以及其他值的信息。当然,我希望在第一次运行时为 null,但storage.read(key)在返回任何值之前接缝会失败。

在 main/AndroidManifest.xml 中添加了备份标签

<application
       ...
        android:allowBackup="false"
        android:fullBackupContent="false">
Run Code Online (Sandbox Code Playgroud)

添加了启动时删除键

final FlutterSecureStorage storage = FlutterSecureStorage();

Future<void> checkIfUserIsSignedIn() async {
    storage.deleteAll();

    try{
      isUserSignedIn = await storage.read(key: _isLoggedIn);
    }
    catch (e){
      print(e);
    }
    setState(() {});
  }
Run Code Online (Sandbox Code Playgroud)

尝试使用FlutterSecureStorage v.3.3.3FlutterSecureStorage v.3.2.0,但没有变化。我检查了我设备的 SDK 版本(Honor 10)- 29。也在其他设备(三星 Galaxy S9+)上检查过,但问题也发生了。

运行flutter run --release导致警告:

Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Note: C:\Users\karo\flutter\.pub-cache\hosted\pub.dartlang.org\flutter_secure_storage-3.2.0\android\src\main\java\com\it_nomads\fluttersecurestorage\FlutterSecureStoragePlugin.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Run Code Online (Sandbox Code Playgroud)

和错误:

Installing build\app\outputs\flutter-apk\app.apk...                376ms
Error: ADB exited with exit code 1
Performing Streamed Install

adb: failed to install C:\Users\karo\idom_mobile\build\app\outputs\flutter-apk\app.apk: Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE: Package com.project.idom signatures do not match previously installed version; ignoring!]
Uninstalling old version...
Installing build\app\outputs\flutter-apk\app.apk...                 6.9s
Run Code Online (Sandbox Code Playgroud)

但在模拟器上成功安装了应用程序,一切都按预期工作。问题是当我在物理设备上安装应用程序时。要生成 .apk,我使用flutter build apk --releaseapp-release.apk 文件进行安装,如构建日志中所述:

flutter build apk --release
You are building a fat APK that includes binaries for android-arm, android-arm64, android-x64.
If you are deploying the app to the Play Store, it's recommended to use app bundles or split the APK to reduce the APK size.
    To generate an app bundle, run:
        flutter build appbundle --target-platform android-arm,android-arm64,android-x64
        Learn more on: https://developer.android.com/guide/app-bundle
    To split the APKs per ABI, run:
        flutter build apk --target-platform android-arm,android-arm64,android-x64 --split-per-abi
        Learn more on:  https://developer.android.com/studio/build/configure-apk-splits#configure-abi-split
Running Gradle task 'assembleRelease'...
Running Gradle task 'assembleRelease'... Done                      69.9s
? Built build\app\outputs\flutter-apk\app-release.apk (48.9MB).
Run Code Online (Sandbox Code Playgroud)

我的 flutter doctor -v

flutter doctor -v
[?] Flutter (Channel dev, 1.24.0-10.2.pre, on Microsoft Windows [Version 10.0.18362.1198], locale en-GB)
    • Flutter version 1.24.0-10.2.pre at C:\Users\karo\flutter
    • Framework revision 022b333a08 (27 hours ago), 2020-11-18 11:35:09 -0800
    • Engine revision 07c1eed46b
    • Dart version 2.12.0 (build 2.12.0-29.10.beta)

[?] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
    • Android SDK at C:\Users\karo\AppData\Local\Android\sdk
    • Platform android-30, build-tools 30.0.2
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
    • All Android licenses accepted.

[?] Android Studio (version 4.1.0)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)

[?] Connected device (1 available)
    • Android SDK built for x86 64 (mobile) • emulator-5554 • android-x64 • Android 10 (API 29) (emulator)

• No issues found!

Run Code Online (Sandbox Code Playgroud)

我试图确保我的项目迁移到 AndroidX 并收到一条消息:No Usages Found in the Project.

我没有更多的想法,你能帮我吗?

编辑

我尝试将其SharedPreferences用作临时解决方法,但它仍然不起作用 - 我猜想,该包未初始化。

flutter build apk --release --no-shrink阅读此线程后,我使用https://github.com/flutter/flutter/issues/65334构建了我的应用程序。

然后尝试flutter build apk --release --no-shrink使用我的应用程序版本FlutterSecureStorage并且它有效。

我真的应该将其视为有效的修复程序并始终以这种方式构建我的应用程序吗?

Oma*_*att 2

你如何初始化包?该问题似乎是在应用程序在后台运行时发生的,在此线程中发布的解决方法是在 Android 的 MainActivity 上注册插件 - 这会增加FlutterSecureStoragePlugin.

class MainActivity: FlutterActivity() {
  override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
    GeneratedPluginRegistrant.registerWith(flutterEngine)
  }
}
Run Code Online (Sandbox Code Playgroud)