我在资产文件夹中存储了几个资产文件。
我使用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 文件夹中的二进制文件(使用较新版本),但保留文件名。如果每次我检测到应用程序升级时,我都会将文件再次复制到外部目录,这会是一个问题吗?
有没有更好的方法来实现这一目标?
我不明白为什么如果文件更新,再次将文件重写到外部目录可能会很糟糕; 事实上,我在多个用例中都遇到过这种情况,每次对文件进行编辑时,都必须在外部目录上重写文件。所以我会建议我使用的一种方法。
首先,在build.gradle
中,我生成当前在资产中的文件的 MD5 哈希,并将其存储为resValue
字符串。
其次(这可能发生在应用程序中需要它的任何地方),我读取存储在resValue
中的哈希并将其与以前存储的 MD5 哈希进行比较(我将其存储在SharedPreferences
中,此值表示资产文件在您的情况下更新到较新版本之前的哈希值)。
最后,如果哈希不匹配,我运行代码以从AssetManager
读取文件并在外部目录中重写它。
这样,每当修改资产中的文件时,它都会生成不同的哈希,并直接在外部目录中读取和写入。