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

时间:2018-01-03 20:16:28

标签: android android-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文件夹中的二进制文件(使用较新版本),但保留文件名。这是一个问题,如果我每次检测到应用程序升级时,都会将文件重新复制到外部目录吗?

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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