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

Assets files need to be updated on app upgrade

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

我使用 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 应用程序,所以我有一些问题:

在每次应用程序升级时,我想替换资产文件夹中的二进制文件(更新版本),但保留文件名。如果每次我检测到应用程序升级时,我都将文件重新复制到外部目录,这会不会有问题?

有没有更好的方法来实现这个目标?

我不明白为什么如果文件已更新,将文件重新写入外部目录可能会很糟糕;事实上,我在多个用例中都遇到过这个问题,每次对文件进行编辑时,都必须在外部目录上重新写入文件。所以我会建议我使用的一种方法。

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

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

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

这样每当你的assets里面的文件被修改的时候,都会生成不同的hash,直接在external dir上读写