Файл properties txt невозможно разместить в указанном местоположении

Обновлено: 04.07.2024

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

После этого добавьте defaultConfig gradle приложения:

Ваше приложение должно быть типа Multidex. Вы должны написать его в манифесте:

«MyApplication» должен быть либо классом Multidex, либо расширять его.

Так что MyApplication extends android.support.multidex.MultiDexApplication ? это не хороший способ решить проблему, лучше удалить неиспользуемый код и библиотеки, реорганизовать код вашего проекта отсутствие 80000 методов было бы хорошим решением, если бы в библиотеках googles не было 80000 методов (единственная причина, по которой они добавили multidex, заключалась в том, что их собственная библиотека сервисов, которую они хотели, чтобы все использовали, имела десятки тысяч методов).

Я исправил свою проблему с помощью решения ниже:

В файле сборки Gradle добавьте зависимость:

А затем в разделе «defaultConfig» добавьте:

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

изменить ваше приложение или модуль build.gradle

Согласно официальной документации

Поддержка Multidex для Android 5.0 и выше

Android 5.0 (уровень API 21) и выше использует среду выполнения под названием ART, которая изначально поддерживает загрузку нескольких файлов DEX из файлов APK. ART выполняет предварительную компиляцию во время установки приложения, которая сканирует файлы classesN.dex и компилирует их в один файл .oat для выполнения устройством Android. Поэтому, если ваш minSdkVersion 21 или выше, вам не нужна библиотека поддержки multidex.

Для получения дополнительной информации о среде выполнения Android 5.0, прочитайте ART и Dalvik.

Что такое файлы dex: файлы приложения Android (APK) содержат исполняемые файлы байт-кода в виде файлов Dalvik Executable (DEX), которые содержат скомпилированный код, используемый для запуска вашего приложения.

Причина этого исключения: спецификация DEX ограничивает общее количество методов, на которые можно ссылаться в одном файле DEX, до 65 536 (ограничение ссылки 64 КБ), включая методы платформы Android, библиотечные методы и методы в вашем собственном коде.

Шаг 01. Добавьте следующую зависимость следующим образом

Для пользователей не Androidx,

Для пользователей Androidx,

Шаг 02:

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

Вы можете следить за этим .

Версии платформы до Android 5.0 (уровень API 21) используют среду выполнения Dalvik для выполнения кода приложения. По умолчанию Dalvik ограничивает приложения одним файлом байт-кода classes.dex для каждого APK. Чтобы обойти это ограничение, вы можете добавить в ваш проект библиотеку поддержки multidex:

Если ваш minSdkVersion установлен на 21 или выше, все, что вам нужно сделать, это установить для multiDexEnabled значение true в файле build.gradle уровня модуля, как показано здесь:

когда вы используете зависимости, чтобы ваши методы увеличились! У Google есть решение для этого. это называется Multidex!

ПРИМЕЧАНИЕ: убедитесь, что min SDK превышает 14.

в вашем build.gradle:

ДЛЯ ИСПОЛЬЗОВАНИЯ Android®:

Для получения дополнительной информации перейдите по оригинальной ссылке:

Привет проблема здесь удалить его

Примечание: не используйте комбинированную цель play-services. Это приносит десятки библиотек, вздутие живота вашего приложения. Вместо этого укажите только определенные API-интерфейсы сервисов Google Play, которые использует ваше приложение.

Как для службы определения местоположения

да, теперь я столкнулся с проблемой, моя кнопка запуска отключена.

Если вы строите DEBUG APK , просто добавьте:

и если вы создаете RELEASE APK , добавьте multiDexEnabled true в блок релиза как

Для флаттер-проектов вы также можете решить эту проблему

откройте свой \ android \ app \ build.gradle

у вас должно быть следующее:

Если ваш minSdkVersion установлен на 21 или выше, все, что вам нужно сделать, это установить для multiDexEnabled значение true в defaultConfig. Как это

если ваш minSdkVersion установлен в 20 или ниже, добавьте multiDexEnabled true в defaultConfig

И определить реализацию

В конце вы должны иметь:

Просто сделайте следующее:

И добавьте ниже зависимость в вашем build.gradle файле уровня приложения

Пожалуйста, попробуйте добавить это в ваше приложение defaultConfig <>. Это поможет мне решить проблему

В файле сборки Gradle добавьте зависимость:

А затем в разделе «defaultConfig» добавьте:

Теперь, если вы столкнулись с этой ошибкой

Ошибка: не удалось разрешить: multidex-instrumentation Открыть файл

Вам нужно изменить свой gradle на 3.0.1

И поместите следующий код в файл gradle-wrapper.properties

добавить класс Applition в проект и представить его в AndroidManifest, который расширяется от MultiDexApplication

Сначала запустите проект, чтобы создать ошибку, затем очистите проект

Наконец, перезапустите проект и наслаждайтесь им

У меня все еще есть «Не удалось разрешить: мультидекс-инструментарий»

Если вы используете minifyEnabled с Proguard, вам, скорее всего, не нужно будет включать multi-dex. Я согласен с MG Developer, что вы должны стараться избегать multi-dex, если это возможно. Моим решением было включить multi-dex только для отладочных сборок. minifyEnabled решает проблему для релизных сборок

Каковы некоторые недостатки использования мультидекса, если это необходимо?

и по моему Manifest.xml я должен установить

чтобы никого не смущать я тоже делаю

для Android это также работает для меня:

у меня не работает

не забудьте сделать проект чистым и перестроить после установки multiDexEnabled true. Это исправило это для меня. Изменение атрибута имени приложения в манифесте также не сработало, но включение multiDex в файле сборки gradle и добавление реализации сработало. Кажется, что менять тег манифеста сейчас необязательно?

У вас слишком много методов. Файл Android dex имеет ограничение в 65536 методов, которые вам разрешено иметь.

Для начала, если вам не нужен весь API Google Play Services и только местоположение, замените

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

Все, что мне нужно было сделать, это установить для Minimum SDK 21 значение в File> Project Structure> App> Flavors

добавьте свой файл android / app / build.gradle

Я столкнулся с этой ошибкой дважды, и решение для этого есть; Проверьте файл приложения, чтобы увидеть ваш целевой SDK, если он 20 или выше, просто добавьте одну строку в ваш defaultconfig

Иначе, если ваш targetSDK меньше 20, добавьте строку в defaultConfig, а также добавьте зависимость

Проверьте эту ссылку для более.

Использование поддержки multidex должно быть последним средством. По умолчанию сборка Gradle будет собирать тонну транзитивных зависимостей для вашего APK. Как рекомендуется в Документах для разработчиков Google , сначала попытайтесь удалить ненужные зависимости из вашего проекта.

С помощью командной строки перейдите к корневому каталогу проектов Android. Вы можете получить дерево зависимостей компиляции следующим образом.

Вы можете получить полный список дерева зависимостей

введите описание изображения здесь

Затем удалите ненужные или транзитивные зависимости из вашего приложения build.gradle. Например, если ваше приложение использует зависимость, называемую com.google.api-client, вы можете исключить ненужные вам библиотеки / модули.

Затем в Android Studio выберите «Создать»> «Анализировать APK» . Выберите файл APK выпуска / отладки, чтобы просмотреть его содержимое. Это даст вам методы и количество ссылок следующим образом.

И все ничего, кабы ни два обстоятельства:

  • пользовательское соглашение API Яндекс гласит: Сервис может использоваться Пользователем только в рамках сайтов или мобильных приложений, доступных для бесплатного открытого использования неограниченным кругом лиц. Сервис не может использоваться для проектов, требующих оплаты, или иным образом ограничивающих доступ к ним третьих лиц. Необходимость зарегистрироваться не считается ограничением доступа в рамках настоящего пункта.
  • пользовательское соглашение Google говорит примерно то же самое, но они предлагают коммерческую версию при превышении определенного суточного лимита запросов.

Т.е. API карт обоих производителей можно использовать только при бесплатном и неограниченном доступе пользователей к карте, что в принципе невозможно из 1С-приложения, где каждая сессия платная. А вышеупомянутые энтузиасты по сути своей нарушители, и они об этом знают. А кто хочет это опровергнуть, пусть попробует опубликовать тиражный продукт - арбитражка обеспечена! Но мобильная платформа 1С пока остается бесплатной. Это нелицензируемое мобильное приложение, в простейшем случае оно может работать автономно, без подключения к серверу центральной базы, значит, никакие соглашения не нарушаются!

Едем дальше. Читаем описание изменений к платформе 8.3.3 :

Для мобильной платформы реализовано поле HTML-документа. Поле HTML-документа обладает следующими особенностями:

Не поддерживаются свойства Документ и Вывод.

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

Т.е. досылать команды через Документ.parentWindow.eval() пока нельзя и отлавливать события HTML-документа тоже. Возможно, просто не успели реализовать, а возможно для дополнительной популяризации нативного инструмента, который сам ничего из этого пока не умеет, но будущее покажет: просачиваются таки наши хотелки в зазеркалье или нет? :) Короче, на данный момент в мобильной платформе вообще нет обратной связи ни с какой картой, и это досадно, потому что лишает ее новых возможностей применения и дальнейшей популяризации!

Разбираемся далее. Почему разработчики 1С для Android-устройств выбрали именно Google maps API? История умалчивает, возможно, для облегчения будущего выхода на мировой рынок, в чем я лично, как истинный 1С-евангелист нисколько не сомневаюсь! :) Но скорее всего именно из-за возможности использования коммерческой версии, которой у Яндекса увы нет. Для iOS-устройств особого выбора не было - только Apple MapKit. Но я далее буду рассматривать только Android-устройства как наиболее перспективные для российского бизнеса. Мой прогноз: большинство мобильных 1С-приложений будут писаться именно под Android, потому что:

цены на такие устройства доступнее, а ассортимент шире

процесс отладки проще: приложение можно выкладывать на устройство сразу после сохранения конфигурации. Что ни говори, а эмулятор никогда не заменит живой аппарат.

GooglePlay дешевле AppStore, а выпуск новых релизов быстрее

На этом заканчиваю теоретическое вступление, и перехожу к практической части статьи, предлагаю такой план действий :

сформулировать максимально прикладную задачу для автоматизации бизнеса мобильными средствами

постараться реализовать ее средствами, встроенными в платформу, сравнить с тем же самым на Yandex API

проанализировать, что получилось и выдать рекомендации 1С по дальнейшему развитию инструмента геопозиционирования

Формулируем задачу.

Формулируем обоснование для ЛПР (лиц, принимающих решения):

агент, используя мобильную навигацию, будет меньше тратить времени на дорогу, значит больше успевать

тайм-шиты будут доставляться в офис быстрее, значит быстрее будут выставляться счета и акты

техническая информация, доставляемая в офис станет точнее, т.к. будут использованы предопределенные классификаторы, значит в будущем будет меньше холостых выездов

Кстати, это хорошая практика - функциональные требования описывать языком сценарного поведения и снабжать технико-экономическим обоснованием на языке ЛПРов. ЛПРы не любят много читать, зато быстро выхватывают из контекста профит. Облегчите им работу, и они быстрее примут решение.

Переходим к этапу моделирования , при подготовке требований к демонстрационному макету сформулируем ряд допущений и ограничений:

в модели не будет механизмов обмена с центральной базой, поступление контактов и нарядов будет имитироваться программно

в модели предусмотреть две карты, встроенную и Яндекс, что бы провести визуальное сравнение

в мобильном устройстве может быть отключен или вообще отсутствовать GPS, в этом случае текущее местоположение определять по сотовой телефонии

выводить список клиентов, в порядке увеличения расстояния от текущего местоположения (по аналогии Чекин в Foursquare)

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

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

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

предусмотреть возможность прикреплять к документу Наряд фотографии

Для разработки и отладки ничего особенного не требуется! Запуск готового приложения на мобильном устройстве может происходить практически мгновенно после нажатия F7 в конфигураторе на вашем компе, если вы сделаете следующее:

на своем компе поднимете web-сервер и настроите публикацию мобильного приложения

установите и настроите на своем мобильном устройстве мобильную платформу (файл 1cem-arm.apk из дистрибутива мобильной платформы)

теперь из под оболочки мобильной платформы ваша конфигурация моментально скачивается с web-сервера, налету компилируется и запускается в пользовательском режиме, лепота!

Но если вы хотите массово тиражировать свое мобильное приложение , то вам придется его собирать с помощью мобильной платформы, предварительно установленной и настроенной на вашем компе (детали см со следующего параграфа). А если вы планируете периодически выпускать новые релизы и автоматически заливать их всем вашим пользователям, то вам не обойтись без службы Google Play. Про настройку Google Play рассказывать не буду, там все интуитивно понятно. Единственная сложность чисто психологическая - один раз заплатить Гуглу 30$ за неограниченную возможность выкладывать свои приложения и релизы к ним!

Android SDK -

Требования к Android SDK:

Версия Android SDK Tools - 20.0.3 и выше;

Версия Android SDK Platform-tools - 14 и выше;

Версия SDK Platform - строго API 17.

Apache Ant -

Все пути должны быть заполнены, даже если вы не будет использовать iOS. Чтобы не запутаться с путями, вот подсказка, что нужно Сборщику:

Каталог Android SDK должен содержать:
папку: \platforms\android-17\aux
файл: \platforms\android-17\build.prop
файл: \platforms\android-17\source.properties
файл: \platforms\android-17\source.properties
файл: \tools\source.properties

Каталог JDK должен содержать:
файл: \bin\jar.exe

Каталог Apache Ant должен содержать:
файл: \bin\ant.bat

Каталог PuTTy должен содержать:
файл: \pscp.exe
файл: \plink.exe
Но если вы в группе "Мобильные приложения" снимите галочку "Для ОС iOS", то достаточно указать пустую папку.

Так же, в справочник “Мобильные платформы” надо загрузить zip-файл, в котором должны лежать папки “Android” и “iOS” из дистрибутива.

В справочнике “Мобильные конфигурации” создайте элемент и загрузите туда выгруженный из конфигуратора файл 1cema.xml.

В справочнике “Мобильные приложения” для каждого приложения надо создать сначала группу и заполнить интуитивно-понятные параметры, а под группой создать элемент - это и будет основной точкой сборки и выгрузки файла мобильного приложения.

Теперь внимание, достаточно важный момент! Пока вы запускали свое приложение из-под мобильной платформы на мобильном устройстве, встроенная карта работала нормально. Но если вы собранное мобильное приложение попытаетесь запустить как самостоятельное приложение, то встроенная карта отображаться не будет. Потому что для каждого мобильного приложения необходимо получить ключ карты у Google и ввести его в Сборщике в группе “Мобильные приложения” в поле “Ключ для работы с картами Google”. У мобильной платформы 1С для Андройда такой ключ есть. Но как получить свой ключ в Google нигде не написано. Я спрашивал у разработчиков 1С на партнерском форуме, в итоге пришлось самому разобраться:

Заполняем Project name, Project ID, ставим галку “ have read and agree . ”. Имя должно быть уникальное, система сама подскажет.

Дальше запускается механизм авторизации через SMS, если вы ее не проходили при создании google - аккаунта

Дальше в вертикальном меню “APIs&auth” открываем дерево “APIs”, находим пункт “Google Maps Android API v2” и ставим STATUS = ON

Дальше в меню “APIs&auth” открываем “Credentials” и нажимаем кнопку CREATE NEW KEY в боксе “Public API access”

В промежуточном окне нажимаем “Android key”

В следующем окне в поле ввода копируем из Сборщика “Параметр получения ключа для работы с картами Google” и нажимаем Create

Теперь появился бокс “Key for Android applicaion”, а в нем нужный нам ключ “API key” примерно такого формата: AIzaSyAYHQodtybccavFJP0YLDwp35kZE2be5J8

“Общие объекты” - “Геопозиционирование”:

И в “Глобальный контекст” - “Процедуры и функции работы с геопозиционированием”:

Честно говоря, возможностей пока мало, что называется для галочки. Вот все, что мы пока можем сделать:

определить текущие координаты мобильного устройства

перевести строковое представление адреса в географические координаты и обратно

вывести список точек на карту, причем надписи можно увидеть только по клику, а цвет и форма не кастомизируются

А хотелось бы делать то, что уже умеют карты Яндекс и Google в обычных и управляемых формах (но, как мы выяснили, не совсем легально!), в порядке убывания важности:

играть цветами и формами наносимых на карты объектов (например, не просто закрытый балун выводящий надпись по клику, а сразу надпись)

двигать объекты на карте и передавать в модуль формы новые геокоординаты, перехватывать клики как на карте так и на объектах

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

показывать гео-слои (схема, спутник, гибрид, народная карта)

Ну и как бонус, поиметь функцию вычисления расстояния между двумя точками по прямой, хотя я и реализовал свою формулу, но зачем изобретать велосипед?

В итоге, вот список того, что получилось реализовать из требований к нашей задаче:

Задача

Встроенными средствами

Яндекс API

в мобильном устройстве может быть отключен или вообще отсутствовать GPS, в этом случае текущее местоположение определять по сотовой телефонии

выводить список клиентов, в порядке увеличения расстояния от текущего местоположения (по аналогии Чекин в Foursquare)

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

да, кроме клика на карте

нет
(но на ИС есть примеры решения)

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

в журнале да, на карте нет

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

нет
(но на ИС есть примеры решения)

предусмотреть возможность прикреплять к документу Наряд фотографии

Все управление я разместил в одном окне - журнале документов "Наряды". Изначально база пустая, заполнение демонстрационными данными - по кнопке “Заполнить демо-данные”.

Автоматическое преобразование адресов в геокоординаты там, где они еще не заполнены - по кнопке “Заполнить гео координаты”. Если геокоординаты определены, в журнале Наряды в колонке "Гео" вместо серого шарика появится зеленый. Если все еще серый, тогда можно зайти в Наряд, потом в Адрес и нажать кнопку "Установите текущие координаты".

В окне журнала Наряды в самом низу есть поле "Текущие координаты". Его можно заполнить нажатием на кнопку “Текущее местоположение”.

Нажатие на кнопку “Checkin” выводит список нарядов в обратном порядке удаленности адреса от текущего местоположения, и в этом списке можно одним нажатием открыть документ Наряд.

Спасибо за внимание, смотрите скриншоты, скачивайте архив, ставьте на мобильное устройство, дорабатывайте конфигурацию, пишите свои пожелания 1С-разработчикам в форуме под статьей. Надеюсь, письмо дойдет! ;)

PS1. Выкладываю скрипт отображения карты Яндекс:

//убираем глюк встроенного в платформу браузера: ошибка сценария Script error при повторном отрытии окна
window.onerror = myOnError ;
function myOnError ( msg , url , lno )

var myMap ;
ymaps.ready ( function ()
myMap = new ymaps.Map ( ' YMapsID ' ,
center : [ //Здесь добавим текущие координаты],
zoom : //Здесь установим зум,
controls : [ ' geolocationControl ' , ' typeSelector ' , ' trafficControl ' ],
behaviors : [ ' default ' , ' scrollZoom ' ]
> ) ;
//Здесь добавим точки
> ) ;

< style type = "text/css" >
html , body width : 100 %;
height : 100 %;
>
style >

head >
< body >
< div id = "YMapsID" style = "width:100%;height:100%;" div >
body >
html >

Вместо тега " //Здесь добавим точки" я программно вставляю такой код:

Для А = 0 ПО Буфер . Количество () - 1 Цикл

Строка = Буфер [ А ];

Если Строка . Широта <> 0 И Строка . Долгота <> 0 Тогда

В качестве значений Строка.Цвет я использую:

А вообще все возможные балуны можно посмотреть здесь:

PS2. Выкладываю процедуру рассчета расстояния между двумя точками по прямой по заданным координатам в градусах.

Было взято на Мисте и слегка подправлено:

Функция РасстояниеПоКоординатам ( StartLat , StartLong , EndLat , EndLong )
// Передаваемые широта/долгота в градусах и сотых долях
//StartLat: double; // Начальная широта
//StartLong: double; // Начальная долгота
//EndLat: double; // Конечная широта
//EndLong: double; // Конечная долгота

//// Переменные, используемые для вычисления смещения и расстояния
//fPhimean: Double; // Средняя широта
//fdLambda: Double; // Разница между двумя значениями долготы
//fdPhi: Double; // Разница между двумя значениями широты
//fAlpha: Double; // Смещение
//fRho: Double; // Меридианский радиус кривизны
//fNu: Double; // Поперечный радиус кривизны
//fR: Double; // Радиус сферы Земли
//fz: Double; // Угловое расстояние от центра сфероида
//fTemp: Double; // Временная переменная, использующаяся в вычислениях
//Distance: Double; // Вычисленное расстояния в метрах
//Bearing: Double; // Вычисленное от и до смещение


// Константы, используемые для вычисления смещения и расстояния
D2R = 0.017453 ; // Константа для преобразования градусов в радианы
R2D = 57.295781 ; // Константа для преобразования радиан в градусы
a = 6378137.0 ; // Основные полуоси
b = 6356752.314245 ; // Неосновные полуоси
e2 = 0.006739496742337 ; // Квадрат эксцентричности эллипсоида
f = 0.003352810664747 ; // Выравнивание эллипсоида

fdLambda = ( StartLong - EndLong ) * D2R ;
fdPhi = ( StartLat - EndLat ) * D2R ;
fPhimean = (( StartLat + EndLat ) / 2.0 ) * D2R ;

// Вычисляем меридианные и поперечные радиусы кривизны средней широты
fTemp = 1 - e2 * ( Pow ( Sin ( fPhimean ), 2 ));
fRho = ( a * ( 1 - e2 )) / Pow ( fTemp , 1.5 );
fNu = a / ( Sqrt ( 1 - e2 * ( Sin ( fPhimean ) * Sin ( fPhimean ))));

// Вычисляем угловое расстояние
fz = Sqrt ( Pow ( Sin ( fdPhi / 2.0 ), 2 ) + Cos ( EndLat * D2R ) * Cos ( StartLat * D2R ) * Pow ( Sin ( fdLambda / 2.0 ), 2 ));

fz = 2 * ASin ( fz );

// Вычисляем смещение
fAlpha = Cos ( EndLat * D2R ) * Sin ( fdLambda ) * 1 / Sin ( fz );
fAlpha = ASin ( fAlpha );

// Вычисляем радиус Земли
fR = ( fRho * fNu ) / (( fRho * Pow ( Sin ( fAlpha ), 2 )) + ( fNu * Pow ( Cos ( fAlpha ), 2 )));

// Получаем смещение и расстояние
Distance = ( fz * fR );

Возврат Distance / 1000 ;

PS3. Выкладываю процедуру определения текущих геокоординат. Код оптимизировался на основании 2-недельных испытаний на планшете Samsung Galaxy Tab3.

&НаКлиенте
Функция ОпределитьТекущиеГеокоординаты ( ТекущееМестоположение ) Экспорт

ДМ = СредстваГеопозиционирования . ПолучитьПоследнееМестоположение ( ТекущийПровайдер );

Если ДМ = Неопределено Тогда

ДМ = СредстваГеопозиционирования . ПолучитьПоследнееМестоположение ( ТекущийПровайдер );

Если ДМ = Неопределено Тогда

Если ТекущаяДата () - МестноеВремя ( ДМ . Дата ) > 300 Тогда

СредстваГеопозиционирования . ОбновитьМестоположение ( ТекущийПровайдер , 5 );
ДМ = СредстваГеопозиционирования . ПолучитьПоследнееМестоположение ( ТекущийПровайдер );

ДА = ПолучитьАдресПоМестоположению ( ДМ . Координаты );
Если ДА = Неопределено Тогда

ТекущееМестоположение = "Lat: " + ДМ . Координаты . Широта + ", Lon: " + ДМ . Координаты . Долгота ;

ТекущееМестоположение = СтрЗаменить ( ДА . Представление , Символы . ПС , ", " );

ТекущееМестоположение = ТекущееМестоположение + "Date: " + МестноеВремя ( ДМ . Дата ) + ", Provider: " + ТекущийПровайдер ;

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

После этого добавьте defaultConfig gradle приложения:

Ваше приложение должно быть типа Multidex. Вы должны написать его в манифесте:

«MyApplication» должен быть либо классом Multidex, либо расширять его.

Так что MyApplication extends android.support.multidex.MultiDexApplication ? это не хороший способ решить проблему, лучше удалить неиспользуемый код и библиотеки, реорганизовать код вашего проекта отсутствие 80000 методов было бы хорошим решением, если бы в библиотеках googles не было 80000 методов (единственная причина, по которой они добавили multidex, заключалась в том, что их собственная библиотека сервисов, которую они хотели, чтобы все использовали, имела десятки тысяч методов).

Я исправил свою проблему с помощью решения ниже:

В файле сборки Gradle добавьте зависимость:

А затем в разделе «defaultConfig» добавьте:

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

изменить ваше приложение или модуль build.gradle

Согласно официальной документации

Поддержка Multidex для Android 5.0 и выше

Android 5.0 (уровень API 21) и выше использует среду выполнения под названием ART, которая изначально поддерживает загрузку нескольких файлов DEX из файлов APK. ART выполняет предварительную компиляцию во время установки приложения, которая сканирует файлы classesN.dex и компилирует их в один файл .oat для выполнения устройством Android. Поэтому, если ваш minSdkVersion 21 или выше, вам не нужна библиотека поддержки multidex.

Для получения дополнительной информации о среде выполнения Android 5.0, прочитайте ART и Dalvik.

Что такое файлы dex: файлы приложения Android (APK) содержат исполняемые файлы байт-кода в виде файлов Dalvik Executable (DEX), которые содержат скомпилированный код, используемый для запуска вашего приложения.

Причина этого исключения: спецификация DEX ограничивает общее количество методов, на которые можно ссылаться в одном файле DEX, до 65 536 (ограничение ссылки 64 КБ), включая методы платформы Android, библиотечные методы и методы в вашем собственном коде.

Шаг 01. Добавьте следующую зависимость следующим образом

Для пользователей не Androidx,

Для пользователей Androidx,

Шаг 02:

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

Вы можете следить за этим .

Версии платформы до Android 5.0 (уровень API 21) используют среду выполнения Dalvik для выполнения кода приложения. По умолчанию Dalvik ограничивает приложения одним файлом байт-кода classes.dex для каждого APK. Чтобы обойти это ограничение, вы можете добавить в ваш проект библиотеку поддержки multidex:

Если ваш minSdkVersion установлен на 21 или выше, все, что вам нужно сделать, это установить для multiDexEnabled значение true в файле build.gradle уровня модуля, как показано здесь:

когда вы используете зависимости, чтобы ваши методы увеличились! У Google есть решение для этого. это называется Multidex!

ПРИМЕЧАНИЕ: убедитесь, что min SDK превышает 14.

в вашем build.gradle:

ДЛЯ ИСПОЛЬЗОВАНИЯ Android®:

Для получения дополнительной информации перейдите по оригинальной ссылке:

Привет проблема здесь удалить его

Примечание: не используйте комбинированную цель play-services. Это приносит десятки библиотек, вздутие живота вашего приложения. Вместо этого укажите только определенные API-интерфейсы сервисов Google Play, которые использует ваше приложение.

Как для службы определения местоположения

да, теперь я столкнулся с проблемой, моя кнопка запуска отключена.

Если вы строите DEBUG APK , просто добавьте:

и если вы создаете RELEASE APK , добавьте multiDexEnabled true в блок релиза как

Для флаттер-проектов вы также можете решить эту проблему

откройте свой \ android \ app \ build.gradle

у вас должно быть следующее:

Если ваш minSdkVersion установлен на 21 или выше, все, что вам нужно сделать, это установить для multiDexEnabled значение true в defaultConfig. Как это

если ваш minSdkVersion установлен в 20 или ниже, добавьте multiDexEnabled true в defaultConfig

И определить реализацию

В конце вы должны иметь:

Просто сделайте следующее:

И добавьте ниже зависимость в вашем build.gradle файле уровня приложения

Пожалуйста, попробуйте добавить это в ваше приложение defaultConfig <>. Это поможет мне решить проблему

В файле сборки Gradle добавьте зависимость:

А затем в разделе «defaultConfig» добавьте:

Теперь, если вы столкнулись с этой ошибкой

Ошибка: не удалось разрешить: multidex-instrumentation Открыть файл

Вам нужно изменить свой gradle на 3.0.1

И поместите следующий код в файл gradle-wrapper.properties

добавить класс Applition в проект и представить его в AndroidManifest, который расширяется от MultiDexApplication

Сначала запустите проект, чтобы создать ошибку, затем очистите проект

Наконец, перезапустите проект и наслаждайтесь им

У меня все еще есть «Не удалось разрешить: мультидекс-инструментарий»

Если вы используете minifyEnabled с Proguard, вам, скорее всего, не нужно будет включать multi-dex. Я согласен с MG Developer, что вы должны стараться избегать multi-dex, если это возможно. Моим решением было включить multi-dex только для отладочных сборок. minifyEnabled решает проблему для релизных сборок

Каковы некоторые недостатки использования мультидекса, если это необходимо?

и по моему Manifest.xml я должен установить

чтобы никого не смущать я тоже делаю

для Android это также работает для меня:

у меня не работает

не забудьте сделать проект чистым и перестроить после установки multiDexEnabled true. Это исправило это для меня. Изменение атрибута имени приложения в манифесте также не сработало, но включение multiDex в файле сборки gradle и добавление реализации сработало. Кажется, что менять тег манифеста сейчас необязательно?

У вас слишком много методов. Файл Android dex имеет ограничение в 65536 методов, которые вам разрешено иметь.

Для начала, если вам не нужен весь API Google Play Services и только местоположение, замените

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

Все, что мне нужно было сделать, это установить для Minimum SDK 21 значение в File> Project Structure> App> Flavors

добавьте свой файл android / app / build.gradle

Я столкнулся с этой ошибкой дважды, и решение для этого есть; Проверьте файл приложения, чтобы увидеть ваш целевой SDK, если он 20 или выше, просто добавьте одну строку в ваш defaultconfig

Иначе, если ваш targetSDK меньше 20, добавьте строку в defaultConfig, а также добавьте зависимость

Проверьте эту ссылку для более.

Использование поддержки multidex должно быть последним средством. По умолчанию сборка Gradle будет собирать тонну транзитивных зависимостей для вашего APK. Как рекомендуется в Документах для разработчиков Google , сначала попытайтесь удалить ненужные зависимости из вашего проекта.

С помощью командной строки перейдите к корневому каталогу проектов Android. Вы можете получить дерево зависимостей компиляции следующим образом.

Вы можете получить полный список дерева зависимостей

введите описание изображения здесь

Затем удалите ненужные или транзитивные зависимости из вашего приложения build.gradle. Например, если ваше приложение использует зависимость, называемую com.google.api-client, вы можете исключить ненужные вам библиотеки / модули.

Затем в Android Studio выберите «Создать»> «Анализировать APK» . Выберите файл APK выпуска / отладки, чтобы просмотреть его содержимое. Это даст вам методы и количество ссылок следующим образом.

Команда dotnet new mvc создает файл проекта со следующим элементом <Project> на верхнем уровне:

Когда MSBuild или Visual Studio загружает проект, выполняются следующие обобщенные действия:

  • сборка проекта;
  • вычисление файлов для публикации;
  • публикация файлов в месте назначения;

вычисление элементов проекта.

После загрузки проекта вычисляются элементы (файлы) проекта MSBuild. Порядок обработки файла определяется типом элемента. По умолчанию файлы с расширением .cs включаются в список элементов Compile . Файлы в списке элементов Compile компилируются.

Список элементов Content содержит файлы, предназначенные для публикации, а также результаты сборки. По умолчанию в список элементов Content включаются файлы, соответствующие шаблонам wwwroot\** , **\*.config и **\*.json . Например, стандартная маска wwwroot\** соответствует всем файлам в папке wwwroot и всех ее вложенных папках.

Веб-пакет SDK импортирует пакет SDK для Razor. Это означает, что в список элементов Content дополнительно включаются файлы, соответствующие шаблонам **\*.cshtml и **\*.razor .

Веб-пакет SDK импортирует пакет SDK для Razor. Это означает, что в список элементов Content дополнительно включаются файлы, соответствующие шаблону **\*.cshtml .

Чтобы явным образом добавить файл в список публикации, поместите его в CSPROJ-файл, как показано в разделе включения файлов.

При нажатии кнопки Публикация в Visual Studio или при публикации из командной строки происходит следующее:

  • Вычисляются свойства и (или) элементы (файлы, требующие сборки).
  • Только Visual Studio: пакеты NuGet восстанавливаются. (Восстановление выполняется пользователем в интерфейсе командной строки.)
  • Выполняется сборка проекта.
  • Вычисляются публикуемые элементы (файлы, требующие публикации).
  • Публикуется проект (вычисляемые файлы копируются в место назначения публикации.)

Простая публикация из командной строки

Для создания и публикации веб-приложения выполните следующие команды.

Команда dotnet publish создает подобные выходные данные:

По умолчанию папка публикации имеет формат bin\Debug\\publish\ . Например, bin\Debug\netcoreapp2.2\publish\ .

Следующая команда определяет сборку Release и папку для публикации.

Команда dotnet publish вызывает метод MSBuild, который, в свою очередь, вызывает целевой объект Publish . Все параметры, передаваемые в dotnet publish , передаются далее в MSBuild. Параметры -c и -o сопоставляются со свойствами MSBuild Configuration и OutputPath соответственно.

Свойства MSBuild можно передавать в любом из следующих форматов.

Убедитесь, что приложение, публикуемое для развертывания, не запущено. Во время выполнения приложения файлы в папке publish блокируются. Заблокированные файлы скопировать нельзя, так что развертывание в этом случае не произойдет.

Профили публикации

В этом разделе для создания профиля публикации используется Visual Studio 2019 или более поздней версии. После создания профиля публикацию можно выполнять из Visual Studio или из командной строки. Профили публикации упрощают процесс публикации. Вы можете создать любое количество профилей.

Создайте профиль публикации в Visual Studio, выбрав один из следующих методов:

  • Щелкните правой кнопкой мыши проект в обозревателе решений и выберите Опубликовать.
  • Выберите команду Опубликовать в меню Сборка.

Откроется вкладка Публикация на странице возможностей приложения. Если в проекте нет профиля публикации, откроется страница Выберите целевой объект публикации. Вам будет предложено выбрать один из следующих целевых объектов публикации:

  • Служба приложений Azure
  • Служба приложений Azure в Linux
  • Виртуальные машины Azure
  • Папка
  • IIS, FTP, веб-развертывание (для любого веб-сервера)
  • Профиль импорта

Чтобы определить наиболее подходящий целевой объект публикации, см. раздел Какие варианты публикации мне подойдут.

Когда профиль публикации будет создан, изменения отразятся на вкладке Публикация. Новый профиль появится в раскрывающемся списке. Под раскрывающимся списком щелкните Создать новый профиль, чтобы создать еще один профиль.

Инструмент публикации Visual Studio создает файл MSBuild Properties/PublishProfiles/.pubxml с описанием профиля публикации. PUBXML-файл:

  • Содержит настройки конфигурации публикации и используется в процессе публикации.
  • Может меняться для настройки процесса сборки и публикации.

Если публикация выполняется в целевой объект Azure, файл с расширением .pubxml содержит идентификатор подписки Azure. При таком типе целевого объекта мы не рекомендуем добавлять этот файл в систему управления версиями. Если публикация выполняется в целевой объект, не относящийся к Azure, файл с расширением .pubxml можно безопасно вернуть в систему.

Следующие команды могут использовать профили публикации папки, MSDeploy и Kudu. Так как в MSDeploy отсутствует кроссплатформенная поддержка, следующие параметры MSDeploy поддерживаются только в Windows.

Папка (работает на всех платформах):

MSDeploy:

Пакет MSDeploy:

В предшествующих примерах:

  • dotnet publish и dotnet build поддерживают API-интерфейсы Kudu для публикации в Azure с любой платформы. Публикация с помощью Visual Studio поддерживает API Kudu, но для кроссплатформенной публикации в Azure их поддерживает WebSDK.
  • Не передавайте DeployOnBuild команде dotnet publish .

Добавьте в папку проекта Properties/PublishProfiles профиль публикации со следующим содержимым:

Пример публикации папки

Для публикации с применением профиля FolderProfile используйте любую из указанных ниже команд.

  • Вызывает msbuild , который использует MSDeploy.
  • Приводит к сбою (даже при работе в Windows). Для публикации профилей, отличных от профиля папки, вызывайте msbuild напрямую.

Следующий профиль публикации папки был создан в Visual Studio и публикуется в общей сетевой папке:

В предшествующем примере:

С использованием MSBuild

Публикация конечной точки MSDeploy из командной строки

Чтобы развернуть приложение с помощью профиля публикации, выполните команду msbuild из командной строки разработчика Visual Studio. Командная строка доступна в папке Visual Studio в меню Пуск на панели задач Windows. Для удобства можно добавить командную строку в меню Сервис в Visual Studio. Дополнительные сведения см. в статье Командная строка разработчика для Visual Studio.

MSBuild использует следующий синтаксис команд.

В следующем примере используется профиль публикации с именем AzureWebApp — веб-развертывание:

Указание среды

Включите свойство <EnvironmentName> в профиле публикации (PUBXML) или файле проекта, чтобы задать среду приложения:

Если вам нужно преобразовать web.config (например, задать переменные среды на основе конфигурации, профиля или среды), см. раздел Преобразование web.config.

Исключение файлов

  • Артефакты сборки
  • Файлы и папки, соответствующие следующим стандартным маскам:
    • **\*.config (например, web.config);
    • **\*.json (например, appsettings.json ).
    • wwwroot\**

    MSBuild поддерживает стандартные маски. Например, представленный ниже элемент <Content> запретит копирование текстовых файлов ( .txt) из папки wwwroot\content и всех ее подпапок.

    Предложенную выше разметку можно добавить в профиль публикации или в файл CSPROJ. При добавлении в файл .csproj правило добавляется во все профили публикации в проекте.

    Следующий элемент <MsDeploySkipRules> исключает все файлы из папки wwwroot\content.

    Элемент <MsDeploySkipRules> не удаляет пропускаемые целевые объекты с сайта развертывания. Целевые файлы и папки, указанные в элементе <Content> , будут удалены с сайта развертывания. Допустим, что в развернутом веб-приложении есть следующие файлы.

    • Views/Home/About1.cshtml
    • Views/Home/About2.cshtml
    • Views/Home/About3.cshtml

    Если вы добавите указанные ниже элементы <MsDeploySkipRules> , эти файлы не будут удалены с сайта развертывания.

    Приведенные выше элементы <MsDeploySkipRules> запрещают развертывание пропускаемых файлов. Эти файлы не будут удалены, если они уже развернуты.

    Следующий элемент <Content> удаляет целевые файлы на сайте развертывания.

    Применение указанного выше элемента <Content> при развертывании из командной строки дает следующий результат:

    Включаемые файлы

    Включение общих файлов

    Элемент <ItemGroup> в приведенном ниже примере демонстрирует копирование папки, расположенной за пределами папки проекта, в папку опубликованного сайта. Файлы, добавленные в следующий элемент разметки <ItemGroup> , включены по умолчанию.

    • может размещаться в файле .csproj или в профиле публикации. Если добавить ее в файл CSPROJ, она будет включаться в каждый профиль публикации этого проекта.
    • Объявляет элемент _CustomFiles для хранения файлов, соответствующих стандартной маске атрибута Include . Папка образов, указанная в шаблоне, находится вне каталога проекта. Зарезервированное свойство с именем $(MSBuildProjectDirectory) разрешается в абсолютный путь файла проекта.
    • Предоставляет список файлов элементу DotNetPublishFiles . По умолчанию элемент <DestinationRelativePath> в элементе пуст. Значение по умолчанию переопределяется в разметке и использует стандартные метаданные элементов, например %(RecursiveDir) . Внутренний текст представляет папку wwwroot/images опубликованного сайта.

    Включение выборочных файлов

    Выделенная разметка в следующем примере показывает:

    • Копирование файла, расположенного вне проекта, в папку wwwroot опубликованного сайта. Имя файла ReadMe2.md сохраняется.
    • Исключение папки wwwroot\Content.
    • Исключение файла Views\Home\About2.cshtml.

    В предыдущем примере используется элемент ResolvedFileToPublish , поведение по умолчанию которого — всегда копировать файлы, предоставленные в атрибуте Include опубликованному сайту. Переопределите поведение по умолчанию, включив дочерний элемент <CopyToPublishDirectory> с внутренним текстом Never или PreserveNewest . Пример:

    Выполнение целевого объекта до или после публикации

    Публикация на сервере с использованием сертификата без доверия

    Добавьте свойство <AllowUntrustedCertificate> со значением True в профиль публикации:

    Служба Kudu

    Чтобы просмотреть файлы в развертывании веб-приложения службы приложений Azure, используйте службу Kudu. Добавьте к имени веб-приложения маркер scm . Пример:

    Для просмотра, редактирования, удаления и (или) добавления файлов выберите в меню пункт Консоль отладки.

    Читайте также: