缩小apk时,Amplify.Auth.fetchAuthSession() userPoolTokens为空

Posted

技术标签:

【中文标题】缩小apk时,Amplify.Auth.fetchAuthSession() userPoolTokens为空【英文标题】:Amplify.Auth.fetchAuthSession() userPoolTokens is null when shrinking the apk 【发布时间】:2021-05-01 10:31:33 【问题描述】:

我正在使用用于颤振的放大库来连接到我的 aws 后端。成功调用Amplify.Auth.signIn() 后,我使用Amplify.Auth.fetchAuthSession() 访问当前凭据。像这样:

final result = await Amplify.Auth.fetchAuthSession(
  options: CognitoSessionOptions(getAWSCredentials: true),
);

if (!result.isSignedIn) return const None();

if (result is CognitoAuthSession) 
  return Some(result.userPoolTokens.idToken);

但是当我使用以下命令构建一个带有颤振的 apk 时,我的代码会中断。

flutter build apk

因为result.userPoolTokens 突然为空,我得到一个NoSuchMethodError。在 null 上调用了 getter 'idToken'。但是,如果我禁用收缩并使用以下命令构建 apk,一切都会再次运行。

flutter build apk --no-shrink

所以我认为这与缩小有关,我更愿意缩小我的应用程序,因为缩小的 apk 明显更小。

不胜感激。

【问题讨论】:

【参考方案1】:

这可能是由于 R8 收缩器应用的规则不充分。

Amplify android 库直到 2021 年 1 月 22 日发布的 1.6.10 版(参见 release notes)才提供任何 consumer-rules.pro

Amplify Flutter 的最新版本是0.0.2-dev.1,它使用 1.6.8 版本的 Android 库。我已经提出an issue on their GitHub repository,以更新到 1.6.10。

同时,您可以尝试在您的***应用项目中应用这些规则。

-keep class com.amazon.**  *; 
-keep class com.amazonaws.**  *; 
-keep class com.amplifyframework.**  *; 

【讨论】:

以上是关于缩小apk时,Amplify.Auth.fetchAuthSession() userPoolTokens为空的主要内容,如果未能解决你的问题,请参考以下文章

缩小apk的大小

如何在 Flutter 中缩小 APK 以使其尽可能小?

使用pngquant来缩小你的APK

Android Webp 完全解析 快来缩小apk的大小吧

使用播放服务 gcm 时如何减小 apk 大小

Android:缩小混淆动态访问的类