2015-08-27 2 views
15

Я добавил некоторые из библиотек Android поддержки для моего проекта, и теперь я в основном сталкиваются с той же проблемой, как описано в этом вопросе: Android Studio exports strings from support library to APKКак удалить неиспользуемые языки из окончательного файла APK с помощью Xamarin.Android?

Поскольку я не могу использовать настройки Gradle с Xamarin, я могу Не используйте решение, описанное в ответе StackOverflow.

У кого-нибудь есть идея, как я могу сохранить только конкретную локализацию в моем конечном файле APK?

+1

Да, было бы неплохо, если бы Xamarin предоставил крючки в процесс сборки. Таким образом, мы могли бы настроить команды, не требуя поддержки пользовательского интерфейса. – Kiliman

ответ

0

Так что я, наконец, удалось сделать это в здравом образом

  1. Скачать Apktool из https://ibotpeaches.github.io/Apktool/
  2. Создать свой окончательный .apk с Xamarin и декомпилировать с apktool d MyApp.apk
  3. Перейти в каталог MyApp что Apktool создал и ищет каталог res
  4. Удалить все values директорий, которые заканчиваются идентификатором языка, который вам не нужно, например, если ваше приложение поддерживает только немецкий язык, удалите values-fr, values-es и т. д., но не values-de. Do not удалите неязыковые каталоги, например values-v11!
  5. Перекомпилируйте приложение с помощью apktool b MyApp
  6. Перекомпилированный пакет приложений теперь находится в MyApp/dist/MyApp.apk. Возьмите этот файл и подпишите его с помощью значка, затем zipalign.
  7. Загружайте APK в Google Play

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

1

Не можете проверить это сейчас, но вы имели дело с AndroidLinkSkip и AndroidLinkMode (reference) тегами в решении .csproj file?

Таким образом, было бы что-то вроде

<AndroidLinkMode>Full</AndroidLinkMode> 
<AndroidLinkSkip>Mono.Android.Export;I18N;I18N.West</AndroidLinkSkip> 

Кроме того, посмотрите на MandroidI18n. Из приведенного выше same reference:

Указывает поддержка интернационализации в комплекте с Применение, например, сортировки и сортировки таблиц. Значение является comma- или разделенных точкой с запятой список из одного или нескольких из регистронезависимых значений

<MandroidExtraArgs>-i18n=west</MandroidExtraArgs> 

или

<MandroidI18n>West</MandroidI18n> 
+0

Извините за поздний ответ, но компоновщик или конфигурация мандибулы, похоже, не имеют никакого значения. – Flagbug

2

В общем, в Xamarin, AndroidManifest обрабатывает специальные инструкции для использования библиотек. Android.App.UsesLibraryAttribute (строка имя, bool требуется) устанавливает определенные включения и исключения, которые будут в сгенерированном Manifest.XML.

Также, насколько я знаю, существует только три способа установить исключения ссылок, первый и второй упоминаются @sunseeker, однако документация Xamarin и примечания разработчика настоятельно рекомендуют не использовать Full, как указано выше, и, в целом, защитник, используя следующее:

SdkOnly (по умолчанию)

второй также упоминалось выше, для конкретных исключений, также рекомендуется не использовать это, если вы не уверены, что конкретный пакет не вызывался «за кулисами» по расширенной класса в иерархии.

Наконец, в третьем методе установить LinkMode в None, в то время как конкретные ссылки предусмотрены с помощью интерфейса AndroidManifest.

Некоторые другие способы получить эффективности являются:

  1. множества AndroidUseSharedRuntime собственности верно, по крайней мере во время отладки, чтобы уменьшить размер пакета.

  2. установить свойство AotAssemblies в true, если у вас есть стабильная сборка, чтобы предварительно скомпилировать библиотеки, которые включены.

  3. установить EmbedAssembliesIntoApk в false, если это не выпускная сборка.

Это примерно так же хорошо развивается знание Xamarin, надеюсь, что это поможет.

+0

Я уверен, что Xamarin Linker будет только вычеркнуть Bytecode, а не файлы ресурсов :( – Flagbug

+0

Я считаю, что ваше право на компоновщик , но с useLibraryAttribute w/linker должен получить оба, и вместе с другим сокращением он должен получить вас всю дорогу. :) –

Смежные вопросы