如何在发布APK中添加库中轻松删除不必要的本地化资源

时间:2014-03-26 08:30:06

标签: android localization resources apk strip

我的应用非常简单,不需要大量本地化。

我提供默认语言(英语)和德语 - 这是我想要和将要提供的所有内容,因为该应用程序完全专注于德国。

正如我最近添加的Google Play服务库,我面临的问题是,我的应用程序中添加了56(!!!)其他语言,正如Google Play商店告诉我的那样。原因是:图书馆附带了更多我不希望在我的应用程序中使用的语言资源。如果Google Play对话框以法语弹出,其余部分只有英语/德语,则没有任何意义。

我不想手动删除库项目中的资源,这很繁琐且容易出错。另外,也许我会有另一个应用程序依赖于同一个库,我想要更多语言?

那么 - 我怎么能完成这个?

谢谢!

1 个答案:

答案 0 :(得分:13)

我理解您的问题,简单的解决方案是从库中删除所有其他语言,但是,您需要对每个新版本的Google Play服务执行此操作,正如您所说,如果您在其他应用中需要其他语言,这不是最好的选择。

而是尝试强制您的应用使用德语或英语作为默认值:

您需要在Application类中添加此代码

@Override
public void onCreate() {
    super.onCreate();
    avoidOtherLanguages();
    // your code here
}

@Override
public void onConfigurationChanged() {
    super.onConfigurationChanged();
    avoidOtherLanguages();
    // your code here
}

public void avoidOtherLanguages() {
    if (!Locale.getDefault().getLanguage().equals(Locale.GERMAN.getLanguage()))
    {
        // when other than german, use english
        final Configuration configuration = getResources().getConfiguration();
        configuration.locale = Locale.ENGLISH;
        getResources().updateConfiguration( configuration, getResources().getDisplayMetrics() );
    }   
}

我希望它适合你!

** 更新:解决方案 **

经过大量的谷歌搜索,你想出了一个解决方案!如果您使用 gradle 作为构建系统,则可以在 build.gradle 文件中执行此操作:

   .....
   defaultConfig {
    minSdkVersion 15
    targetSdkVersion 22
    versionCode 75
    versionName "1.0.0"

    resConfigs "en", "de"
}
...

使用 resConfig 告诉gradle您只使用这些区域设置配置,图书馆中的所有其他语言都将从APK套装中删除!

请告诉我这是否适合您!