[JAVA] Intel Multi-OS Engine (MOE), eine plattformübergreifende Bibliothek für Android und iOS

Informationen zur Intel Multi-OS Engine, die für libGDX empfohlen wird. https://github.com/libgdx/libgdx/wiki/Setting-up-your-Development-Environment-(Eclipse,-Intellij-IDEA,-NetBeans)

Wenn Sie die Intel Multi-OS Engine verwenden, können Sie plattformübergreifende Apps mit Java oder Kotlin erstellen.

In Fortsetzung der vorherigen Geschichte über Mobile Open JDK 9 möchte ich dies untersuchen. Kompatibel mit Android und iOS über Mobile OpenJDK 9

Was ist die Intel Multi-OS Engine?

Ist Intel Multi-OS Engine damit "mit Intel" vertraut? Nana Eine plattformübergreifende Bibliothek, die von Intel entwickelt wurde.

Es ist OSS (was Intel auch anspricht). https://multi-os-engine.org/

Es gibt auch eine Organisation auf GitHub. https://github.com/multi-os-engine

Es ist kurz "moe", also lasst uns Core2Duo zu denen werfen, die "moe" oder so etwas sagen.

IDE, für die das Plug-In bereitgestellt wird

Eclipse, IntelliJ IDEA, Android Studio。

Wahrscheinlich nur ein IDE-Plug-In Ich denke, dass jede IDE verwendet werden kann, die Gradle erstellen kann (auch wenn es sich nicht um eine IDE handelt). Es scheint Gradle zu sein, aber es scheint, dass das Maven-Plug-In ebenfalls vorbereitet ist. https://github.com/multi-os-engine/moe-plugin-maven

Erforderliche Spezifikationen für die Entwicklungsumgebung

Mac

Win

Wie es funktioniert

Die Laufzeit der Multi-OS Engine basiert auf der Android-Laufzeit ART. ART hat einige Funktionen, die auch unter iOS gut funktionieren.

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

[Zitiert von https://doc.multi-os-engine.org/multi-os-engine/2_Introduction/Introduction.html](https://doc.multi-os-engine.org/multi-os-engine/ 2_Einführung / Einführung.html)

So kann die auf Android geschriebene App als Anwendung für iOS per MOE-Plug-In erstellt werden. Die folgende Abbildung zeigt Android Studio als Beispiel, aber wie oben erwähnt, spielt die IDE keine Rolle. Das Gradle-Plug-In ist verfügbar. Wenn es sich also um ein Gradle-Projekt handelt, spielt die IDE keine Rolle.

[Zitiert von https://doc.multi-os-engine.org/multi-os-engine/2_Introduction/Introduction.html](https://doc.multi-os-engine.org/multi-os-engine/ 2_Einführung / Einführung.html)

Was tun mit dem Design der iOS-Benutzeroberfläche?

Der UI-Teil muss wie bei der normalen iOS-Entwicklung mit Xcode usw. erstellt werden. Wenn es sich jedoch um eine plattformübergreifende kompatible Spiel-Engine wie libGDX handelt, gibt es keinen großen Unterschied in der Benutzeroberfläche. Wenn Sie eine App entwickeln, bei der Sie den Entwurfsleitfaden für jede Plattform kennen müssen, müssen Sie anscheinend eine Benutzeroberfläche für jede Plattform erstellen.

Es scheint, dass eine Bibliothek namens Nat4J native und Java verbindet und die Benutzeroberfläche bindet. Nat/J: Interoperability with Native Code

Vorbereitung vor dem Versuch

Als vorläufige Vorbereitung verwende ich in meinem Fall IntelliJ IDEA, also habe ich das moe IDE-Plug-In installiert.

Sie finden es, indem Sie nach Einstellungen> Plugin> Repositorys durchsuchen ...> "Multi-OS" suchen. multi-os.png

Getting Started(Java)

Der Beispielcode wurde auf GitHub hochgeladen.

Ich werde den Beispielcode löschen.

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

Entdecken Sie den Inhalt

Ich werde mir den Inhalt ansehen

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

Es gibt einige Beispiel-Apps. Nun, wenn Sie sich README.md ansehen, ist es darum herum geschrieben. Lassen Sie uns diesmal den Rechner ausführen.

Die Konfiguration der Calculator-App sieht folgendermaßen aus.

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

android directory = android plattformspezifisch, ios directory = ios plattformspezifisch, common = common part. Jedes wird als Gradle-Modul behandelt.

Eine Klasse namens CalcActivity.java wird für Android bereitgestellt, und AppViewController.java wird für iOS bereitgestellt. Dies ist jeder UI-Teil. Die Android-Seite hat nichts Besonderes. Dies gilt auch für die Entwicklung unter Android. iOS hat verschiedene Funktionen.

Es gibt einige Funktionen, wenn man sich nur den Klassenkopf ansieht

AppViewController


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

UIViewController ist eine von iOS bereitgestellte API, die auf der Seite der Multi-OS-Engine vorbereitet wird. Weitere Informationen zu UIViewController finden Sie in der API-Referenz von Apple. UIViewController - API Reference

Ich möchte, dass Sie einen kurzen Blick auf die Quelle werfen, aber da UIButton, UIColor, UILabel usw. auch auf der Seite der Multi-OS-Engine vorbereitet sind, können sie normal verwendet werden. Die Zeichenverarbeitung wird von der viewDidLoad-Methode ausgeführt. Wenn Sie an der iOS-Entwicklung beteiligt sind, kann die Ereignisbehandlung usw. ohne Unbehagen ausgedrückt werden.

Der wesentliche gemeinsame Teil enthält Logik, die sowohl auf Android- als auch auf iOS-Plattformen verwendet wird. In diesem Fall ist es die Logik der vier Regeln, die den Kern der Calculator-App bilden.

Versuchen Sie es mit Android

Zur Zeit habe ich ein aktuelles Android-Gerät, also ./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
(Unterlassung)
: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'.

Die App wurde erfolgreich installiert.

Wie der Name Calculator andeutet, handelt es sich um einen Taschenrechner.

Screenshot_20170207-235347.png

Probieren Sie es unter iOS aus

Ich habe kein aktuelles iOS-Gerät, aber da es ein MacBook Pro ist, werde ich es auf einem Simulator ausführen. Starten Sie zuerst den Simulator. Alles ist gut.

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

Es wird nach einer Weile beginnen. Der Simulator ist allerdings langsam.

Der XXXXX-Teil ist die Simulator-ID, die unter Simulator> Hardware> Gerät verwalten angezeigt wird. Auf diese Weise können Sie es dem Simulator zuordnen.

simulator-identifier.png

Ja es hat funktioniert!

ios-moelaunch.png

Wenn Sie eine IPA-Datei erstellen möchten, gibt es verschiedene Dinge wie das Entwicklungsteam und die Einstellung des Bereitstellungsprofils. In diesem Fall müssen Sie die zugehörigen Einstellungen in ios / build.gradle schreiben.

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
    }
}

Bitte beachten Sie die Details hier.

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

Getting Started(Kotlin)

Der Beispielcode wird auch auf GitHub hochgeladen.

Ich habe es bereits erklärt, es fühlt sich also so an, als wäre es kein Material mehr, aber die Beispiel-App ist etwas anders.

$ ls
KotlinCalculator	KotlinRssReader		README.md
KotlinMuseumMap		NOTICE.txt

Weitere Informationen finden Sie in README.md wie im Beispiel. Ich habe in den KotlinCalculator geschaut und festgestellt, dass der Code mit dem Java-Beispiel identisch ist. Die Konfiguration von Gradle ist dieselbe. Es ist android, ios, üblich. Es ist jedoch in Kotlin geschrieben. Möglicherweise haben Sie die IDE-Konvertierung verwendet (IntelliJ IDEA konvertiert von Java nach Kotlin).

Es gibt auch eine Gemeinschaft

Es gibt auch einen Ort, an dem Sie diskutieren können.

Multi-OS Engine Forum Ab Februar 2017 wurde bereits eine Hauptversion veröffentlicht, und es scheint, dass es viele Übertragungen von RoboVM gibt und es bereits viele Benutzer gibt. Die Diskussion ist ziemlich weit fortgeschritten, und wenn man sich die Suchtpunkte ansieht, scheint es ganz so.

Das Dokument ist auch sehr ordentlich. https://doc.multi-os-engine.org

Zusammenfassung

Ich finde es fühlt sich ziemlich gut an.

Referenz-URL

Nachtrag

MOE ist ab 2017/02, die Version ist 1.x, Es scheint, dass Version 2.x LLVM-Bitcode-Unterstützung enthalten wird. @snakeman Vielen Dank für die Informationen!

Wenn ich in diesem Zusammenhang nachforsche Ich habe im Forum einen Austausch mit dem Titel Hat Multi-OS-Engine eine Roadmap gefunden? Does multi-os-engine have a roadmap?

Wie Sie von hier aus sehen können

darüber. Es gab auch eine Roadmap. 2.x scheint dieses Jahr veröffentlicht zu werden, also freue ich mich auch darauf.

MOE Roadmap 2016 - 2017 Winter

Recommended Posts

Intel Multi-OS Engine (MOE), eine plattformübergreifende Bibliothek für Android und iOS
Ich habe eine Bibliothek zum Anzeigen von Tutorials auf Android erstellt.
[Android] Ursache und Abhilfe für TransactionTooLargeException
Eine Sammlung von Bibliotheken, die für die Android-Entwicklung nützlich sind