Flutter Secure Storage在发布模式下构建后无法工作



在调试模式下一切正常,并在模拟器上发布,但在物理设备上从FlutterSecureStorage读取值失败。当我使用FlutterSecureStorage进行注释时,应用程序中的其他功能可以正常工作。

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

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

<application
...
android:allowBackup="false"
android:fullBackupContent="false">

添加了在启动时删除密钥

final FlutterSecureStorage storage = FlutterSecureStorage();
Future<void> checkIfUserIsSignedIn() async {
storage.deleteAll();
try{
isUserSignedIn = await storage.read(key: _isLoggedIn);
}
catch (e){
print(e);
}
setState(() {});
}

尝试使用FlutterSecureStorage v.3.3.3FlutterSecureStorage v.3.2.0,但没有变化。我检查了我的设备的SDK版本(荣誉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:Userskaroflutter.pub-cachehostedpub.dartlang.orgflutter_secure_storage-3.2.0androidsrcmainjavacomit_nomadsfluttersecurestorageFlutterSecureStoragePlugin.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

和错误:

Installing buildappoutputsflutter-apkapp.apk...                376ms
Error: ADB exited with exit code 1
Performing Streamed Install
adb: failed to install C:Userskaroidom_mobilebuildappoutputsflutter-apkapp.apk: Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE: Package com.project.idom signatures do not match previously installed version; ignoring!]
Uninstalling old version...
Installing buildappoutputsflutter-apkapp.apk...                 6.9s

但成功地在模拟器上安装了应用程序,一切如预期。问题是当我在物理设备上安装应用程序时。要生成.apk,我使用flutter build apk --release并使用app-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 buildappoutputsflutter-apkapp-release.apk (48.9MB).

我的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:Userskaroflutter
• 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:UserskaroAppDataLocalAndroidsdk
• Platform android-30, build-tools 30.0.2
• Java binary at: C:Program FilesAndroidAndroid Studiojrebinjava
• 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 FilesAndroidAndroid 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!

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

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

编辑

我尝试使用SharedPreferences作为临时解决方法,但它仍然不起作用——我想,包没有初始化。

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

然后在使用FlutterSecureStorage的应用程序版本中尝试了flutter build apk --release --no-shrink,结果成功了。

我真的应该认为它是一个有效的修复程序,并始终以这种方式构建我的应用程序吗?

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

class MainActivity: FlutterActivity() {
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine)
}
}

你可以像我做一样解决这个问题

签入pubspec.yml

environment:
sdk: ">=2.16.2 <3.0.0"

flutter_secure_storage: ^4.2.1

入住android/app/build.gradle

compileSdkVersion 32

您是否将权限添加到清单文件中?

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

最新更新