检查在应用程序重新安装(Android)之间是否更改了资产

检查在应用程序重新安装(Android)之间是否更改了资产,android,assets,Android,Assets,是否有办法查看在Android中重新安装应用程序之间资产文件是否发生了更改? 类似md5或整个资产文件夹上的时间戳(afaik资产只是一个压缩文件,所以可能只检查此文件的更改?) 我们有一个应用程序,其中我们将配置xml存储在assets文件夹中,然后将它们解析为二进制形式。由于应用程序仍在开发中,XML有时会发生变化。我希望能够自动确定资产是否已更改,以便能够将XML“重新加载”为二进制格式。通常情况下,我们有相同数量的xml文件,这些文件的内容有一点变化,所以仅仅查看文件列表是否有变化是不够

是否有办法查看在Android中重新安装应用程序之间资产文件是否发生了更改? 类似md5或整个资产文件夹上的时间戳(afaik资产只是一个压缩文件,所以可能只检查此文件的更改?)

我们有一个应用程序,其中我们将配置xml存储在assets文件夹中,然后将它们解析为二进制形式。由于应用程序仍在开发中,XML有时会发生变化。我希望能够自动确定资产是否已更改,以便能够将XML“重新加载”为二进制格式。通常情况下,我们有相同数量的xml文件,这些文件的内容有一点变化,所以仅仅查看文件列表是否有变化是不够的

我知道保留一个版本号是可能的,但如果可能的话,我想避免它,因为它容易出错,并且需要每个程序员遵守一些规则

编辑

现在找到了这个答案:


如图所示,资产时间戳可能不是一个好主意,因为它不反映资产文件的时间戳,而是反映构建时间。

获取每个文件的哈希值,并与文件名一起存储在共享首选项或文件中。还存储当前版本代码。启动时,将应用程序的版本代码与磁盘上的版本代码进行比较,如果已更改,请计算资产的哈希值并与磁盘上的进行比较

我试试看。在这种情况下,我不太关心性能,但和往常一样,性能——在您尝试之前,您永远不会知道。资产不能超过1兆字节,所以这应该不是问题。另外,只有当应用程序版本更改时,您才能执行此操作。不过,一定不要在主线程上执行此操作。如何确定应用程序版本是否已更改?我是否必须手动提供应用程序版本代码,或者是否有其他方法检查它?您的答案与比较哈希正确工作,谢谢。我已经用一种足够快的方式制作了它,而且不需要跟踪版本号。很酷,很高兴它能为你工作。顺便说一句,您可以像这样从包管理器中获取版本号:
PackageInfo pinfo=getPackageManager().getPackageInfo(getPackageName(),0);int ver=pinfo.versionCode