【问题标题】:Android string.xml resource file from server来自服务器的 Android string.xml 资源文件
【发布时间】:2016-12-20 10:52:38
【问题描述】:

我们已经知道,例如我们无法在运行时更改 res 文件夹值和文件,

我正在开发一个应用程序,我们支持超过 25 种语言,由于这些字符串文件,hance APK 大小急剧增加,我们非常关心 APK 大小,所以我们不想保留所有这些string.xml 项目本地文件(在apk 内)。

我们的想法是我们将在res 中只保留英文string.xml,而所有其他语言环境string.xml 应根据需要在应用程序启动时从服务器下载。

所以我们计划创建自己的getResource( key, currentLocale),然后这将从服务器下载的 XML(或文本)文件中读取。

请提出任何更好的想法或解决方法。

感谢您的支持。

【问题讨论】:

标签: android locale


【解决方案1】:

你知道Android App Bundle吗?这是一种将您的应用发布到 Google Play 的新方式,您无需重构代码即可使用它,而且您从 Play Store 下载的 apk 会更小?

来自 Google 开发者:

新的应用发布格式 Android App Bundle 构建和发布应用程序的有效方法。 Android 应用程序包 让您更轻松地以更小的应用程序提供出色的体验, 考虑到当今可用的种类繁多的 Android 设备。它是 易于切换。您无需重构代码即可开始 受益于较小的应用程序。

适用于 Android Studio 3.2 或更高版本以及 Unity 2018.3 测试版。

因此,如果您的项目有 25 种语言,并且我的设备已将英语配置为设备语言,那么当我去下载您的 APP 时,它将仅获得 strings.xml 文件,其他 strings.xml 保留在 Google Play 中,如果您将您的设备语言更改为葡萄牙语,Google Play 应用程序将尝试获取新的葡萄牙语strings.xml 并删除带有英文文本的旧文件。

在您尝试其他选项之前,请先尝试此方法,因为这是推荐的方式,您无需执行任何其他操作,只需将您的应用生成为 App Bundle 并发送到 Play 商店,如果您想要测试,下载您的应用然后更改设备语言,您将看到 Google Play 再次下载应用的新语言。

希望我能帮到你。

【讨论】:

  • 您确定 Google Play 会自动执行还是我们需要进行一些处理? Google Play 应用程序将尝试获取葡萄牙语的新 strings.xml 并删除带有英文文本的旧文件。
  • Google Play 服务会自动为您设备中的每个应用(使用此功能的应用)执行此操作。
【解决方案2】:

不幸的是,编译后无法更改资源。您唯一的方法是从服务器(即应用程序启动时)下载语言 shema 并将其保存(或根据需要更新)在 sqlite、文件或共享首选项中(存储选项:https://developer.android.com/guide/topics/data/data-storage.html#filesInternal)。

【讨论】:

    【解决方案3】:

    这里 Sqlite 选项更适合您的条件。

    以下是数据库表的结构(如LangTable)

    --------- ---------- -------- -------- --------- --- ----
    langKey Locale_En Local_hn Local_Fr.......................n

    --------- ---------- --------- -------- ------ ---- --- ---

    btnOk 好的……………………

    btnCancel 取消………………………………

    现在这里是获取相关本地字符串的方法

    public String getResource(String key, String local){
    
    String value = "";
    
    value = Select local from LangTable where langKey = 'key';
    
    return value;
    
    } 
    

    【讨论】:

      【解决方案4】:

      这可以借助 google play 的 AppBundle 功能来实现。 他的工作之一是允许稍后在用户需要或您决定时下载其他部分应用程序(字符串 res)。

      还有一个不好的方法呢!您可以完全忽略getString() 并编写一个从不同位置(如下载的文件)检索字符串的方法

      我建议你遵循 AppBundle 的方法,它是合理的,你不必与操作系统对抗。

      【讨论】:

        猜你喜欢
        • 2011-11-05
        • 1970-01-01
        • 2020-08-27
        • 1970-01-01
        • 2020-06-08
        • 2022-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多