Как создать кроссплатформенное мобильное приложение на Java

1656554665 kak sozdat krossplatformennoe mobilnoe prilozhenie na java

Содержание статьи

Адриана Д. Финли

0*ffg50j7VfGh9hXel
Источник: GIPHY

Знаете ли вы, что вы можете использовать Java для создания кроссплатформенных мобильных приложений? Да, ущипни себя, ты правильно прочитал с первого раза! Я научу вас основам того, как использовать существующие знания Java для создания производительных программ на Android и iOS в 12 простых шагах. Мы сделаем это все, используя JavaFX в качестве инструментария GUI.

Но сначала немного переднего плана. Вам нужно будет отвечать следующим требованиям, чтобы иметь возможность создать приложение оба Android и iOS. Однако, если вы не хотите создавать приложение iOS, вы можете смело разрабатывать на любой x64-разрядной машине, поддерживающей Java SE 8. Этот проект будет репозиторием Git, созданным с помощью gradle. Но вам не нужно создавать репозиторий Git.

Ниже приведено требования:

  • JDK 1.8 JVM
  • Инструменты командной строки Android (SDK версии 27)
  • XCode 9.2
  • Gradle 4.2
  • Большое хранилище Git файлов (v.2.5.0) (Не нужно, если вы не хотите создавать репозиторий git)
  • Желательно не менее 4G RAM

Нетерпеливый? Хотите увидеть конечный результат? Просмотрите готовый проект ниже.

afinlay5/OnyxFx
Репозиторий исходного кода Gradle для OnyxFx, кроссплатформенного (Android/iOS/Linux/macOS/Windows) программы для воспроизведения JavaFX…github.com

Моей средой разработки будет Fedora Linux 28 и macOS High Sierra. Теперь, когда мы разобрались с этим, давайте зарыться.

1) Создайте папку для размещения проекта

Я разместил свой проект OnyxFx следующим образом: «/home/adriandavid/Projects/OnyxFx”. Вы, конечно, можете свободно размещать проект где угодно.

1*14wz3bVNKav6LNbTAYjEhA

2) Инициализируйте gradle, Git, установите JAVA_HOME

Откройте терминал в корне каталога проекта. Если gradle правильно настроен, вы должны увидеть нечто подобное после выполнения такой команды:

gradle -v
1*kuAXbVwYzNd3XRsGHjRy-w

Вам нужно убедиться, что gradle перечисляет вашу установку Java Development Kit (JDK) 8 рядом с разделом с пометкой JVM.

Хотя существует много способов сделать это, самый простой способ – убедиться, что переменная среды JAVA_HOME правильно установлена.

В зависимости от среды, существует много способов сделать это. Один из способов сделать это в большинстве сред *nix — установить переменную в /home/<користувач>/.bзолаrc или /etc/proфайл. Проверьте руководство для вашей операционной системы, чтобы убедиться, что переменная среды JAVA_HOME настроена правильно.

Вы можете включить следующие строки в конец .bashrc или профиля, чтобы убедиться, что JAVA_HOME установлен правильно.

JAVA_HOME=/home/adriandavid/java/oracle_jdk1.8.0_181/export JAVA_HOME

Примечание: Вы можете установить Oracle JDK 8 здесь.

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

source ~/.bashrcsource /etc/profile

Введите такую ​​команду, чтобы убедиться, что переменная установлена ​​правильно:

echo $JAVA_HOME
1*kJZ9I_IqrhACbckpzh6ueA

Если у вас все еще возникают трудности или используете Microsoft Windows, см. раздел здесь.

Сначала бегайте git init в корневом каталоге проекта, чтобы инициализировать репозиторий Git. Если вы не хотите размещать репозиторий git, вы можете пропустить этот шаг.

Во-вторых, бегайте gradle init в корневом каталоге проекта, чтобы инициализировать репозиторий gradle. Этот шаг необходим.

1*Ab57WniSkAlmhElis7Aw3Q

Примечание: Вы заметите, что мой пример выглядит несколько иначе. Это потому, что у меня уже есть gradle и Git, инициализированные в моей локальной среде.

3) Будь здоров! Редактировать gradle.build и

Надеюсь Земля, ветер и огонь может помочь вам стать хорошим! Включите свой любимый текстовый редактор и отредактируйте build.gradle, расположенный в корневом каталоге вашего проекта, и замените содержимое следующего содержания GitHub.

Эти параметры build.gradle настраивают наш проект gradle на использование javafxmobile плагин, который является рабочим конем нашего проекта. Вы можете узнать больше о плагине здесь и здесь. Среди многих вещей, плагин javafxmobile автоматизирует процесс загрузки (с Maven Central или jcenter) и добавление пакетов SDK для iOS и Android к классу вашего приложения.

Если вы знакомы с gradle, maven или ant, прекрасно – вы, наверное, имеете представление о происходящем. Если вы не знакомы с gradle, не волнуйся об этом. Все, что вам нужно понимать, это то, что gradle это инструмент сборки, который используется для автоматизации многих задач, связанных с созданием программ, таких как: захват зависимостей, организация проекта и т.д.

Обратите внимание, что мы ориентируемся на Android 7.1 Nougat (API версии 25) и iOS 11 (в скором времени мы увидим, где это будет сделано). Вы можете настроить эти значения, как вы считаете нужным. Однако заметьте, что в случае Android вы должны убедиться, что версия API соответствует версии SDK, которую вы загрузили (подробнее об этом позже).

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

4) Создайте новый файл под названием gradle.properties и настройте его

Создайте новый файл в корневом каталоге проекта под названием gradle.properties и добавьте в файл следующее содержимое.

robovm.device.name=iPhone-7robovm.sdk.version=11.0org.gradle.jvmargs=-Xms4g -Xmx8g

Эти настройки сообщают плагину javafxports использовать iPhone-7 как встроенный эмулятор, нацеливаться на iOS 11 и передавать флаги Xms и Xmx в JVM, определяющую как начальный пул памяти до 4 ГБ, так и максимальную память кучи. пул до 8 Гб. Это пригодится для компиляции openJDK и разработки сборки iOS.

5) Установите Homebrew (только для iOS)

Если у вас нет Mac и не собираетесь создавать сборку iOS, смело упустите этот шаг.

Откройте терминал в MacOS и вставьте следующую команду.

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

6) Установите разъем USB мультиплексирования (только для iOS)

Перейдите к этому шагу, только если Homebrew успешно установлен. Если у вас нет Mac и не собираетесь создавать сборку iOS, смело упустите этот шаг.

Откройте терминал в MacOS и вставьте следующую команду.

brew install usbmuxd

7) Возьмите инструменты командной строки Android

Возьмите инструменты командной строки Android для вашей платформы здесь. После загрузки распакуйте папку и вставьте содержимое в нужный каталог. Для меня это было /home/<user>/Android.

1*cZFJp50kxOy9kORJ9VQX4Q

8) Установите Android_HOME, захватите необходимые пакеты Android

Как и в случае с Java, gradle должен знать, где искать инструменты командной строки Android. Есть несколько способов сделать это. Однако в духе простоты и последовательности установим переменную среды ANDROID_HOME в этом учебнике. Разместите следующую переменную так же, как мы это сделали для JAVA_HOME. Например:

ANDROID_HOME=/home/adriandavid/Android/ export ANDROID_HOME

Не забудьте перезагрузить оболочку, добавив source <file> как мы сделали для JAVA_HOME.

Теперь возьмите инструменты, необходимые для создания коллекции Android. Выполните следующую команду:

# *.nix./sdkmanager "platform-tools" "build-tools;25.0.3" "platforms;android-25" "extras;android;m2repository" "extras;google;m2repository"
or
#Windowssdkmanager "platform-tools" "build-tools;25.0.3" "platforms;android-25" "extras;android;m2repository" "extras;google;m2repository"

Обратите внимание, что версия SDK и API, которые мы указали в gradle.build, соответствуют версии, которую мы указали в этой команде. А именно «25». Если это неправильно, построение не получится.

9) Создайте структуру каталогов программы

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

Bourne-Again Shell / Korn Shell:

Оболочка Windows (cmd):

Сохраните файл как mkpdir.bat или mkpdir.sh и запустите файл из корневого каталога проекта как корень (или Администратор).

# *.nixchmod +x mkdir.sh-sh ./mkpdir.sh
# Windowsmkpdir

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

10) Создайте свою программу JavaFX!

Выделите /src//java и начните разрабатывать программу JavaFx! Ресурсы программы хранятся в /src//resources.

Начать можно с простого Привет Мир приложение или посмотрите на исходный код, который я собрал здесь. OnyxFx — это приложение, которое я создал, следуя этим инструкциям, осуществляющим вызовы REST через HTTP к OnyxFxAPI. API, в свою очередь, является веб-скребком, возвращающим статистические данные (очки за игру, подбор за игру, результативные передачи за игру) для игрока NBA® и сезона, определяемого клиентом. Он возвращает данные в формате JSON, которые затем анализируются и отображаются на экране мобильного приложения. Не стесняйтесь редактировать его!

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

Также заметьте, что базовый компилятор (раздел RoboVM от MobiDevelop) не полностью поддерживает все API Java 8. Если вы очень внимательно посмотрите на мой исходный код, вы заметите, что в версии исходного кода для iOS я удалил неподдерживаемый API, например java.util.function.BiConsumer и java.util.Map.replace().

11) Создайте RAM-диск для сборок iOS (только для iOS)

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

Однако этот шаг зависит от вашей оценки возможностей вашей машины. Для контекста машина macOS, которую я использовал для компиляции моей программы iOS, имеет 4 ГБ оперативной памяти DDR2. Я решил совершить диск на 8 Гб оперативной памяти. Для этого выполните следующую команду в терминале.

SIZE=8192 ; diskutil erasevolume HFS+ ‘RoboVM RAM Disk’ `hdiutil attach -nomount ram://$((SIZE * 8192))`

12) Создайте и запустите свою программу!

Чтобы создать свое приложение, запустите обертку gradle в корневом каталоге из терминала, как показано ниже.

./gradlew clean build

Это создаст настольную программу, упакованную в виде JAR со сценариями для запуска программы /build/distributions/<AppName.tar>; and /build/distributions/<AppName.zip>. Если вы распакуете каталоги, вы заметите следующую структуру:

1*oF-cta8Trg15kQLld7oitA

Обратите внимание, что в /bin есть скрипты для выполнения программы. Эти сценарии полагаются на сохранение текущей структуры папок. Также заметьте, что вам не обязательно иметь дерево установлено. Он использован здесь прямо в иллюстративных целях.

Кроме того, существует отдельный JAR, который можно использовать для выполнения приложения на любом рабочем столе, поддерживающем JavaFX 8. Чтобы запустить приложение, выполните одно из следующих действий.

# Navigate to /build/distributions/<ProjectName>/
#On *.nixcd bin./<ProjectName>
#On Windowscd bin<ProjectName>
#Platform agnosticjava -jar OnyxFxMobile.jar (or double click, if jvm is configured to run .jar files)
Note: If the executable providing "java" is not the same vendor and/or version of the Java 8 JDK with which you built this application, the jar may not run. JavaFX 8 builds between the openJDK & Oracle JDK are incompatible.
Otherwise: /location/to/java8/bin/java -jar <ProjectName>

Просмотрите задачу gradle этого проекта

Вы можете просмотреть задачу gradle этого проекта, выполнив следующее в корневом каталоге проекта.

./gradlew tasks

Для компиляции запустите на рабочем столе

Следующая команда запустит ваш проект в среде хоста.

./gradlew jar./gradlew run

Вы найдете отдельную баночку build/libs/<AppName&gt;.jar .

Для компиляции запустите на Android

./android #Generates a debug Android apk containing the JavaFX application.
./androidInstall #Launch the application on a connected android device.
./androidRelease #Generates a release Android apk containing the JavaFX application.
Note: You will need to configure a valid signingConfig when releasing an APK (javafxports).

Вы найдете два APK build/javafxports/android.
Первый будет назван <AppName&gt;.apk.
Второй будет named <AppName>-unaligned.apk.

Для компиляции запустите iOS

./createIpa - Generates an iOS ipa containing the JavaFX app.
./launchIOSDevice - Launches app on a connected ios device.
./launchIPadSimulator - Launches app on an iPad simulator.
./launchIPhoneSimulator - Launches app on an iPhone simulator.

Вы найдете три исполняемых файла build/javafxports/ios.
Первый будет назван <AppName&gt;.ipa.
Второй будет named <AppName>.dSYM.
Третий will be named &lt;AppName>.app.

Некоторые снимки экрана моего образца программы

На рабочем столе

1*0Yjn597lhtYUQR98fnfNiQ

На Android

1*YYNxKLhPNfKZe3Z3Ig9jFQ

На iPhone

1*rsyQ8wQJI-AeWeK56Z45Og

На iPad

1*rAVDpDXcdQkNzDDol5p3hQ

Заставка

1*_HKrh4pQXXwupdd70yomgg

Мои заключительные мнения

javafxports представляет собой перспективный проект, целью которого является внедрение JavaFX и платформы Java SE на мобильные и другие устройства. В определенном смысле этот инструмент аналогичен Xamarin в своих усилиях. Однако над проектом еще много работы.

Для начала плагин не полностью поддерживает Java 8. На Android он использует retrolambda для обработки выражений Java 8 Lambda и ссылок на методы. Технически это касается Java 6. Дополнительные зависимости позволяют использовать Java 8. Однако процесс прост, сборки работают должным образом, а время компиляции не слишком долго.

Однако на iOS сборки очень загружают память, а процесс компиляции занимает очень много времени. Ниже приведен фрагмент журнала для задания ./gradlew createIpa.

:createIpa (Thread[Task worker for ‘:’,5,main]) completed. Took 1 hrs 46 mins 40.198 secs.

В общей сложности процесс потреблял около 6 ГБ оперативной памяти на моей машине. Это вряд ли идеально. Однако будущее многообещающее. Компания под названием Gluon разработала высокопроизводительную полностью модульную собственную JVM, полностью поддерживающую Java 9, о которой вы можете прочитать здесь.

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

Ресурсы для изучения:

1*SWVp-cGi_ipjWWw3SU5ITQ
Источник: Looney Tunes Ending

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

Ваш адрес email не будет опубликован.