资产没有被版本升级取代?

时间:2015-11-02 01:25:12

标签: android resources assets

我编写了一个应用程序的更新版本,该版本适用于存储在资源资源文件夹目录中的文本文件。如果应用程序安装在没有以前版本的设备上,该应用程序可正常运行。但是,如果我在安装了先前版本的设备上安装更新版本,则资源文件似乎未更新。使用Android Studio进行安装时以及使用Google Play商店更新应用时都会发生这种情况。我尝试使用以下方式调用显式获取对资产的访问权限:

    final Context context = getApplicationContext();
    context.getAssets();

但它没有帮助。

感谢您的任何建议。

1 个答案:

答案 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();
    }