Multiplatform Kotlin Hello World
This project demonstrates sharing runtime independent code between different Kotlin's runtimes (Java/Android/JavaScript). It uses Gradle build engine.
It uses new support for multiplatform modules with plugin kotlin-multiplatform
.
Applications are built using features available from Kotlin 1.2 regarding multiplatform modules - see this blog posts:
- Kotlin 1.2 Released: Sharing Code between Platforms
- Webinar recording: Developing Multiplatform Projects in Kotlin 1.2
Older implementation that didn't use kotlin-multiplatform
plugin and various hacks was moved to old-multiplatform branch.
Oldest implementation that used various hacks was moved to old-multiplatform branch.
What is Kotlin?
otlin is a programming language developed by Jetbrains. It's fully compatibile with Java runtimes and also there is support for JavaScript transpilation. Experimental version of Kotlin/Native has goal to also build fully native apps for iOS, Linux, Windows and possibly other platforms.
What is it doing?
- writes Hello Kotlin!
- calculates first 1000 prime numbers (this part is shared between runtimes) and prints them
Structure
It's the Gradle multiple modules project.
hello_android_app
- Android application module, it's compiled to DEX bytecode, it produces APK file upon buildhello_js_browser_app
- application transpiled for frontend JavaScript, packed in WebPack, it's only statically served by Node.jshello_js_node_app
- console application transpiled to Node.js JavaScripthello_jvm_app
- console application compiled to Java bytecode for JVM, produces JAR that can be executed by eg. Oracle JVMhello_lib
- multiplatform library project, with shared and platform specific codecommonMain
- shared Kotlin source code, platform independent codecommonTest
- shared tests, platform independent testsjsMain
- JavaScript runtimes platform dependent codejsTest
- JavaScript runtimes specific testsjvmMain
- Java runtime platform dependent codejvmTest
- Java runtime specific testsandroidMain
- Android runtime platform dependent codeandroidTest
- Android runtime specific tests
Platform implementation specifics
- prime number calculation is platform independent, single code shared for all platforms
- text output on screen is platform dependent
- Android - it's done by adding with TextView to layout
- Frontend JavaScript - it adds element in DOM of HTML page
- Node.js JavaScript - uses
console.log()
- JVM - uses
System.out.println()
Note: Ordinary console output can be done by println()
function from Kotlin Standard Library.
Building and running the demo
It was checked only under Linux Mint, probably there won't be any problems with most Unix-like environments.
Android application
You can use Android Studio to run the application. To build from command line, you can use
# ./gradlew hello_android_app:build
and APK file is located in your build/outputs/apk
directory.
JVM console application
# ./gradlew hello_jvm_app:build
You can than run the JAR file using java -jar hello_jvm_app.jar
command from build/libs
directory.
Frontend JavaScript application
# ./gradlew hello_js_browser_app:build
Webpack allows to host site directly from Gradle by
# ./gradlew hello_js_browser_app:run
It will run locally on http://localhost:8088/.
Node.js console application
# ./gradlew hello_js_node_app:build
You can execute it in hello_js_node_app
directory by:
# node ./app.js
to see all build options
# ./gradlew tasks --all
License
Do whathever you want with this.