代码之家  ›  专栏  ›  技术社区  ›  live-love

应用程序升级时需要更新资产文件

  •  0
  • live-love  · 技术社区  · 8 年前

    我有几个资产文件存储在资产文件夹中。

    我使用AssetManager getAssets并将这些文件复制到外部目录:

    in = assetManager.open(filename);
    File outFile = new File(getExternalFilesDir(null), filename);
    out = new FileOutputStream(outFile);
    String filePath = outFile.getAbsolutePath();
    

    然后,我使用文件路径打开文件:

        this.mydat = new RandomAccessSteamIn();
        this.mydat.setFile(filePath1);
        this.mydat = new RandomAccessFile(filePath2, "r");
    

    读取二进制资产文件。

    这是我第一次部署Android应用程序,所以我有一些问题:

    在每次升级应用程序时,我都希望替换资产文件夹中的二进制文件(使用较新版本),但保留文件名。如果每次检测到应用程序升级,我都会将文件复制到外部目录,这会是一个问题吗?

    有没有更好的方法来实现这一点?

    1 回复  |  直到 8 年前
        1
  •  1
  •   riadrifai    8 年前

    如果文件被更新了,我不明白为什么重新将文件写入外部目录会很糟糕;事实上,我在多个用例中都遇到过这种情况,每次对文件进行编辑时,都必须将其重新写入外部目录。因此,我将建议使用一种方法。

    首先,在 build.gradle ,我生成资产中当前文件的MD5哈希,并将其存储为 resValue 一串

    其次(这可能发生在应用程序中任何需要它的地方),我读取了存储在 resValue公司 并将其与之前存储的MD5哈希进行比较(我将其存储在 SharedPreferences ,此值表示资产文件在更新到您的案例中的较新版本之前的哈希值)。

    最后,如果哈希不匹配,我将运行代码从中读取文件 AssetManager 并将其重新写入外部目录。

    这样,每当资产中的文件被修改时,它都会生成不同的散列,并直接在外部目录中读写。