Android studio компиляция под ios

О том, как я написал простое приложение для Android/iOS

Хочу сразу отметить, что это не статья от профессионала, скорее взгляд любителя на мобильную разработку, скажем так, «с нуля». Мое основное занятие — это создание сайтов. В данное время я работаю у провайдера интернета и занимаюсь поддержкой внутреннего биллинга/сайта и так далее (PHP и немного Perl), довольно скучное занятие, скажу я вам. В общем, я обычный провинциальный «программист».

В один прекрасный момент у руководства компании возникла идея сделать мобильное приложение для iPhone, которое могло бы показать баланс пользователю, его статус, возможность взять «обещанный платеж», фактически, дублирование личного кабинета, но чтобы приложение. Не зная про мобильную разработку совсем ничего, идею воспринял с большим энтузиазмом, потому что всегда приятно делать/узнавать что-то новое, думаю, это у всех так.

Придя на работу в один из серых скучных дней, я решился и написал в поиске Google «как сделать мобильное приложение». Это было очень наивно. Кажется, я даже попробовал задать вопрос на Toster, «с чего начать разработку под мобильные приложения», тогда я еще не понимал насколько глупым воспринимается этот вопрос профессионалами.

Довольно быстро я разделил для себя разработку на две части, это был Android и iOS, потому что они совсем разные (поиск подсказал.

Как-то я наткнулся на Phonegap, насколько я понял, пишем на Javascript+html+css, а потом получаем готовое приложение для Android/iOS, но почему-то мне не хотелось пользоваться подобными решениями, во-первых: были непонятные отзывы, кто-то хвалил, кто-то ругал, а во-вторых: мне хотелось попробовать как это изнутри, каково это сделать «нативное» приложение.

План и подготовка

Собственно, идея довольно проста:

  • Логин экран с логином/паролем
  • Основной экран с информацией об абоненте (ФИО, № договора, баланс, статус (Активен, Отключен), есть ли авария на доме, кнопка Активировать обещанный платеж
  • Экран с платежами (зачисления на счет)
  • Экран со списаниями по счету

Для функционирования приложения я написал простейшее API на PHP, скрипт который по определенному запросу отвечал строкой в JSON-формате. Сделать это оказалось элементарно.

Начать решил с Android.

Android

Начал я с установки Android Studio, первоначально смутило количество кнопочек/иконок, но за пару дней я уже был как рыба в воде. Для начала надо было понять как вообще делаются приложения, очень помогает изначальное «Hello world!» которое создается по-умолчанию. Выглядело все достаточно просто и понятно. Погуглив «Как начать разработку в Android Studio», я понял, что надо скачать SDK. Открыв SDK-manager я не понял вообще ничего, ну, точнее, не понял что именно надо делать, поэтому поставил все галочки и ждал пока все скачается. Для чего оно мне нужно я совсем не понимал, общее представление конечно было «чтобы работала поддержка такой-то версии», но почему надо все отдельно качать и выбирать среди сотен галочек — бррр.

Вторым достаточно сложным этапом было запустить приложение на симуляторе. Погуглив, пришлось повозиться с AVD, конечно, потыкашись как слепой котенок я сделал несколько виртуальных устройств. На одном даже запустилось приложение. Честно сказать, симулятор у Android Studio совсем не User-friendly, очень долго я с ним воевал, пытался запускать по-разному, хотел чтобы кнопки управления были на экране и работали, но почему-то не работали. Видимо, сказывалось отсутствие опыта.

Как оказалось, для Android пишут на Java. Про Java я знал только то, что это язык программирования и это не Javascript.
Решил разбить большую задачу на более мелкие.

Теперь возникла ситуация когда у меня, в принципе, все готово, но я не знал как вообще делается приложение, поэтому, погуглив, я понял что никакой нормальной информации на русском языке мне не найти (либо я плохо искал). Информация либо устаревшая, либо не то что мне требуется. Спас меня youtube и знание английского языка. Сделав несколько запросов в ютюбе можно найти массу информации, да еще и с самим процессом — это очень помогло, если бы не обучающие видео, думаю, приложение я бы делал несколько месяцев.

Читайте также:  Самсунг андроид переключить память

Выбирая минимальную версию Android я остановился на 4 что-то там 🙂 (Охват аудитории 90%+ если верить Google).

Опять же разбив свои задачи на более мелкие я искал туториалы в youtube, например: «how to get json in android» или «menu in android studio». Конечно, пришлось пересмотреть штук 30 разных видео и все они были на английском (одно на немецком и одно на китайском — когда показывают не так сложно самому дойти что же говорят :)).

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

Публикация в Google Play

Сначала я думал что будет очень сложно и даже переживал, но как оказалось всего 25$ и фактически без каких-либо серьезных проверок приложение попало в Google Play и через несколько часов было доступно в поиске, публикация заняла около одного дня.

Отдохнув пару дней и поразмыслив, решил что пора реализовать тоже самое приложение под iOS. Но, оказалось, что бесплатная среда разработки xCode может быть запущена исключительно в среде Mac. Пришлось скачать образ виртуальной машины MAC OS Yosemite и запустить ее через VMWare. Сделать это было очень просто и фактически не требовало от меня никаких телодвижений кроме как «ждать».

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

Язык программирования выбрал Swift. Версию iOS минимум 7.1+

В принципе разработка под iOS была более простой, хотя баги симулятора присутствовали, но весь процесс оказался более удобным, нежели под Android. Опять же я открыл youtube и смотрел видео/читал руководства о том, как сделать какую-то вещь. Например, нагуглил прекрасный скрипт который делает slide menu, которого у меня не было в Android. В общем, еще один марафон и за неделю было готово улучшенное приложение, добавил возможность пополнить счет с помощью карты предоплаты и совместил платежи/списания в одно окно.

Использовал тоже самое API (тот же скрипт, что и для Android).

Публикация в iOS

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

Опять же, при создании аккаунта был выбор между «компания» и «индивидуальный разработчик», но начитавшись страшилок про 4+ месяца проверки компаний я решил регистрироваться как индивидуальный разработчик. Сделать это было не сложно, главное оплатить 99$ за аккаунт разработчика iOS со своей кредитной карты чтобы имя совпадало (подсказал поиск). Платеж проходил 2 дня.

После чего пришлось искать целое видео «how to publish in app store» и следовать инструкции, настолько там все непонятно. Какие-то сертификаты, туда — сюда. В общем, не очень удобно, хотя и сделать надо лишь один раз :).

Приложение ушло на проверку и ждало очереди около полутора недель. После чего было принято. Кстати, как показали логи, проверка была примерно такая: Логин -> Баланс -> Платежи -> Баланс. И все, хотя была еще страница «Пополнить баланс», но ее не проверяли (а зря, я там накосячил и пришлось выкладывать новую версию программы 1.1 которую тоже проверяли больше недели).

Выводы

1. Как оказалось это не сложно даже для человека который никогда не использовал Java/Swift/Mac OS.

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

Читайте также:  Mini android smart iptv

3. Очень быстрое устаревание руководств/видео уроков. Платформы настолько быстро развиваются, что надо сразу проверять актуальность информации. На русском языке ее очень мало, после нескольких попыток я даже бросил искать и сразу начал штудировать stackoverflow и англоязычный интернет. Youtube со своими видео-уроками просто спас меня! Я открывал видео на одном мониторе и работал на втором. Без базового английского — никуда.

4. Сервисы вопрос-ответ реально помогают! Иногда, впадая в ступор я задавал вопросы и почти сразу получал ответы — очень удобно если находишься в тупике.

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

6. В общей сложности я потратил почти месяц (на разработку около двух недель с перерывами). Стоило ли оно того — думаю да, было очень интересно. Если у вас есть желание — попробуйте, все оказалось не так сложно. У меня нет смартфона Android/iPhone, но и без них все оказалось просто. Симуляторы работают достоверно.

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

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

Источник

Русские Блоги

Как Flutter конвертируется в пакет приложения для iOS?

Эта статья переведена с:Flutter’s iOS Application Bundle

В этом документе описывается, как система сборки Flutter преобразует ваш проект Flutter (и его ресурсы) в пакет приложения iOS. Я надеюсь четко описать некоторые этапы сборки и объяснить цель создания соответствующих продуктов (PS: я думаю, что продукты здесь можно понимать как некоторые промежуточные файлы, созданные во время сборки, или конечные исполняемые файлы и т. Д.), Чтобы вы могли объединить Процесс интегрирован в вашу собственную среду сборки.

Примечание о рабочем процессе: при создании приложения для публикации вы можете использовать инструменты Flutter, которые немного упростят процесс сборки. Однако некоторые разработчики могут обнаружить, что этот процесс не настраивается или не подходит для их конфигурации непрерывной интеграции (CI) пользовательской сборки.

Если у вас есть пользовательская сборка Xcode или настройки Gradle, все «волшебные» функции, добавленные инструментом Flutter, являются необязательными, и вы можете настроить метод сборки в соответствии с вашим собственным рабочим процессом.

Вся информация в этом документе относится к пакетам приложений iOS, которые готовы к публикации в App Store. То есть то, что строится в проекте, — это режим выпуска Flutter. Метод компиляции Debug или Prifile использует разные среды выполнения и режимы упаковки для поддержки горячей перезагрузки и наблюдения.

Приложения Flutter отображают пользовательский интерфейс как единое представление в собственном дереве (слое) представлений. Как показано ниже

Пакет приложений

использовать flutter build ios —release Приложение, созданное с помощью команд (или с использованием Flutter IDE, например Android Studio), очень похоже на типичный пакет приложения iOS, который содержит исполняемый файл приложения, а также платформу и ресурсы, на которые он ссылается.

Структура пакета Runner.app, созданная Flutter:

Скомпилируйте приложение

При компиляции версии выпуска приложения (не версии профиля или отладки) требуются продукты из программы сборки и хоста. (Для получения дополнительной информации о создании роботов (часть движка сборки, использующая GN и Ninja) см.«Содействие движку Flutter Engine»。)

Когда вы устанавливаете SDK, инструменты Flutter будут кэшированы на вашем компьютере. Вы можете увидеть их в каталоге bin / cache в вашей копии Flutter SDK. Если вы решите интегрировать какой-либо шаг этого процесса в свою собственную систему сборки, тогда эта папка содержит все инструменты управления версиями, необходимые для работы с Flutter.

Читайте также:  Микро usb хаб для андроид

В следующих разделах описаны некоторые файлы, уникальные для пакета приложения Flutter для iOS.

Пакет фреймворка движка Flutter

Папка Flutter.framework — это пакет, который упакован в платформу iOS, включая

  • Двигатель флаттера Содержит основные библиотеки (например, графику, файловый и сетевой ввод-вывод, поддержку специальных возможностей, подключаемую архитектуру), DartVM и механизм визуализации Skia.
  • Ресурсы, на которые ссылается движок Flutter В настоящее время это только данные ICU.

Робот сборки генерирует пакет фреймворка движка Flutter, а затем инструмент Flutter загружает и кэширует его на вашем компьютере.

Пакет фреймворка AOT

App.framework Снимок AOT, содержащий весь код приложения Dart, написанный пользователем, и armv7 с участием aarch64 Отформатируйте код Dart фреймворка и плагинов Flutter.

В процессе создания версии компилятор оптимизирует код Dart, поэтому в пакете будет отображаться только фактически используемый код. Кэшированный на устройстве инструмент gen_snapshot генерирует компоненты, необходимые для создания пакета App.framework.

Снимок AOT

Снимок AOT содержит статический код, скомпилированный Dart для устройства. gen_snapshot Созданная библиотека моментальных снимков содержит четыре основных символа. Эти символы могут быть распакованы командой nm, например:

Его цель следующая:

Снимок виртуальной машины Dart (kDartVmSnapshotData): представляет начальное состояние кучи Dart, совместно используемой изолированными телами. Это помогает быстрее начать Dart isolates , Но не содержит никакой информации, относящейся к разделению. Но не содержит конкретных isolates Информация.

Инструкции виртуальной машины Dart (kDartVmSnapshotInstructions): содержит инструкции AOT для общих подпрограмм, совместно используемых всеми изоляторами Dart в виртуальной машине. Этот снимок обычно очень маленький и в основном содержит заглушки.

Моментальный снимок изоляции (kDartIsolateSnapshotData): представляет начальное состояние кучи Dart и содержит информацию, относящуюся к изоляции.

Инструкции по разделению (kDartIsolateSnapshotInstructions): содержит код AOT, выполняемый разделителем Dart.

Вызвать gen_snapshot очень просто. Вы указываете ему исходный код Dart, и он выводит что-то для каждого из этих четырех символов. Затем Xcode упаковывает эти символы в платформу iOS, точно так же, как платформа, написанная на C, C ++, Objective-C или Swift. Чтобы узнать больше о настройке моментальных снимков и движков в движке Flutter, см.Flutter engine wiki。

Помимо большого количества кода, инструмент Flutter также гарантирует, что ресурсы, на которые ссылается приложение (и его плагины), попадают в пакет приложения. Читая проект pubspec.yaml Активы, перечисленные в файле для этого.

О Android

В процессе создания пакета Android APK (с помощью команды `flutter build apk-release или IDE) будет сгенерирована следующая файловая структура:

Это в основном то же самое, что и пакет выпуска iOS, за исключением:

  • Движок Flutter упакован в виде библиотеки ELF (libflutter.so)。
  • 4 символа, описанные в предыдущем разделе, теперь представляют собой просто двоичные капли в каталоге ресурсов.

Второй момент может быть несколько неожиданным, и его необходимо пояснить: NDK не требуется для создания APK выпуска. Это связано с тем, что, когда на компьютере нет NDK, инструмент Flutter добавит большой двоичный объект в качестве ресурса. В Android движок Flutter может помечать страницы как исполняемые файлы. Поэтому, когда он обнаруживает, что ресурсы AOT упакованы как двоичные большие двоичные объекты, он отображает эти большие двоичные объекты в память и помечает соответствующие страницы как исполняемые файлы. Если у вас есть доступ к NDK на вашем компьютере, вы можете указать его местоположение и использовать эти символы для создания динамической библиотеки. В этом случае движок Flutter использует 4 символа в динамической библиотеке.

подводить итоги

Ключ к созданию пакета приложения iOS:

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

Код Dart компилируется в собственный машинный код и упаковывается в пакет библиотеки или фреймворка, как и другие библиотеки C ++ / Objective / Swift. Это означает, что все отчеты о сбоях и инструменты символизации работают одинаково для кода Dart AOT.

Вы можете интегрировать Flutter в свою собственную систему сборки, не полагаясь на инструменты Flutter на своей машине разработки (хотя их использование облегчит вашу работу). Все эти инструменты можно найти в каталоге bin / cache Flutter SDK.

Источник

Оцените статью