Android Studio экспортирует строки из библиотеки поддержки в APK

Недавно я перешел с Eclipse на Android Studio. У меня есть проект с несколькими зависимостями модулей. Одной из зависимостей является appcompat библиотеки поддержки, включаемой следующим образом:

dependencies {
    compile "com.android.support:appcompat-v7:19+"
}

В документах Android я обнаружил, что эту библиотеку нужно импортировать с ресурсами, которые, похоже, работают нормально. Я использую библиотеку в своем проекте без проблем.

Проблема в том, что когда я создаю APK и запускаю aapt, вывод говорит:

locales: '--_--' 'de' 'nl' 'pl' 'sl' 'fr' 'cs' 'es' 'it' 'ca' 'da' 'fa' 'ja' 'nb' 'af' 
'bg' 'th' 'fi' 'hi' 'vi' 'sk' 'uk' 'el' 'tl' 'am' 'in' 'ko' 'ro' 'ar' 'hr' 'sr' 'tr' 
'lt' 'pt' 'hu' 'ru' 'zu' 'lv' 'sv' 'iw' 'sw' 'fr_CA' 'lo_LA' 'en_GB' 'et_EE' 'ka_GE' 
'km_KH' 'zh_HK' 'hy_AM' 'zh_CN' 'en_IN' 'mn_MN' 'es_US' 'pt_PT' 'zh_TW' 'ms_MY'

Но это не так, мое приложение поддерживает только первые 8 перечисленных языков. Когда я загружаю этот apk в Play, он показывает мне изменения в предыдущей версии (сборка с eclipse) и говорит, что я добавил 47 языков, но опять же, это неправда. Скриншот из консоли разработчика Play: Снимок экрана из консоли разработчика Play

Я обнаружил похожую проблему в коде Google, но есть нет ответа, я хочу решить эту проблему, потому что мне нужно загрузить свой новый APK в Play.

Есть идеи, как избавиться от этих 47 других языков, в то время как библиотека должна оставаться импортированной с ресурсами, чтобы работать правильно?

ОБНОВЛЕНИЕ: в коде Google они говорят, что это ожидается на данный момент, и они хотели добавить способ выбора того, что вы хотите включить в apk.


person Primoz990    schedule 29.11.2013    source источник
comment
почему это проблематично для вас на самом деле? если ваш основной код не поддерживает определенный язык, фреймворк вернется к строкам по умолчанию, которые по-прежнему используют переведенные строки для библиотеки, если они присутствуют   -  person Marcin Orlowski    schedule 09.01.2014
comment
@Marcin: Единственная проблема в том, что Play Store считает, что мое приложение поддерживает все эти языки. Я знаю, что приложение будет нормально работать с откатом к строкам по умолчанию.   -  person Primoz990    schedule 09.01.2014


Ответы (2)


На code.google.com говорится, что плагин gradle имеет возможность ограничения ресурсов, так как выпущена версия 0.7.0.

Примечание в примечания к выпуску версии 0.7.0:

Новая опция в продукте Flavor (и defaultConfig) позволяет фильтровать ресурсы с помощью опции -c в aapt.

  • Вы можете передать одно значение (resConfig) или несколько значений (resConfigs) через DSL.
  • Все значения из конфигурации и вариантов по умолчанию объединяются и передаются в aapt.
  • См "базовый" пример.

Вот пример кода, который можно добавить в файл build.gradle вашего проекта:

android {
    defaultConfig {
        resConfigs "en", "de", "es" //Define languages that your app supports.
    }
}

Я потратил много времени, чтобы найти «Базовый образец»… может быть ссылка в примечаниях к выпуску:/ так вот ссылки:

ПРИМЕЧАНИЕ. Для версии 0.7.x требуется Android Studio 0.4.+ и Gradle 1.9.

person Primoz990    schedule 12.12.2013
comment
Отличный ответ. (Но эти ссылки на примеры дают HTTP 403 или подобные ошибки.) resConfigs должно быть в документации (tools.android.com/tech-docs/new-build-system/user-guide), а не просто упоминается в примечаниях к выпуску. - person Jerry101; 13.12.2014
comment
есть ли способ сделать это в Eclipse - person pt123; 29.04.2015
comment
Вот официальный пример: developer.android.com/studio /сборка/ - person Sam; 20.11.2016

Решение Xamarin.Android может помочь кому-то, кто столкнулся с этой проблемой. Проблема возникает также, если вы используете сервисы Google Play. Добавьте следующее в проект Android .csproj с поддерживаемыми языками приложения.

<PropertyGroup>
     <AndroidUseAapt2>true</AndroidUseAapt2>
     <AndroidAapt2LinkExtraArgs>-c de,el,es,fr,it</AndroidAapt2LinkExtraArgs>
</PropertyGroup>
person backspace83    schedule 19.02.2021