[JAVA] Intel Multi-OS Engine (MOE), une bibliothèque multiplateforme pour Android et iOS

À propos d'Intel Multi-OS Engine qui semble être recommandé pour libGDX. https://github.com/libgdx/libgdx/wiki/Setting-up-your-Development-Environment-(Eclipse,-Intellij-IDEA,-NetBeans)

Si vous utilisez Intel Multi-OS Engine, vous pouvez créer des applications multiplateformes avec Java ou Kotlin.

Poursuivant l'histoire précédente sur Mobile Open JDK 9, je voudrais enquêter. Compatible avec Android et iOS, à propos de Mobile OpenJDK 9

Qu'est-ce que Intel Multi-OS Engine?

Intel Multi-OS Engine est-il familier avec cela "avec Intel"? Nana Une bibliothèque multiplateforme développée par Intel.

C'est OSS (auquel Intel fait également appel). https://multi-os-engine.org/

Il existe également une organisation sur GitHub. https://github.com/multi-os-engine

C'est "moe" pour faire court, alors jetons Core2Duo à ceux qui disent "moe" ou quelque chose comme ça.

IDE pour lequel le plug-in est fourni

Eclipse, IntelliJ IDEA, Android Studio。

Probablement juste un plug-in IDE Je pense que n'importe quel IDE qui peut construire Gradle peut être utilisé (même si ce n'est pas un IDE). Cela semble être la recommandation de Gradle, mais il semble que le plug-in Maven soit également préparé. https://github.com/multi-os-engine/moe-plugin-maven

Spécifications requises pour l'environnement de développement

Mac

Win

Comment ça fonctionne

Le moteur d'exécution multi-OS est basé sur le moteur d'exécution Android ART. ART a certaines fonctionnalités qui fonctionnent également bien sur iOS.

https://doc.multi-os-engine.org/multi-os-engine/2_Introduction/Introduction.htmlより引用

[Extrait de https://doc.multi-os-engine.org/multi-os-engine/2_Introduction/Introduction.html](https://doc.multi-os-engine.org/multi-os-engine/ 2_Introduction / Introduction.html)

Ainsi, l'application écrite sur Android peut être construite telle quelle en tant qu'application pour iOS par le plug-in MOE. La figure ci-dessous montre Android Studio à titre d'exemple, mais comme mentionné ci-dessus, l'EDI n'a pas d'importance. Le plug-in Gradle est disponible, donc s'il s'agit d'un projet Gradle, l'EDI n'a pas d'importance.

[Extrait de https://doc.multi-os-engine.org/multi-os-engine/2_Introduction/Introduction.html](https://doc.multi-os-engine.org/multi-os-engine/ 2_Introduction / Introduction.html)

Que faire avec la conception de l'interface utilisateur iOS

La partie UI doit être créée avec Xcode, etc. comme le développement iOS normal. Cependant, s'il s'agit d'un moteur de jeu compatible multiplateforme tel que libGDX, il n'y a pas beaucoup de différence d'interface utilisateur. Si vous développez une application qui vous oblige à connaître le guide de conception de chaque plate-forme, il semble que vous deviez créer une interface utilisateur pour chaque plate-forme.

Il semble qu'une bibliothèque appelée Nat4J relie natif et Java et lie l'interface utilisateur. Nat/J: Interoperability with Native Code

Préparation avant d'essayer

En guise de préparation préliminaire, dans mon cas, j'utilise IntelliJ IDEA, j'ai donc installé le plug-in moe IDE.

Vous pouvez le trouver en recherchant Préfrences> Plugin> Parcourir les référentiels ...> "multi-os". multi-os.png

Getting Started(Java)

L'exemple de code a été téléchargé sur GitHub.

Je vais supprimer l'exemple de code.

git clone https://github.com/multi-os-engine/moe-samples-java.git

Explorer le contenu

Je vais regarder le contenu

$ ls
Calculator		LocalizedString		SimpleChart
CurrencyConverter	MuseumMap		SpeakHere
FastJNI			NOTICE.txt		Taxi
HelloMaven		Planets			TheElements
InAppPurchase		README.md		TicTacToe

Il contient quelques exemples d'applications. Eh bien, si vous regardez README.md, il est écrit autour de cela. Pour le moment, exécutons la calculatrice cette fois.

La configuration de l'application Calculatrice ressemble à ceci.

yank-no-MacBook-Pro:Calculator yy_yank$ tree
.
├── android
│   ├── build.gradle
│   └── src
│       └── main
│           ├── AndroidManifest.xml
│           ├── java
│           │   └── org
│           │       └── moe
│           │           └── samples
│           │               └── calculator
│           │                   └── android
│           │                       └── CalcActivity.java
│           └── res
│               ├── layout
│               │   └── calc_activity.xml
│               ├── mipmap-hdpi
│               │   └── ic_launcher.png
│               ├── mipmap-ldpi
│               │   └── ic_launcher.png
│               ├── mipmap-mdpi
│               │   └── ic_launcher.png
│               ├── mipmap-xhdpi
│               │   └── ic_launcher.png
│               ├── mipmap-xxhdpi
│               │   └── ic_launcher.png
│               ├── values
│               │   ├── colors.xml
│               │   ├── strings.xml
│               │   └── styles.xml
│               └── values-v21
│                   └── styles.xml
├── build.gradle
├── common
│   ├── build.gradle
│   └── src
│       └── main
│           └── java
│               └── org
│                   └── moe
│                       └── samples
│                           └── calculator
│                               └── common
│                                   ├── CalcOperations.java
│                                   ├── CalcOpsTypes.java
│                                   └── CalculatorAdapter.java
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── ios
│   ├── build.gradle
│   ├── src
│   │   └── main
│   │       └── java
│   │           └── org
│   │               └── moe
│   │                   └── samples
│   │                       └── calculator
│   │                           └── ios
│   │                               ├── Main.java
│   │                               └── ui
│   │                                   └── AppViewController.java
│   └── xcode
│       ├── ios
│       │   ├── Assets.xcassets
│       │   │   ├── AppIcon.appiconset
│       │   │   │   ├── Contents.json
│       │   │   │   ├── [email protected]
│       │   │   │   ├── [email protected]
│       │   │   │   ├── [email protected]
│       │   │   │   ├── Icon-76-1.png
│       │   │   │   ├── Icon-76-10.png
│       │   │   │   ├── Icon-76-11.png
│       │   │   │   ├── Icon-76-12.png
│       │   │   │   ├── Icon-76-2.png
│       │   │   │   ├── Icon-76-3.png
│       │   │   │   ├── Icon-76-4.png
│       │   │   │   ├── Icon-76-5.png
│       │   │   │   ├── Icon-76-6.png
│       │   │   │   ├── Icon-76-7.png
│       │   │   │   ├── Icon-76-8.png
│       │   │   │   ├── Icon-76-9.png
│       │   │   │   ├── Icon-76.png
│       │   │   │   ├── [email protected]
│       │   │   │   ├── [email protected]
│       │   │   │   ├── [email protected]
│       │   │   │   └── [email protected]
│       │   │   ├── Contents.json
│       │   │   └── MOELogo.imageset
│       │   │       ├── Contents.json
│       │   │       └── moe-logo-200x200.png
│       │   ├── Base.lproj
│       │   │   ├── LaunchScreen.storyboard
│       │   │   └── Main.storyboard
│       │   ├── Info.plist
│       │   └── main.cpp
│       ├── ios-Test
│       │   ├── Info.plist
│       │   └── main.cpp
│       └── ios.xcodeproj
│           └── project.pbxproj
└── settings.gradle

47 directories, 57 files

répertoire android = spécifique à la plate-forme Android, répertoire ios = spécifique à la plate-forme ios, commun = partie commune. Chacun est traité comme un module Gradle.

Il existe une classe appelée CalcActivity.java pour Android et AppViewController.java pour iOS. Il s'agit de chaque partie de l'interface utilisateur. Il n'y a rien de spécial sur le côté Android. C'est la même chose lors du développement sur Android. iOS a diverses fonctionnalités.

Il y a pas mal de fonctionnalités rien qu'en regardant l'en-tête de classe

AppViewController


@org.moe.natj.general.ann.Runtime(ObjCRuntime.class)
@ObjCClassName("AppViewController")
@RegisterOnStartup
public class AppViewController extends UIViewController {

UIViewController est une API fournie par iOS, et celle qui l'encapsule est préparée du côté du moteur multi-OS. Consultez la référence d'API d'Apple pour plus d'informations sur UIViewController. UIViewController - API Reference

Je voudrais que vous jetiez un coup d'œil rapide à la source, mais comme UIButton, UIColor, UILabel, etc. sont également préparés du côté du moteur multi-OS, ils peuvent être utilisés normalement. Le traitement du dessin est effectué par la méthode viewDidLoad. Si vous êtes impliqué dans le développement iOS, la gestion des événements, etc. peut être exprimée sans gêne.

La partie commune essentielle contient une logique utilisée sur les plates-formes Android et iOS. Dans ce cas, c'est la logique des quatre règles qui sont au cœur de l'application Calculatrice.

Essayez de courir sur Android

Pour le moment, j'ai un appareil Android réel, donc ./gradlew android: installDebug.

23:52:08: Executing external task 'installDebug'...
Configuration on demand is an incubating feature.
Incremental java compilation is an incubating feature.
:android:preBuild UP-TO-DATE
:android:preDebugBuild UP-TO-DATE
(Omission)
:android:installDebug
Installing APK 'android-debug.apk' on 'SHV35 - 6.0.1' for android:debug
Installed on 1 device.

BUILD SUCCESSFUL

Total time: 41.502 secs
23:52:52: External task execution finished 'installDebug'.

L'application a été installée avec succès.

Comme son nom l'indique, c'est une calculatrice.

Screenshot_20170207-235347.png

Essayez-le sur iOS

Je n'ai pas d'appareil iOS réel, mais comme il s'agit d'un MacBook Pro, je vais l'exécuter sur un simulateur. Commencez par démarrer le simulateur. Tout va bien.

./gradlew ios: moeLaunch -Pmoe.launcher.simulators = XXXXX (ID du simulateur).

Cela démarrera après un certain temps. Le simulateur est cependant lent.

La partie XXXXX est l'identifiant du simulateur qui peut être vu dans Simulateur> Matériel> Gérer le périphérique. Cela vous permet de l'associer au simulateur.

simulator-identifier.png

Oui ça a marché!

ios-moelaunch.png

Si vous souhaitez créer un fichier ipa, il existe différentes choses telles que l'équipe de développement et le paramétrage du profil d'approvisionnement. Dans ce cas, vous devez écrire les paramètres associés dans ios / build.gradle.

moe {
    signing {
        // String, ID of the development team.
        developmentTeam

        // String, path to the provisioning profile or UUID.
        provisioningProfile

        // String, name of the provisioning profile (new in Xcode 8).
        provisioningProfileSpecifier

        // String, name of the signing identity
        signingIdentity
    }
}

Veuillez consulter les détails ici.

https://github.com/multi-os-engine/moe-plugin-gradle/blob/master/README.md

Getting Started(Kotlin)

L'exemple de code est également téléchargé sur GitHub.

Je l'ai déjà expliqué à ce sujet, donc on a l'impression que c'est sans matière, mais l'exemple d'application est un peu différent.

$ ls
KotlinCalculator	KotlinRssReader		README.md
KotlinMuseumMap		NOTICE.txt

Veuillez consulter README.md pour plus de détails comme dans l'exemple. J'ai regardé à l'intérieur du KotlinCalculator et j'ai trouvé que le code était le même que l'exemple java. La configuration de Gradle est la même. C'est Android, iOS, commun. Cependant, il est écrit en Kotlin. Vous avez probablement utilisé la conversion IDE (IntelliJ IDEA convertira de Java en Kotlin).

Il y a aussi une communauté

Il y a aussi un endroit où vous pouvez discuter.

Multi-OS Engine Forum En février 2017, la version majeure a déjà été publiée, et il semble qu'il y ait de nombreux transferts depuis RoboVM, et il y a déjà de nombreux utilisateurs. La discussion est assez avancée, et si vous examinez les points addictifs, cela semble tout à fait le cas.

Le document est également très soigné. https://doc.multi-os-engine.org

Résumé

Je pense que ça fait du bien.

URL de référence

Postscript

MOE est la version 1.x du 02/02/2017, Il semble que la version 2.x inclura le support du bitcode LLVM. @snakeman Merci pour l'information!

Quand j'enquête à ce sujet J'ai trouvé un échange sur le forum appelé Est-ce que le multi-os-engine a une feuille de route?. Does multi-os-engine have a roadmap?

Comme vous pouvez le voir d'ici

à propos de ça. Il y avait aussi une feuille de route. 2.x semble sortir cette année, donc j'ai hâte d'y être aussi.

MOE Roadmap 2016 - 2017 Winter

Recommended Posts

Intel Multi-OS Engine (MOE), une bibliothèque multiplateforme pour Android et iOS
J'ai créé une bibliothèque pour afficher des tutoriels sur Android.
[Android] Causes et remèdes pour TransactionTooLargeException
Une collection de bibliothèques utiles dans le développement Android