About Intel Multi-OS Engine which seems to be recommended for libGDX. https://github.com/libgdx/libgdx/wiki/Setting-up-your-Development-Environment-(Eclipse,-Intellij-IDEA,-NetBeans)
If you use Intel Multi-OS Engine, you can create cross-platform applications with Java or Kotlin.
Continuing from the previous story about Mobile Open JDK 9, I'll investigate. Compatible with Android and iOS, about Mobile OpenJDK 9
Is Intel Multi-OS Engine familiar with that "Intel is included"? Nana A cross-platform library developed by Intel.
It's OSS (Intel is also appealing). https://multi-os-engine.org/
There is also an org on GitHub. https://github.com/multi-os-engine
It's "moe" for short, so let's throw Core2Duo to those who say "moe" or something like that.
Eclipse, IntelliJ IDEA, Android Studio。
Probably just an IDE plugin, I think that any IDE that can build Gradle (even if it is not an IDE) can be used. It seems to be Gradle, but it seems that Maven plugin is also prepared. https://github.com/multi-os-engine/moe-plugin-maven
Mac
Win
The Multi-OS Engine runtime is based on the Android runtime ART. ART has some features that also perform well on iOS.
[Quoted from 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)
So, the application written on Android can be built as it is as an application for iOS by the MOE plug-in. The figure below shows Android Studio as an example, but as mentioned above, the IDE does not matter. The Gradle plugin is available, so if it's a Gradle project, the IDE doesn't matter.
[Quoted from 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)
The UI part needs to be created with Xcode etc. like normal iOS development. However, if it is on a cross-platform compatible game engine such as libGDX, there is not much UI difference. If you are developing an app that requires you to be aware of the design guide for each platform, it seems that UI creation needs to be created for each platform.
It seems that a library called Nat4J bridges native and Java and binds the UI. Nat/J: Interoperability with Native Code
As a preliminary preparation, in my case I am using IntelliJ IDEA, so I installed the moe IDE plugin.
You can find it by searching Prefrences> Plugin> Browse Repositories ...> "multi-os".
Getting Started(Java)
The sample code has been uploaded on GitHub.
I will drop the sample code.
git clone https://github.com/multi-os-engine/moe-samples-java.git
I will look at the contents
$ ls
Calculator LocalizedString SimpleChart
CurrencyConverter MuseumMap SpeakHere
FastJNI NOTICE.txt Taxi
HelloMaven Planets TheElements
InAppPurchase README.md TicTacToe
There are some sample apps included. Well, if you look at README.md, it's written around that. For the time being, let's run the Calculator this time.
The configuration of the Calculator app looks like this.
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 platform specific, ios directory = ios platform specific, common = common part. Each is treated as a Gradle module.
There is a class called CalcActivity.java for Android and AppViewController.java for iOS. This is each UI part. There is nothing special about the Android side. It's the same when developing on Android. iOS has various features.
Even if you look only at the class header, there are quite a few features.
AppViewController
@org.moe.natj.general.ann.Runtime(ObjCRuntime.class)
@ObjCClassName("AppViewController")
@RegisterOnStartup
public class AppViewController extends UIViewController {
UIViewController is an API provided by iOS, and the one that wraps it is prepared on the Multi-OS Engine side. For details on UIViewController, refer to Apple's API reference. UIViewController - API Reference
I would like you to take a quick look at the source, but since UIButton, UIColor, UILabel, etc. are also prepared on the Multi-OS Engine side, they can be used normally. Drawing processing is performed by the viewDidLoad method. If you are involved in iOS development, event handling etc. may be expressed without discomfort.
The essential common part contains logic that is used on both Android and iOS platforms. In this case, it's the logic of the four arithmetic operations that are the core of the Calculator app.
For the time being, I have an actual Android device, so ./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'.
The app has been successfully installed.
As the name Calculator suggests, it's a calculator.
I don't have an actual iOS device, but since it's a MacBook Pro, I'll run it on a Simulator. First, start the Simulator. Anything is fine.
./gradlew ios: moeLaunch -Pmoe.launcher.simulators = XXXXX (Simulator ID).
It will start after a while. Simulator is slow though.
The XXXXX part is the Simulator identifier that can be seen in Simulator> Hardware> Manage Device. This allows you to associate it with the Simulator.
Yes it worked!
If you want to create an ipa file, there are various things such as the development team and provisioning profile settings. In that case, you need to write the related settings in 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
}
}
Please refer to the details here.
https://github.com/multi-os-engine/moe-plugin-gradle/blob/master/README.md
Getting Started(Kotlin)
The sample code is also uploaded on GitHub.
I've already explained about it, so it feels like it's out of material, but the sample app is a little different.
$ ls
KotlinCalculator KotlinRssReader README.md
KotlinMuseumMap NOTICE.txt
Please refer to README.md for details as in the example. I looked inside the Kotlin Calculator and found that the code was the same as the java sample. The configuration of Gradle is the same. It is android, ios, common. However, it is written in Kotlin. You probably used the IDE convert (IntelliJ IDEA will convert Java to Kotlin for you).
There is also a place where you can discuss.
Multi-OS Engine Forum As of February 2017, major version has already appeared, and it seems that there are many transfers from RoboVM, and there are already many users. The discussion is quite advanced, and if you look into the addictive points, it seems quite so.
The document is also very neat. https://doc.multi-os-engine.org
I think it feels pretty good.
MOE is version 1.x as of 2017/02, It seems that version 2.x will include LLVM bitcode support. @snakeman Thank you for the information!
When I'm investigating in that connection I found an exchange on the forum called Does multi-os-engine have a roadmap ?. Does multi-os-engine have a roadmap?
As you can see from here
about it. There was also a Roadmap. 2.x seems to be released this year, so I'm looking forward to it too.