SlideShare a Scribd company logo
1 of 18
Download to read offline
用 Kotlin Multiplatform 創
建跨平台的 Android
DeepLink 測試工具
Compose Desktop 實踐分享
Ray Yuan Liu
Ray Yuan Liu
Software Developer
https://rayuan.tw
Agenda
● 什麼是 Kotlin Multiplatform、Compose Multiplatform?
● 一個 Compose Desktop 實作:DeepLink 測試工具
● 程式碼結構
● 如何引入 Library?
● 如何撰寫單元測試
什麼是 Kotlin Multiplatform?
Kotlin compiler 支援的輸出語言
包含:JVM、JavaScript、Native、WebAssembly
透過單一 Kotlin 語言來撰寫跨平台的應用程式,包含 Client、Server side
Kotlin Multiplatform is in Beta!
Compose Multiplatform
原來是 Google 給 Android 推出的宣告式 UI 語言工具
JetBrains 貢獻 Desktop、Web 版本
三週前開始,支援 iOS!
實作一個 DeepLink 測試工具
用 Kotlin 製作 macOS/Windows/Linux 應用程式
本質上,是一個 Java 桌面應用程式
Compose Desktop 實作 UI
實作一個 DeepLink 測試工具
GUI 工具,幫你輸入以下指令:
$ adb shell am start -a android.intent.action.VIEW -d "your-link" com.myapp
程式碼結構
Code Tour 🕵
🏽♂️
自己切架構
Data
Domain
Presentation
Shell commands
Usecases
ViewModel/View
Shell command
AdbCommandExcecutor .executeCommand( )
CommandBuilder
Command
AdbPathHelper
Usecases
This app can do:
● GetDevices
● SendDeepLink
ViewModel/View
Presentation:
● Compose UI
● ViewModel with compose state
Kotlin Multiplatform 結構
Data
Domain
Presentation
Native Android, iOS, Web,
Desktop …
Common Main
expect-actual concept
Compose Multiplatform
jar/aar/CocoaPods…
如何引入 Library
支援 Java Library
與 Android 專案一樣,使用 Gradle 管理 Dependencies
如何編譯成執行檔?
請使用 Gradle Task,不要用傳統方法 build jar,因為會失敗
$ ./gradlew packageDmg
檔案會在
build/compose/binaries/main/ <裡頭>
Mac
怎麼寫單元測試?
Desktop 程式是 JVM 程式,可以用 JUnit 來測試
MockK
MockK:一款強大的 Kotlin Mocking Library (Part 1 / 4). by. Joe Tsai
JvmMain < — > JvmTest 放相對應的路徑
與 Android 的 JVM Test 相同
Compose UI Test:
implementation(compose.uiTestJUnit4)
Compose Desktop 與 Android 上的不同
Coroutines 沒有 Dispatchers.Main
Preview 很麻煩,要手動點擊
Gradle Sync 在 IDEA 上和 Android Studio 上不太一樣
版本比 Android Jetpack Compose 慢,新元件需要等 JetBrains 實作
https://github.com/JetBrains/compose-multiplatform
Thank you!
專案原始碼:
https://github.com/YuanLiou/IntentSenderDesktop
歡迎大家一起來玩 Kotlin 和 Compose Multiplatform!
fork is welcome

More Related Content

Similar to 用 Kotlin Multiplatform 創建跨平台的 Android DeepLink 測試工具:Compose Desktop 實踐分享

Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天Gelis Wu
 
初窺 Flutter 開發.pdf
初窺 Flutter 開發.pdf初窺 Flutter 開發.pdf
初窺 Flutter 開發.pdfgdscnycu
 
容器驅動開發 - .NET Conf 2017 @ 台中
容器驅動開發 - .NET Conf 2017 @ 台中容器驅動開發 - .NET Conf 2017 @ 台中
容器驅動開發 - .NET Conf 2017 @ 台中Andrew Wu
 
從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby建興 王
 
JSDC 2015 React-Native 實戰
JSDC 2015 React-Native 實戰JSDC 2015 React-Native 實戰
JSDC 2015 React-Native 實戰Sam Lee
 
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境Will Huang
 
來玩 Bot Framework Composer 2.0版吧!
來玩 Bot Framework Composer 2.0版吧!來玩 Bot Framework Composer 2.0版吧!
來玩 Bot Framework Composer 2.0版吧!Ko Ko
 
開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)
開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)
開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)National Cheng Kung University
 
第一次 Mobile App 就上手
第一次 Mobile App 就上手第一次 Mobile App 就上手
第一次 Mobile App 就上手Ying-Hsiang Liao
 
Java Build Tool course in 2011
Java Build Tool course in 2011Java Build Tool course in 2011
Java Build Tool course in 2011Ching Yi Chan
 
導入 Flutter 前你應該知道的事
導入 Flutter 前你應該知道的事導入 Flutter 前你應該知道的事
導入 Flutter 前你應該知道的事Weizhong Yang
 
快手K-Engine高性能异构存储引擎演进之路. Kuaishou high performance storage engine. named K-En...
快手K-Engine高性能异构存储引擎演进之路. Kuaishou high performance storage engine. named K-En...快手K-Engine高性能异构存储引擎演进之路. Kuaishou high performance storage engine. named K-En...
快手K-Engine高性能异构存储引擎演进之路. Kuaishou high performance storage engine. named K-En...gugemichael
 
用 Drone 打造 輕量級容器持續交付平台
用 Drone 打造輕量級容器持續交付平台用 Drone 打造輕量級容器持續交付平台
用 Drone 打造 輕量級容器持續交付平台Bo-Yi Wu
 
Appcan移动应用开发平台介绍120409
Appcan移动应用开发平台介绍120409Appcan移动应用开发平台介绍120409
Appcan移动应用开发平台介绍120409zhengyiwuxian
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛Edward Kuo
 
钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具taobao.com
 
用Bluemix DevOps 建立良好的團隊開發與版本控制
用Bluemix DevOps 建立良好的團隊開發與版本控制用Bluemix DevOps 建立良好的團隊開發與版本控制
用Bluemix DevOps 建立良好的團隊開發與版本控制Hsuan-Ju Lin
 

Similar to 用 Kotlin Multiplatform 創建跨平台的 Android DeepLink 測試工具:Compose Desktop 實踐分享 (20)

Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天
 
初窺 Flutter 開發.pdf
初窺 Flutter 開發.pdf初窺 Flutter 開發.pdf
初窺 Flutter 開發.pdf
 
容器驅動開發 - .NET Conf 2017 @ 台中
容器驅動開發 - .NET Conf 2017 @ 台中容器驅動開發 - .NET Conf 2017 @ 台中
容器驅動開發 - .NET Conf 2017 @ 台中
 
Android JNI
Android JNIAndroid JNI
Android JNI
 
從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby
 
JSDC 2015 React-Native 實戰
JSDC 2015 React-Native 實戰JSDC 2015 React-Native 實戰
JSDC 2015 React-Native 實戰
 
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
 
來玩 Bot Framework Composer 2.0版吧!
來玩 Bot Framework Composer 2.0版吧!來玩 Bot Framework Composer 2.0版吧!
來玩 Bot Framework Composer 2.0版吧!
 
Ch01
Ch01Ch01
Ch01
 
開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)
開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)
開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)
 
第一次 Mobile App 就上手
第一次 Mobile App 就上手第一次 Mobile App 就上手
第一次 Mobile App 就上手
 
Java Build Tool course in 2011
Java Build Tool course in 2011Java Build Tool course in 2011
Java Build Tool course in 2011
 
導入 Flutter 前你應該知道的事
導入 Flutter 前你應該知道的事導入 Flutter 前你應該知道的事
導入 Flutter 前你應該知道的事
 
快手K-Engine高性能异构存储引擎演进之路. Kuaishou high performance storage engine. named K-En...
快手K-Engine高性能异构存储引擎演进之路. Kuaishou high performance storage engine. named K-En...快手K-Engine高性能异构存储引擎演进之路. Kuaishou high performance storage engine. named K-En...
快手K-Engine高性能异构存储引擎演进之路. Kuaishou high performance storage engine. named K-En...
 
用 Drone 打造 輕量級容器持續交付平台
用 Drone 打造輕量級容器持續交付平台用 Drone 打造輕量級容器持續交付平台
用 Drone 打造 輕量級容器持續交付平台
 
Appcan移动应用开发平台介绍120409
Appcan移动应用开发平台介绍120409Appcan移动应用开发平台介绍120409
Appcan移动应用开发平台介绍120409
 
[VideOhya] Titanium開發經驗分享_1020
[VideOhya] Titanium開發經驗分享_1020[VideOhya] Titanium開發經驗分享_1020
[VideOhya] Titanium開發經驗分享_1020
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
 
钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具
 
用Bluemix DevOps 建立良好的團隊開發與版本控制
用Bluemix DevOps 建立良好的團隊開發與版本控制用Bluemix DevOps 建立良好的團隊開發與版本控制
用Bluemix DevOps 建立良好的團隊開發與版本控制
 

用 Kotlin Multiplatform 創建跨平台的 Android DeepLink 測試工具:Compose Desktop 實踐分享

Editor's Notes

  1. 包含 Live Demo
  2. 包含 Live Demo
  3. 從 Main.kt run 程式
  4. SharedPreference/DataStore vs CoreData