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

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

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

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

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

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

android android-assets
1个回答
1
投票

如果文件更新,我不明白为什么再次将文件重写到外部目录可能不好;事实上,我在多个用例中遇到过这种情况,每次编辑时都必须在外部目录上重写文件。所以我建议我使用一种方法。

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

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

最后,如果散列不匹配,我运行代码从AssetManager读取文件并在外部目录上重写它。

这样,无论何时修改资产中的文件,它都会生成不同的哈希值,并且可以直接在外部目录上读取和写入。

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