Intereting Posts

Как удалить неиспользуемые языки из окончательного файла APK с помощью Xamarin.Android?

Я добавил некоторые из библиотек поддержки Android в свой проект, и теперь я в основном сталкиваюсь с той же проблемой, что и в этом вопросе: Android Studio экспортирует строки из библиотеки поддержки в APK

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

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

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

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

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

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

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

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

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

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

  3. Установите EmbedAssembliesIntoApk в false, если это не будет сборкой релиза.

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

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

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

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

Кроме того, взгляните на MandroidI18n . Из той же справки, приведенной выше:

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

 <MandroidExtraArgs>-i18n=west</MandroidExtraArgs> 

или

 <MandroidI18n>West</MandroidI18n> 

Поэтому я, наконец, смог сделать это разумно

  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 . Не удаляйте values-v11 каталоги, например values-v11 !
  5. Перекомпилируйте приложение с помощью apktool b MyApp
  6. MyApp/dist/MyApp.apk пакет приложений теперь находится в MyApp/dist/MyApp.apk . Возьмите этот файл и подпишите его с помощью значка, затем zipalign.
  7. Загрузите apk в Google Play

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