3 Platforms in 5 Minutes with Kotlin (Android Dev Summit ’18)

[음악 재생] WOJTEK KALICINSKI : 안녕하세요 내 이름은 워텍입니다

그리고 나는 너에게 짧은 이야기를 나누고 싶었다 새로운 Kotlin 멀티 플랫폼 프로젝트 경험에 대해 Kotlin에서 13 그래서 우리가이 회의에 올 때, Android에 대해 이야기하고, Android에서 Kotlin을 실행하는 것에 대해 이야기하십시오 안드로이드 애플 리케이션을 만들기 위해, 우리가 정말로 의미하는 것은 Kotlin JVM입니다

그게 우리가 알고있는 코 틀린이야 Java 바이트 코드로 컴파일됩니다 그런 다음 dex 파일로 변환 할 수 있습니다 Android에서 실행하십시오

그러나 클라우드 서버, 데스크톱, 등등 이제 실제로 Kotlin의 두 가지 맛이 있습니다 또는 컴파일 타겟 첫 번째, Kotlin JS, 달리기 웹 브라우저 환경의 JavaScript 또는 클라우드 기능 또는 Nodejs와 같은 것입니다

그리고 나서 Kotlin native가 컴파일됩니다 네이티브 라이브러리의 코드를 처리하는 방법 다양한 플랫폼을 실행하거나 타겟팅 할 수 있으며, 심지어 IOS, 데스크톱 애플 리케이션, WebAssembly, 그리고 심지어 안드로이드와 같은 그러면 우리는 실제로 이것을 어떻게 시작해야할까요? 그래서 Kotlin 13은 새로운 프로젝트 구조를 도입했습니다 Kotlin 멀티 플랫폼이라고 불리는 새로운 플러그인입니다

그리고 만약 당신이 그것을 당신의 어떤 모듈에도 적용한다면, 그런 다음 프리셋 세트에서 선택할 수 있습니다 이러한 플랫폼을 타겟팅 할 수 있습니다 여기 예를 들어 Android 라이브러리를 타겟팅하고 있습니다 및 js 대상 이제 이것을 모듈에 추가하면, 자동으로 각 플랫폼에 대한 소스 세트를 생성합니다

특정 Kotlin 파일 따라서 Kotlin 파일을 js 메인 폴더에 넣으면, 그들은 컴파일되거나 자바 스크립트 파일로 변환됩니다 이제 Kotlin이 구체적으로 무엇을 의미합니까? 미안 해요 – 플랫폼 특유의 Kotlin? 이제 문서를 찾아보고 찾아 본다면 Kotlin 패키지 각각에 대한 페이지, 오른쪽 상단에있는 마우스로 마우스를 움직여보십시오 당신은이 다색 칩을 볼 수 있습니다 컴파일 대상을 알려줍니다

이 라이브러리를 사용할 수 있습니까? 그래서 여기, 예를 들어, Kotlin 브라우저 패키지 문서 및 창 인터페이스에 액세스 할 수있는 아마 웹 브라우저 환경에서만 js 대상에서 의미가 있습니다 그리고 그것이 그 방법입니다 이제 다행스럽게도 많은 핵심 요소가 라이브러리와 함수는 모두 사용할 수 있습니다 컴파일 대상 실제로, 네 번째를 볼 수 있습니다, Kotlin common, 이것은 순수한 코 틀린임을 의미합니다

플랫폼과 독립적으로 실행할 수있는 라이브러리 타겟팅 사실 멀티 플랫폼 플러그인을 추가하면 플랫폼 별 소스 세트와 함께 프로젝트에, 당신은 또한 공통 소스를 얻을 수있는 곳으로 설정합니다 플랫폼 독립적 인 코드를 넣으십시오 이제 플랫폼 독립적 인 코드에 관한 것은, 플랫폼 API를 호출 할 수 없습니다 그것은 특정 또는 안드로이드 특정 js를 호출 할 수 없습니다 아피스 물론 다른 방법은 효과가 있습니다

플랫폼 별 코드를 가질 수 있습니다 공유 라이브러리에 따라 달라집니다 또는 소스 세트 그래서 모든 것을 알고, 나는 단지 예제 애플 리케이션을 작성하기 시작했다 Kotlin 멀티 플랫폼에 대해 알아보십시오

그리고 나는 작은 스도쿠 게임을 만들기로 결정했다 이제 Kotlin 멀티 플랫폼에 대해 내가해야 할 한 가지는 앱을 한 번 작성하고 실행할 수있는 툴킷이 아닙니다 그것을 도처에 Android 앱을 만들 필요가 있습니다 안드로이드 특정 코드로, 평소처럼 그러면 JavaScript 코드가있는 웹 페이지가 나타납니다

항목을 초기화하기 만하면됩니다 내 애플 리케이션, 라이프 사이클 UI 등을 가리킨다 그런데, 내가하는 일은 나의 모든 공유 비즈니스 논리이다 제 경우에는 스도쿠 엔진입니다 나를 위해 Sudoku 보드를 해결하고 생성합니다

나는 그것을 꺼내서 공유에 넣는다 라이브러리는 Kotlin 공통을 사용합니다 사실,이 라이브러리에있는 유일한 소스 세트입니다 공통점이다 그래서 모든 코드를 거기에 넣었습니다

이는 모든 플랫폼에서 사용할 수 있음을 의미합니다 내가 목표로 정했던 승인 하지만 그때 나는 생각했다 좋아, 나는이 핵심 엔진을 가지고있다 내 Sudoku 코드를 해결하기 위해

그러나 나는 또한 보드를 스크린에 그려 넣고 싶다 그리고 왜 각 플랫폼에 대해 코드를 작성해야합니까? 개별적으로 동일하게 보일 경우 별도로? 그래서 나는 생각하지 않았다 화면에 그리기위한 API가 있다면 완전히 독립적 인 플랫폼, 뭔가 다중 플랫폼 캔버스가 될 수 있습니까? 하지만 내가하고 싶은 것은 실제로하고 싶다 각 플랫폼 구현에 위임하게하십시오 그래서 안드로이드 캔버스를 사용하고 싶습니다

HTML을 사용하는 동안 Android에서 그릴 수 있습니다 캔버스를 웹 사이트에서 그립니다 문제는, 방금 Kotlin 공통 코드가 모든 플랫폼 인터페이스를 호출하십시오 그래서 나는 이것들에 정말로 의지 할 수 없다 이 모듈에서 내보내십시오

그러면 Kotlin에서 어떻게 작동합니까? 음,이 기대와 실제 메커니즘이 있습니다 예상되는 클래스를 공통 코드로 선언 할 수있게 해줍니다 이것은 Java에서 인터페이스를 정의하는 것과 거의 흡사합니다 그리고 각 플랫폼 별 소스 세트에서, 나는 실제 구현을 제공한다 플랫폼 API를 사용하고 의존 할 수있는 Android 캔버스와 같은 이제, 내 공통 소스에서 그 의존성을 추가 할 때 다른 하나를 설정하면 다음과 같이 보입니다

하지만 사실, 특정 플랫폼 용으로 컴파일 할 때, 그러한 js, 이 종속성은 실제로 올바른 HTML5 캔버스를 사용합니다 [징] [킬킬 웃음] 좋아, 내가 프로젝트에 대한 링크 만 보여줄 수 있다면 모두가 그것을 볼 수 있도록, 그것은 좋을 것입니다 [웃음] 네 연설자 1 : [INAUDIBLE] [킬킬 웃음] [박수 갈채] WOJTEK KALICINSKI : 맞습니다 [음악 재생]