在Flutter中重新编写Java App,无法访问之前的内部存储

问题描述 投票:0回答:1

不久前我第一次用 Java 编写了我的应用程序,我使用应用程序的内部存储来保存玩家列表和一些 DLC。 Android 设备上的结构如下所示:

ca.bigbeanbag.myapp / files / backup / playerbackup.xml

我现在已经在 Flutter 中完全重写了应用程序(因此我也可以在 iOS 上发布),并且我希望能够从 java 版本迁移播放器备份。看来 flutter 使用不同的内部存储起点(它首先添加文件夹 app_flutter)。在从java版本升级到flutter版本的设备上,树看起来像:

ca.bigbeanbag.myapp /
.. app_flutter/files/backup      <-- new flutter storage location
.. files/backup                  <-- old java storage location

因此,在第一次运行新的 flutter 版本的应用程序时,我只需使用父级来找到 java 版本文件,并将它们导入到新的 flutter 存储位置

    var docsDir = await getApplicationDocumentsDirectory();
    String oldBackupPath = docsDir.parent.path + '/files/backup/backup.xml';
    String destinationPath = docsDir.path + '/files/backup/';

... and copy

在模拟器的调试模式下,这效果很好。

然而,在真实设备上,当我获得旧 java 文件夹 (ca.bigbeanbag.myapp/files) 的目录列表而不是在模拟器/调试模式下获得的目录列表时:

ca.bigbeanbag.myapp/files/
.. backup
.. dlc_stuff

我得到这个:

ca.bigbeanbag.myapp/files/
.. rList
.. generatefid.lock
.. PersistedInstallation.W0RFRkFVTFRd+(lots of letters).json

因此,在真实设备上释放时,我无法访问旧java版本的内部存储。

  • 我使用了与之前的java版本相同的包名
  • 我使用了相同的签名密钥
  • 我在java版Google Play Store上发布了新的flutter版本作为内部测试

我不知道此时还能做什么。希望有人能提供一些想法/指导。

flutter permissions internal-storage
1个回答
0
投票

我从来没有确切地知道为什么我无法从新的 flutter/dart 版本访问 java 内部存储区域,但我确实发现它与使用相对引用有关。

在 flutter 版本中,内部存储存储在“app_flutter”下,并向上跳到父级并向下跳到 java-app 创建的文件夹,如下所示:

   var docsDir = await getApplicationDocumentsDirectory(); 
   // docsDir now equals "../ca.bigbeanbag.net.myapp/app_flutter/"
    String oldBackupPath = docsDir.parent.path + '/javafiles/backup.xml';

不起作用。但是,如果我从顶部一直引用 java-app 创建的文件夹:

/sdcard/Android/data/... .../ca.bigbeanbag.myapp/javafiles/

它工作正常,我能够读取java文件。

希望这对其他人有帮助。感谢任何阅读该问题的人。

© www.soinside.com 2019 - 2024. All rights reserved.