В настоящее время я работаю над приложением для Android и немного возился с VS.
Мне было интересно, каковы реальные различия между двумя режимами? Я провел некоторое исследование, но я не полностью понял реальные различия и преимущества каждого из них, а также когда использовать конкретный режим.
Во время моего исследования я столкнулся с этими вопросами 1, 2 и 3, говоря о различиях между ними.
- Why debug mode runs slower than release mode?
- When releasing an application to Google Play, which mode should I use and why?
- Can I create my own mode?
Кажется, что мое приложение отлично работает в режиме отладки, но в режиме выпуска я получаю много предупреждений о том, что «файл символов отладки не найден».
- What are those debug symbols?
- What is the "81" folder in the obj/Debug or obj/Release?
- I also noticed that sometimes, when switching from Debug to Release, some Resource.Id are not found, and I need to recreate the axml file for the layouts plus cleaning the sln. How can I prevent it?
Как я понял, режим отладки использует некоторые файлы, которые не нужны режиму выпуска для запуска, я предполагаю, что отсутствующие файлы являются теми «символами отладки»?. Может быть, это проблема с Xamarin или с VS? Это предупреждения, которые я получаю:
Warning Directory obj\Release\81\android/assets contains Xamarin.Android.Support.v7.AppCompat.dll but no debug symbols file was found. 0
Warning Directory obj\Release\81\android/assets contains Java.Interop.dll but no debug symbols file was found. 0
Warning Directory obj\Release\81\android/assets contains Xamarin.Android.Arch.Core.Common.dll but no debug symbols file was found. 0
Warning Directory obj\Release\81\android/assets contains Xamarin.Android.Arch.Lifecycle.Common.dll but no debug symbols file was found. 0
Warning Directory obj\Release\81\android/assets contains Xamarin.Android.Arch.Lifecycle.Runtime.dll but no debug symbols file was found. 0
Warning Directory obj\Release\81\android/assets contains Xamarin.Android.Support.Animated.Vector.Drawable.dll but no debug symbols file was found. 0
Warning Directory obj\Release\81\android/assets contains Xamarin.Android.Support.Annotations.dll but no debug symbols file was found. 0
Warning Directory obj\Release\81\android/assets contains Xamarin.Android.Support.Compat.dll but no debug symbols file was found. 0
Warning Directory obj\Release\81\android/assets contains Xamarin.Android.Support.Core.UI.dll but no debug symbols file was found. 0
Warning Directory obj\Release\81\android/assets contains Xamarin.Android.Support.Core.Utils.dll but no debug symbols file was found. 0
Warning Directory obj\Release\81\android/assets contains Xamarin.Android.Support.Design.dll but no debug symbols file was found. 0
Warning Directory obj\Release\81\android/assets contains Xamarin.Android.Support.Fragment.dll but no debug symbols file was found. 0
Warning Directory obj\Release\81\android/assets contains Xamarin.Android.Support.Media.Compat.dll but no debug symbols file was found. 0
Warning Directory obj\Release\81\android/assets contains Xamarin.Android.Support.Transition.dll but no debug symbols file was found. 0
Warning Directory obj\Release\81\android/assets contains Xamarin.Android.Support.v4.dll but no debug symbols file was found. 0
Warning Directory obj\Release\81\android/assets contains Xamarin.Android.Support.v7.RecyclerView.dll but no debug symbols file was found. 0
Warning Directory obj\Release\81\android/assets contains Xamarin.Android.Support.Vector.Drawable.dll but no debug symbols file was found. 0
Warning Directory obj\Release\81\android/assets contains Xamarin.GooglePlayServices.Base.dll but no debug symbols file was found. 0
Warning Directory obj\Release\81\android/assets contains Xamarin.GooglePlayServices.Basement.dll but no debug symbols file was found. 0
Warning Directory obj\Release\81\android/assets contains Xamarin.GooglePlayServices.Maps.dll but no debug symbols file was found. 0
Warning Directory obj\Release\81\android/assets contains Xamarin.GooglePlayServices.Tasks.dll but no debug symbols file was found. 0
- Are those warning really something I need to worry about when releasing an app? Can they cause any further bugs?
Я уже пробовал:
Удаление этих файлов.
Очистка раствора и всего проекта.




Я постараюсь дать вам краткий обзор и добавить несколько ссылок. Вы не будете приходить читать какие-то книги или веб-страницы.
Конфигурации — это просто ярлыки для определенного набора настроек, которые вы используете для сборки.
Практический пример
Отладка: чтобы разработчик разработал приложение с множеством функций, которые увеличивают скорость разработки, например, полное ведение журнала и включенная отладка. DevelopmentRelease: для команды тестирования. Отладка отключена, оптимизация включена, ведется полное ведение журнала, используются расширенные отчеты о сбоях, используется тестовая инфраструктура (например, тестовый сервер). Вы также можете использовать другой манифест, чтобы у вас было другое имя пакета и чтобы приложения могли устанавливаться параллельно. Релиз: будет развернут в магазине игр с выбором производительности и стабильности. Отладка отключена, сокращено ведение журнала, оптимизирован код, используется производственная инфраструктура (например, сервер).
Однако вам решать, какой параметр вы установите для конкретной конфигурации. По умолчанию конфигурация Release оптимизирует код для более быстрой работы. Также по умолчанию конфигурация отладки имеет полную информацию об отладке для отладки и pdb только для выпуска. Но вы не сможете подключить отладчик в конфигурации Release только с pdb.
Файлы pdb используются для сопоставления сгенерированного кода с исходным кодом. Файлы PDB: что должен знать каждый разработчик
На ваши вопросы:
1. Почему режим отладки работает медленнее, чем режим выпуска?
Поскольку некоторые оптимизации выполнены (флажок оптимизации кода) => изменяют ваш код, чтобы он работал быстрее. Вы, наверное, этого не почувствуете. Существуют также другие преимущества производительности, когда отладка не требуется, например, не требуется разрешение точки останова и так далее.
2. При выпуске приложения в Google Play какой режим использовать и почему?
Всегда используйте режим Release, так как эта версия обычно работает быстрее и стабильнее. Вы, вероятно, установили в конфигурации отладки использование общей среды выполнения: Это развертывает среду выполнения моно как отдельное приложение на устройстве, чтобы развертывание в режиме отладки было быстрее => должны быть развернуты только изменения из вашего кода. Однако, когда вы загружаете отладочную версию в магазин воспроизведения, приложение не запускается, так как отсутствует общее приложение времени выполнения. Если вы используете Proguard для обфускации кода, обычно это также функция, которая включается только в режиме выпуска. Домашняя страница Proguard
Если у вас есть автоматический конвейер сборки, вам обычно не нужно выпускать сборку на локальном компьютере, так как это делается сервером сборки.
3. Могу ли я создать свой собственный режим? Да как я уже упоминал. Нажмите на стрелку рядом с Конфигурацией и откройте диспетчер конфигурации. В диспетчере конфигураций нажмите на выпадающую активную конфигурацию и выберите новую. Вы также можете скопировать уже существующую конфигурацию. => всегда смотрите в файле *.csproj, что содержит конфигурация. Visual Studio не всегда может скопировать все записи конфигурации.
4. Что это за символы отладки?
Вы можете игнорировать эти предупреждения, что вам не нужны файлы pdb для кода, который вам не принадлежит.
5. Что такое папка "81" в obj/Debug или obj/Release?
Я не знаю, почему вы заботитесь о папке obj, но 81 содержит материалы для Android для версии 8.1, которые используются во время сборки.
6. Еще заметил, что иногда при переключении с Debug на Release некоторые Resource.Id не обнаруживаются, и нужно пересоздать файл axml для раскладок плюс чистка sln. Как я могу предотвратить это?
Я также наблюдал такое поведение в более старых версиях Visual Studio. В настоящее время я использую VS 15.9.4 с Xamarin 4.3.12.77, и обычно это работает нормально. Проблема источника, вероятно, заключается в том, что идентификаторы ресурсов генерируются в процессе сборки. Когда вы переключаетесь на конфигурацию выпуска, эти символы также должны быть сгенерированы для выпуска, и, возможно, VS все испортит.
7. Действительно ли мне нужно беспокоиться об этих предупреждениях при выпуске приложения? Могут ли они вызвать какие-либо дополнительные ошибки?
Не беспокойтесь об этом! Отсутствующие файлы Pdb не доставят вам никаких проблем, они не связаны с apk.
Перед загрузкой apk в магазин игр я рекомендую прочитать следующее руководство по Android. Опубликуйте руководство по приложению
Отличный ответ! В ответе №4 что значит не мой? А что такое совместно используемое приложение времени выполнения?
@DanielReyhanian «код, который не принадлежит вам», код, который вы не писали (код Android из пакетов google или nuget), приложения Xamarin запускаются в моносреде выполнения, эта среда выполнения упакована в apk в режиме выпуска. В Debug он развернут как отдельное приложение. См. подробности: docs.microsoft.com/en-us/xamarin/android/deploy-test/…
@SushiHangover Не могли бы вы рассказать подробнее, пожалуйста? Что такое символы отладки и почему VS помечает их как предупреждения?