Android studio: среда разработки мобильных приложений

Создание подписанных APK

Наконец, когда вы закончите тестирование своего приложения и будете готовы выпустить его в большой мир, вам нужно будет выбрать Сборка> Создать подписанный APK. Это даст вам файл, который вам нужно будет загрузить в Google Play, и который будет содержать все различные файлы, ресурсы и многое другое.

Вам будет предложено создать или ввести хранилище ключей. Это своего рода «сертификат подлинности», подтверждающий, что загружаемый APK – это приложение, о котором вы говорите. Это предотвращает взлом вашей учетной записи Google Play и последующую загрузку вредоносного APK-файла в качестве «обновления» в ваше приложение! Вам нужно будет сохранить этот файл в безопасности, так как, если он потерян, вы уже не сможете обновить приложение снова! Выберите «выпуск» в качестве типа сборки, если вы хотите сделать что-то, что вы можете выпустить, а затем нажмите «Готово».

Структура проекта Android

Если в предыдущем шаге вы выбрали шаблон Empty Activity, то при создании проекта студия сгенерирует и структуру файлов проекта. Так выглядит пустой, только что созданный проект в Android Studio.

Структура проекта

Он содержит 2 корневые папки: app и Gradle Scripts. Папка app включает 3 подпапки: manifests (содержит файлы конфигураций приложения), java (содержит исходный код приложения) и res (содержит файлы ресурсов — картинок, стилей, размерностей и т.д.).

AndroidManifest.xml в папке manifests содержит информацию о пакетах и компонентах приложения. Этот файл важен для работы приложения Android, так как именно в нем прописаны разрешения приложения на использование компонентов системы Android. Также в нем определяется, как будут запускаться компоненты приложения.

В папке java исходные файлы проекта могут содержаться в различных подпапках. Обычно в Android-приложении в папке java также есть определенная структура файлов. В этой статье мы рассматривать ее не будем, так как тема выходит за пределы общей структуры проекта.

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

Рассмотрим подпапки, которые появляются при создании базового проекта:

  1. Папка drawable содержит файлы с изображениями.
  2. В папке layout нужно располагать xml-файлы, используемые для создания интерфейса приложения.
  3. Папка mipmap хранит значки приложения.
  4. Папка values хранит xml-файлы со значениями строк, цветов, тем, стилей.

Папка Gradle Scripts содержит скрипты для автоматизации сборки проекта.

Папка .idea не видна на скриншоте, но если изменить конфигурацию Android на Project, то она появится. Эта папка нужна для настройки метаданных проекта в Android Studio.

Ваше первое мобильное приложение в Android Studio

Самый быстрый способ познакомиться с Android Studio — использовать его для разработки приложения. Мы начнем с приложения «Привет, мир», которое выводит сообщение «Добро пожаловать в Android».

Создание нового проекта

На данный момент у вас уже должна быть установлена, запущена и настроена Android Studio. Нажмите кнопку «Начать новый проект Android Studio». После этого на экране появится диалоговое окно «Создать новый проект», показанное на рисунке 15:

Рисунок 15. Диалоговое окно «Создать новый проект»

Введите название приложения — W2A (Welcome to Android) и доменное имя компании. Затем вы должны увидеть, что в качестве местоположения проекта задан путь C:UsersjeffreyAndroidStudioProjectsW2A. Нажмите кнопку «Далее», чтобы выбрать целевые устройства:

Рисунок 16. Выберите категории целевых устройств

Android Studio позволяет выбирать форм-факторы или категории целевых устройств для каждого приложения. Я использую минимальные параметры SDK API 15: Android 4.0.3 (IceCreamSandwich) (в разделе «Смартфоны и планшетные ПК»), которые поддерживается моим планшетом Amazon Kindle Fire HD. Поскольку Android Studio в настоящее время не поддерживает этот уровень API (даже при добавлении образа системы 4.0.3 через SDK Manager), я изменил этот параметр на API 14: Android 4.0 (IceCreamSandwich), который также поддерживается моим планшетом.

Нажмите кнопку «Далее», и вам будет предоставлена возможность выбрать шаблон для основного направления приложения. Пока мы остановимся на «Empty Activity». Выберите этот шаблон и нажмите кнопку «Далее»:

Рисунок 17. Укажите шаблон направления

Затем настройте направление:

Рисунок 18. Настройте направление

Введите W2A в качестве названия направления и main в качестве названия шаблона и нажмите кнопку «Готово», чтобы завершить этот этап. На экране появится сообщение о том, что идет создание проекта, а затем будет загружено рабочее пространство.

Сначала вы увидите приветственное диалоговое окно «Совет дня», которое при желании можно отключить в Android Studio:

Рисунок 19. Рабочее пространство Android Studio

Рабочее пространство проекта состоит из панели меню, панели инструментов, рабочей области, дополнительных компонентов, с помощью которых можно открыть другие окна (например, окно консоли Gradle), и строки состояния.

Чтобы получить доступ к стандартному диспетчеру AVD или диспетчеру SDK, выберите из меню «Сервис» пункт «Android», а затем в появившемся всплывающем меню — пункт «Менеджер AVD» или пункт «Менеджер SDK».

Окна проекта и редактора

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


Рисунок 20. Окна проекта и редактора

Окно проекта представляет собой дерево, основными ветвями которого являются «Приложения» и «Скрипты Gradle». Приложения разбиты на разделы manifests, java и res:

  • В manifests хранится файл AndroidManifest.xml, который представляет собой XML-файл, описывающий структуру Android -приложения. В этот файл также записываются настройки разрешений (когда это применимо) и другие сведения о приложении;
  • В java хранятся исходные Java-файлы приложения в соответствии с иерархией пакетов — в нашем случае ca.javajeff.w2a;
  • В разделе res хранятся файлы ресурсов приложения, которые разбиты на поддиректории drawable, layout, mipmap и values:
  • drawable: первоначально пустой подраздел, в котором можно хранить графические ресурсы приложения;
  • layout: содержит файлы макета приложения; изначально здесь хранится файл макета основного направления main.xml;
  • mipmap: содержит файлы ic_launcher.png, в которых хранятся иконки для запуска приложения с экрана в различных разрешениях.
  • values: содержит файлы colors.xml, dimens.xml, strings.xml и styles.xml.

В разделе настроек Android Studio «Gradle Scripts» определены различные файлы .gradle и .properties, которые используются системой сборки на основе Gradle.

Каждое ответвление / раздел соответствует имени каталога или имени файла. Например, res соответствует каталогу res, а strings.xml соответствует файлу strings.xml.

Настройка Android Studio под определённую версию ОС

Однако активацией кнопки «Finish» установка и настройка студии ещё не заканчивается финишем. После этого потребуется определиться с какой версией «Андроида» работать и какие инструменты API использовать.

Выбор довольно обширный, учитывая существующий диапазон версий, а также постоянные обновления популярной операционной системы. Правда, применить соответствующий инструментарий можно в любое время через сервис «SDK Manager», как демонстрируется картинкой ниже.

Таким выглядит рабочее окно студии в режиме активации «Менеджера SDK», посредством которого определяется конфигурация для конкретной работы после решения задачи как установить Android Studio на 32-битную Windows 10

Вот, собственно, на этой ноте «управляющего менеджера» можно считать инсталляцию и базовую настройку студии Андроида завершённой. Фактически с программой уже допустимо работать – создавать приложения и тестировать через эмулятор. Только вот, смущает отказ разработчиков от поддержки 32-битной версии программы.

По сути, 2020 год стал последним рубежом, на котором поддержка ещё осуществлялась. Далее пользователя ставят перед выбором – или переходить на 64-битную Windows 10, или забыть про «Android Studio». Да и вообще создаётся впечатление, что вся разработка свободных программистов вовсе не свободна. Создаваемый индивидуально код в любом случае остаётся под «всевидящим оком», в данном случае – Гугла. А как же конфиденциальность и право собственности?

При помощи ресурсов: Developer

XML View и Dynamic Layout Previews

Создание макета, с которым пользователи могут взаимодействовать, — важная часть процесса. В Android Studio это можно сделать в редакторе макета. Откройте content_main.xml из res/layout. Во вкладке Design вы можете переносить элементы интерфейса (кнопки, текстовые поля).

Справа от Design есть вкладка Text, которая позволяет редактировать XML непосредственно в макете.

Перед созданием внешнего вида, необходимо определить некоторые значения. Откройте strings.xml во вкладке res/values и добавьте следующее:

<string name="fortune_description">Suggest the question, which you can answer “yes” or “no”, then click on the magic ball.</string>

strings.xml содержит все строки, которые появляются в приложении. Разделение этих строк в отдельные файлы упрощает интернационализацию, т.к. нужен только файл строк для каждого языка, который требуется в приложении. Даже если вы не собираетесь переводить приложение на другие языки, использовать файл строк всегда рекомендуется.

Откройте dimens.xml в res/values и добавьте следующее:

<dimen name="description_text_size">15sp</dimen><dimen name="fortune_text_size">20sp</dimen>

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

Вернитесь в content_main.xml и замените все содержимое файла следующим кодом:

<?xml version="1.0" encoding="utf-8"?><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"app:layout_behavior="@string/appbar_scrolling_view_behavior"tools:showIn="@layout/activity_main"tools:context=".MainActivity"> <TextViewandroid:id="@+id/descriptionText"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/fortune_description"android:gravity="center"android:textSize="@dimen/description_text_size"/> <ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/fortunateImage"android:src="@drawable/img_crystal"android:layout_centerHorizontal="true"android:layout_below="@id/descriptionText"android:layout_marginTop="10dp"/> <TextViewandroid:id="@+id/fortuneText"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@id/fortunateImage"android:gravity="center"android:layout_marginTop="20dp"android:textSize="@dimen/fortune_text_size"android:textStyle="bold"android:textColor="@android:color/holo_red_dark"/> <Buttonandroid:id="@+id/fortuneButton"android:layout_width="match_parent"android:layout_height="50dp"android:layout_below="@id/fortuneText"android:text="What's my fortune?"android:layout_centerHorizontal="true"android:layout_marginTop="10dp"/> </RelativeLayout>

Этот довольно большой код создает макет приложения под названием FortuneBall. На верхнем уровне вы добавили RelativeLayout (относительная разметка определяет позицию дочерних компонентов относительно родительского компонента). RelativeLayout можно растянуть, подогнать под размер родительского компонента.

В относительной разметке добавляются две части текста, изображение и кнопка. Все эти детали будут видны в порядке добавления. Их содержимое можно будет прочитать в strings.xml (текст) и в drawable (изображения).

Обновляя content_main.xml, обратите внимание на окно Preview обновляет UI:

Примечание: если не видно окно предпросмотра, во вкладке Text кликните на кнопку Preview на панели редактора разметки справа.

Создайте и запустите.

И вот вы создали макет приложения. Но на данном этапе это только красивое изображение — клик по кнопке ни к чему не приведет.

Найти свой путь

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

Новое пустое занятие, я люблю запах возможностей по утрам!

Если вы хотите открыть что-то новое, вы сможете сделать это через иерархию файлов слева. Здесь вы найдете все папки и папки внутри них. Ваши файлы Java размещаются под java, а затем под именем пакета вашего приложения. Дважды щелкните MainActivity.Java (при условии, что вы используете Java), и он выйдет на первый план в окне справа.

Когда вы редактируете файлы XML, вы можете заметить две вкладки внизу. Они позволяют переключаться между представлением «Текст» и «Дизайн». В текстовом представлении вы можете вносить изменения в код XML напрямую, добавляя и редактируя строки. В представлении «Дизайн» вы сможете добавлять, удалять и перетаскивать отдельные элементы по экрану и смотреть, как они будут выглядеть. В текстовом представлении также есть окно предварительного просмотра для визуализации того, что вы создаете – если ваш монитор достаточно широкий!

Meet Gradle

Android Studio tries to keep things nice and simple for users by providing all of the necessary tools and features in one place. Things only get more complicated once you need to interact with some of these other elements.

Например, вы могли заметить, что Android Studio иногда упоминает Gradle. Это «инструмент автоматизации сборки», который по сути помогает Android Studio превратить все эти разные файлы в один APK. Вы должны иметь возможность оставить Gradle делать свою работу большую часть времени, но иногда вам нужно будет переходить к файлам build.gradle, если вы хотите добавить новую «зависимость», позволяющую расширенные функции для вашего приложения. Иногда, если что-то перестает работать, вы можете выбрать «Сборка»> «Очистить проект», и это по сути подтвердит, где находятся все файлы и каковы их роли. Обычно таких файлов сборки Gradle будет два: один для всего проекта и один для «модуля» (приложения).

Функции

Особенностью Android Studio является отсутствие возможности отключить автосохранение.

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

  • Поддержка сборки на основе Gradle
  • Рефакторинг для Android и быстрые исправления
  • Инструменты Lint для определения производительности, удобства использования, совместимости версий и других проблем
  • Возможности интеграции ProGuard и подписи приложений
  • Мастера на основе шаблонов для создания общих дизайнов и компонентов Android
  • Богатый редактор макетов, который позволяет пользователям перетаскивать компоненты пользовательского интерфейса, возможность предварительного просмотра макетов на нескольких конфигурациях экрана.
  • Поддержка создания приложений Android Wear
  • Встроенная поддержка Google Cloud Platform, обеспечивающая интеграцию с Firebase Cloud Messaging (ранее — Google Cloud Messaging) и Google App Engine.
  • Виртуальное устройство Android (эмулятор) для запуска и отладки приложений в студии Android.

Android Studio поддерживает все те же языки программирования IntelliJ (и CLion ), например Java , C ++ и другие с расширениями, такими как Go ; и Android Studio 3.0 или более поздняя версия поддерживает Kotlin и «все языковые функции Java 7 и подмножество языковых функций Java 8, которые различаются в зависимости от версии платформы». Внешние проекты поддерживают некоторые функции Java 9. Хотя IntelliJ заявляет, что Android Studio поддерживает все выпущенные версии Java и Java 12, неясно, на каком уровне Android Studio поддерживает версии Java до Java 12 (в документации упоминается частичная поддержка Java 8). По крайней мере, некоторые новые языковые функции вплоть до Java 12 можно использовать в Android.

Запуск Android Studio

Android Studio при своем запуске выводит следующую заставку:


Рисунок 7. Экран приветствия Android Studio

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

В первом диалоговом окне основное внимание уделяется импорту настроек из ранее установленной версии Android Studio:

Рисунок 8. Параметры импорта

Можно принять настройки по умолчанию и нажать на кнопку «ОК». После этого Android Studio выведет диалоговое окно «Мастера установки»:

Рисунок 9. Проверка настроек Android SDK и среды разработки

После нажатия кнопки «Далее», «Мастер установки» предложит выбрать тип установки компонентов SDK. На данный момент я рекомендую использовать стандартную конфигурацию:

Рисунок 10. Выберите тип установки

Нажмите кнопку «Далее» и подтвердите выбранные настройки. Затем нажмите кнопку «Готово», чтобы продолжить:

Рисунок 11. Просмотрите настройки

«Мастер установки» загрузит и распакует необходимые компоненты. Нажмите кнопку «Показать детали», если хотите увидеть подробную информацию о загружаемых архивах и их содержимом:

Рисунок 12. «Мастер установки» загружает и распаковывает компоненты Android Studio

Перед тем, как установить Android Studio, еще раз проверьте параметры своей системы. Если ваш компьютер собран не на базе процессора Intel, может возникнуть неприятный сюрприз после того, как компоненты будут полностью загружены и распакованы:

Рисунок 13. Аппаратное ускорение на базе Intel недоступно

Возможные варианты решения проблемы – использовать медленный эмулятор или Android-устройство для ускорения разработки.

Нажмите кнопку «Готово», чтобы завершить работу «Мастера установки». После этого вы увидите диалоговое окно «Добро пожаловать в Android Studio»:

Рисунок 14. Добро пожаловать в Android Studio

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

1. Настройка проекта

Прежде чем приступать к изучению Android Studio, вам сначала нужно ее 

Обратите внимание, что вам необходимо установить JDK 6 или более поздней версии. Если вы работаете в Windows, запустите файл .exe и следуйте инструкциям мастера установки

Если вы используете OS X, смонтируйте образ диска, дважды щелкнув его и перетащите Android Studio в папку Application.

Если вы успешно выполнили вышеуказанные шаги, необходимо правильно настроить среду разработки. Теперь вы готовы создать свое первое приложение для Android с помощью Android Studio. Когда вы впервые запускаете Android Studio, вам должен быть представлен экран приветствия, предлагающий вам несколько вариантов для старта.

В этом уроке мы собираемся выбрать вариант New Project. Однако вы можете выбрать Import Project, если вы хотите импортировать проект, например, из Eclipse в Android Studio. Android Studio преобразует проект Eclipse в проект Android Studio, добавив для вас необходимые файлы конфигурации.

Если вы выберете Open Project из списка параметров, вы можете открывать проекты, созданные с помощью Android Studio или IntelliJ IDEA. Выбрав Check out from Version Control, вы можете развернуть копию проекта, который находится под системой управлением версиями. Это отличный способ быстро ускорить работу с существующим проектом.

Чтобы начать работу, выберите New Project в списке параметров. Это покажет вам список параметров для настройки вашего нового проекта. В этом уроке мы собираемся создать простое приложение, чтобы показать вам некоторые из самых важных функций Android Studio. Я уверен, что вы согласны с тем, что нет лучшего названия для нашего проекта, чем HelloWorld.

Как вы можете видеть на скриншоте выше, я назвал свое приложение HelloWorld и установил имя модуля HelloWorld. Если вы не знакомы с IntelliJ IDEA, вам может быть интересно, что такое модуль. Модуль представляет собой дискретную единицу функциональности, которая может быть скомпилирована, запущена, протестирована и отлажена независимо. Модули содержат исходный код, скрипты сборки и все остальное, необходимое для их специфичных задачи.

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

Другими параметрами являются местоположение проекта на вашем компьютере, минимальный и целевой SDK, SDK, с которым будет скомпилирован ваш проект, и тема проекта. Вы также можете сообщить Android Studio о создании класса и специальной иконки запуска а так-же поддержку проектов GridLayout, Fragments, Navigation Drawer или Action Bar.

Мы не будем создавать пользовательских иконок для этого приложения, вы можете снять галочку с надписью Create custom launch icon. Нажмите Next, чтобы продолжить настройку своего проекта.

Поскольку мы отметили флажок Create activity на предыдущем шаге, вам предлагается настроить класс , который будет создан для вас Android Studio.

Поскольку мы начнем с пустого класса , вы можете нажать Next, чтобы перейти к следующему этапу процесса настройки, в котором вас попросят указать имя класса , основной лэйаут и лэйаут фрагмента. Вы также можете установить тип навигации, который мы оставим в None для этого проекта. Посмотрите следующий скриншот, чтобы увидеть, как выглядят настройки.

После нажатия кнопки Finish вам будет представлен пользовательский интерфейс Android Studio с проводником проекта слева и рабочее пространство справа. С вашим проектом, настроенным в Android Studio, пришло время изучить некоторые из ключевых особенностей Android Studio.

Приложение не установлено¶

  • Убедитесь, что вы передали файл «full-release.apk» на ваш телефон.
  • Если на вашем телефоне появилось сообщение “приложение не установлено”, то выполните следующее:
  1. Экспортируйте параметры (в версии AAPS, уже установленной на телефоне)
  2. Удалите AAPS с телефона.
  3. Включите режим полета и выключите Bluetooth.
  4. Установите новую версию («app-full-release.apk»)
  5. Импортируйте настройки
  6. Снова включите Bluetooth и отключите режим самолета

Bloatware – гораздо более распространенная проблема на телефонах Android, потому что гораздо больше производителей телефонов выпускают устройства Android. В некоторых случаях вы можете столкнуться с десятком или более приложений, которые вам действительно не нужны (хотя сами производители будут рады, если вы попробуете их).

Чтобы избавиться от каких-либо приложений на телефоне Android, откройте «Настройки» и выберите «Приложения и уведомления» , а затем «Просмотреть все приложения» .

Если вы уверены, что можете обойтись без чего-либо, выберите приложение, затем выберите «Удалить», чтобы его удалить.

В некоторых случаях вы не сможете полностью удалить приложение из-за того, как производитель интегрировал его в свою версию Android. В этом случае ищите вариант с надписью «Отключить» вместо «Удалить» – это, по крайней мере, предотвратит запуск приложения, использование жизненно важных системных ресурсов и создания прочих препятствий.

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

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

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

Теперь вы готовы подключить телефон к компьютеру через USB-порт и приступить к работе. Как только соединение будет физически установлено, вам нужно открыть окно PowerShell (Windows) или терминала (macOS) из папки Android Studio, в которой установлен Android Debug Bridge (ADB) — в Windows вы должны перейти в C: Users AppData Local Android Sdk platform-tools (где «» — имя вашей учетной записи Windows), Shift + щелкните правой кнопкой мыши внутри папки и выберите «Открыть окно PowerShell здесь» .

Открыв PowerShell или окно терминала, запустите команду «. Adb devices», чтобы инициировать ссылку, а затем «adb shell», чтобы получить контроль над подключенным устройством Android (на Mac вам не нужен предыдущий «. » ). Последняя команда, которая вам понадобится, это «pm uninstall -k —user 0 », где « имя пакета приложения, от которого вы хотите избавиться: вы можете использовать бесплатный App Inspector на своем телефоне, чтобы найти эти имена пакетов.

Это краткая экскурсия по довольно сложному и техническому процессу. Если вы достаточно серьезно относитесь к удалению вредоносного ПО таким способом, мы рекомендуем изучить детали для вашей конкретной модели телефона и сначала узнать больше об ADB, а также проконсультироваться с отличным руководством для разработчиков XDA по этому процессу (вы также можете найти индивидуальные руководства на ваш конкретный телефон ).

Второй способ полностью избавиться от вредоносного ПО – рутировать телефон.

Как и в случае с ADB, для этого требуется немного технических ноу-хау, но это также приведет к аннулированию гарантии на ваш телефон и представит риск разрушения вашего устройства.

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

Если вы думаете, что рутирование для вас, оно даст вам полный контроль над телефоном и его программным обеспечением. После того, как вы измените свой телефон таким образом, вы сможете использовать такие приложения, как Root App Deleter или System App Remover, чтобы избавиться от нежелательные приложения.

Я пытаюсь настроить Flutter в моей системе Windows. Когда я запускаю flutter doctor , я получаю эту ошибку.

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

Это все еще показывает ту же ошибку. Как полностью удалить Android Studio с моего компьютера?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector