资产文件需要在应用程序升级时更新
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上读写
我在资产文件夹中存储了几个资产文件。
我使用 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上读写