我编写了一个应用程序的更新版本,该版本适用于存储在资源资源文件夹目录中的文本文件。如果应用程序安装在没有以前版本的设备上,该应用程序可正常运行。但是,如果我在安装了先前版本的设备上安装更新版本,则资源文件似乎未更新。使用Android Studio进行安装时以及使用Google Play商店更新应用时都会发生这种情况。我尝试使用以下方式调用显式获取对资产的访问权限:
final Context context = getApplicationContext();
context.getAssets();
但它没有帮助。
感谢您的任何建议。
答案 0 :(得分:1)
Android应用程序的AFAIK Assets文件夹仅在安装时初始化一次。打包并安装应用程序后,无法更新assets文件夹。安装后如果您对资源进行任何更改,它将不会反映到您的旧安装版本。由于Asset文件夹是只读的,您无法编写或更新其中存在的任何文件。
如果要更新它,则需要卸载旧版本并安装新版本:Source。 或者您可以将文本放在资源原始文件夹中。 像这样的东西(txt文件的名称是' help'):
try {
Resources res = getResources();
InputStream in_s = res.openRawResource(R.raw.help);
byte[] b = new byte[in_s.available()];
in_s.read(b);
txtHelp.setText(new String(b));
} catch (Exception e) {
// e.printStackTrace();
txtHelp.setText("Error: can't show help.");
}
是的,基本上您只需使用以下命令删除现有资产文件夹:
public void clearApplicationData() {
File cache = getCacheDir();
File appDir = new File(cache.getParent());
if (appDir.exists()) {
String[] children = appDir.list();
for (String s : children) {
if (!s.equals("lib")) {
deleteDir(new File(appDir, s));
Log.i("TAG", "**************** File /data/data/APP_PACKAGE/" + s + " DELETED *******************");
}
}
}
}
public static boolean deleteDir(File dir) {
if (dir != null && dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
return dir.delete();
}