Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kotlin Nativeってandroid向けにもかけるんですよ
Search
RyuNen344
July 20, 2022
Technology
690
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Kotlin Nativeってandroid向けにもかけるんですよ
RyuNen344
July 20, 2022
More Decks by RyuNen344
See All by RyuNen344
せめて、ネイティブらしく
ryunen344
2
2.8k
Cache Me If You Can
ryunen344
3
9.1k
WindowInsetsだってテストしたい
ryunen344
2
410
サプライチェーン攻撃に備える
ryunen344
1
3.8k
Okioに愛を込めて
ryunen344
3
3k
Firebase Hostingを使ってPasskeyをandroidアプリで試してみよう
ryunen344
2
2.1k
Xcode Meets Gradle
ryunen344
0
440
わかった気になる、Coroutine1.7.0のチャンネルのパフォーマンス向上
ryunen344
0
460
K/NとNSKeyedArchiverと私
ryunen344
0
620
Other Decks in Technology
See All in Technology
Genie Codeハンズオン基礎編
taka_aki
1
120
FDEの心得
noriakioji
4
5.2k
事業価値と Engineering 2026年度版
recruitengineers
PRO
49
23k
モノリス Rails でも日中に rails db:migrate を走らせたい! / Daytime rails db:migrate on Monolithic Rails!
euglena1215
4
580
クラウドセキュリティ入門 ~安全なクラウド利用のための基礎知識~
lhazy
13
8.7k
カートの信頼性を担保するWireMockを使ったe2eテスト
ykagano
0
260
制約理論(ToC)入門 2026版
recruitengineers
PRO
8
2.2k
強化学習「理論」入門
enakai00
3
3.6k
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
19k
FORENSIA: ローカルLLMフォレンジックハーネス
sumeshi
2
380
今こそ聞きたいソフトウェア設計 ドメイン駆動設計再入門
masuda220
PRO
17
7.2k
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
How to Talk to Developers About Accessibility
jct
2
510
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
430
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
260
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Prompt Engineering for Job Search
mfonobong
0
400
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
280
BBQ
matthewcrist
89
10k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
460
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
300
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
3
430
Transcript
Kotlin Nativeͬͯandroid͚ ʹॻ͚ΔΜͰ͢Α 2022.07.20 Qiita Night 2022ɺAndroidΞϓϦͲ͏࡞Δʁ Bunjiro Miyoshi
About Me • νʔϜϥϘॴଐ • (ࣗশ)ϚϧνϓϥοτϑΥʔϜܳਓ • ৽ଔͰAndroidΤϯδχΞͱͯ͠σϏϡʔɺAsyncTask͕ຮԆΔݹͷ ίʔυʹ͓ݟ͍͞ΕΔɻ࣮ͦΜͳʹRxॻ͚ͳ͍(Coroutine͔ Γ)ɻ
ΤϯδχΞɺ ࠷ऴతʹC͔C++ʹͨͲΓண͘આ
Android NDKͬͯ·͔͢ʁ C++͍ͩͬͯ͠ͷʹJNIʹͳΔͱߟ͑Δ͜ͱ૿͑Δɾɾɾɾ
࠷ۙϚϧνϓϥοτϑΥʔϜདྷͯ·͢ ΑͶ
Kotlin Native࣮ͬͯandroid NDK ͚ʹు͖ग़ͤΔ
Kotlin Multiplatformͱ
Kotlin Multiplatformͱ 👈ࠓճίίʹযΛͯ·͢
Kotlin Nativeͱ • αϙʔτ͍ͯ͠ΔPlatform • macOS, tvOS, watchOS • Linux
• Windows(MinGW) • Android NDK Ref: https://kotlinlang.org/docs/native-overview.html
Kotlin Nativeͱ • Static or DynamicϥΠϒϥϦΛੜͰ͖Δ • Static or Dynamic
CϥΠϒϥϦΛऔΓࠐΊΔ • (Swift, Objective-CͷϑϨʔϜϫʔΫऔΓࠐΊΔ)
Kotlin Native࣮ߦ࣌Πϝʔδ ɿ࣮ࡍʹΠϯετʔϧ࣌ͷAOTͱ͔བྷΉ
Kotlin Native࣮ߦ࣌Πϝʔδ ɿ࣮ࡍʹΠϯετʔϧ࣌ͷAOTͱ͔བྷΉ
ɿ࣮ࡍʹΠϯετʔϧ࣌ͷAOTͱ͔བྷΉ Kotlin Native࣮ߦ࣌Πϝʔδ
Kotlin Native࣮ߦ࣌Πϝʔδ ɿ࣮ࡍʹΠϯετʔϧ࣌ͷAOTͱ͔བྷΉ
Kotlin Native for Android Native • ݱঢ়API21͔Βαϙʔτ͞Ε͍ͯΔωΠςΟϒAPIʹରԠ͞Ε͍ͯΔ(ͬΆ͍) • ҎԼKotlin NativeΛ༻͍ͯKotlinͰ৮ΕΔ
• jniपΓͷ͋Ε͜Ε༻ͷinterface • android native app API(Native ActivityͳͲ) • EGL(GLES1~3.1ؚΉ) • media • OpenMAX AL • posix(linuxίϚϯυྨ) • zlib Android NDKެࣜͷωΠςΟϒAPIҰཡ https://developer.android.com/ndk/guides/stable_apis?hl=ja
Kotlin NativeΛNDK͚ʹॻ͖ग़͢
ઃఆɿSourceSets
ઃఆɿSourceSets androidNative༻ʹ༻ҙ͞Ε͍ͯΔϓϦ ηοτ༻ͷؔΛͬͯఆٛ
ઃఆɿSourceSets ు͖ग़͞ΕΔϥΠϒϥϦ͕੩తͳͷ͔ಈ తͳͷ͔Λఆٛ(ࠨಈత)
ઃఆɿbuild Ϗϧυ࣌ʹandroidϓϩδΣΫτʹ.soϑΝ ΠϧΛίϐʔ͢ΔॲཧΛKotlin Nativeଆͷ ϓϩδΣΫτʹՃ͢Δ K/NϓϩδΣΫτandroidϥΠϒϥϦͱ ͯ͠ೝࣝͰ͖ͳ͍ͨΊखͰϑΝΠϧΛί ϐʔͯ͋͛͠Δඞཁ͕͋Δ
Kotlin NativeΛݺͼग़͢
ܕͷޓੑ(Primitive) KBWB KOJ $ $ PO,/ LPUMJOPO,/ CPPMFBO KCPPMFBO VJOU@U
\MJCSBZ^@,#PPMFBO #PPMFBO CZUF KCZUF JOU@U \MJCSBZ^@,#ZUF #ZUF DIBS KDIBS VJOU@U \MJCSBZ^@,$IBS $IBS TIPSU KTIPSU JOU@U \MJCSBZ^@,4IPSU 4IPSU JOU KJOU JOU@U \MJCSBZ^@,*OU *OU MPOH KMPOH JOU@U \MJCSBZ^@,-POH -POH fl PBU K fl PBU fl PBU \MJCSBZ^@,'MPBU 'MPBU EPVCMF KEPVCMF EPVCMF \MJCSBZ^@,%PVCMF %PVCMF WPJE WPJE \MJCSBZ^@,/BUJWF1US
JNI on K/NΛ͏·͘ΔTips Primitiveฤ • Primitiveͳܕͦͷ··K/N্ͰKotlinΫϥεͰड͚औΕΔ • instanceΛੜ͢ΔࡍallocΛࣗಈͰͬͯ͘ΕΔmemScopedؔ Λ༻͍ͯϝϞϦ൪͕ScopeͰෆมʹͳΔΑ͏ʹ͢Δ RefrectionฤɺStructฤͲ͔͜ͰͤͨΒɾɾɾɾ
JNI on K/NΛ͏·͘ΔTips Primitiveฤ
JNI on K/NΛ͏·͘ΔTips Primitiveฤ instanceੜ͢Δͱallocͯ͘͠ΕΔ
JNI on K/NΛ͏·͘ΔTips Primitiveฤ ͳʹ͔ॲཧ͢Δ
JNI on K/NΛ͏·͘ΔTips Primitiveฤ ࠷ޙʹϝϞϦղ์ͯ͘͠ΕΔ Ұ൪͏ྫͱͯ͠memScopedΛऔΓ্͕͛ͨଞʹ৭ʑศརؔ ͕kotlinx.cinteropʹఆٛ͞Ε͍ͯΔ
ు͖ग़ͨ͠.so ϑΝΠϧΛNDKʹಡΈࠐ·ͤΔ • Kotlin Nativeʹύοέʔδͷ֓೦͕ଘࡏ͍ͯ͠Δ • τοϓϨϕϧؔͳͲͷ໊લۭ͕ؒͿ͔ͭΒͳ͍ͷ͜Εͷ͓͔ ͛ • ex.)cଆ͔ΒΈΔͱprintؔKotlin_io_Console_printʹͳͬͯͨ
Γ͢Δ • ݺͼग़͠ํ͕ಠಛ()ʹͳΔ
ు͖ग़ͨ͠.so ϑΝΠϧΛNDKʹಡΈࠐ·ͤΔ ·ͣK/Nͷexported symbolsΛऔΓग़͢
ు͖ग़ͨ͠.so ϑΝΠϧΛNDKʹಡΈࠐ·ͤΔ తͷTop LevelؔɺΫϥεΛݺͼग़͢ K/N RuntimeΛੜͯ͠ɺ͓ͯͷΫϥεؔΛݺͼग़͢Πϝʔδ
ύϑΥʔϚϯεͲ͏ͳͷΑ
ܭଌɿલఏ • Kotlin Nativeͷnew mmෆ༻ • Kotlin NativeͰ.soΛు͖ग़ͯͦ͠ΕΛndkʹऔΓࠐΜͰॲཧΛݺͼग़͢ • ࠓճΈΜͳେ͖ϑΟϘφονؔͰܭଌ(Ұ൪Orderͷଟ͍࠶ؼ
ύλʔϯ) • CoroutineͳͲΛ༻͍ͯॲཧதͷ࣮ߦεϨουͷมߋͳͲߦΘͳ͍ • tailrecΛͬͨݴޠϨϕϧͷ࠷దԽߦΘͳ͍
ܭଌɿ݁Ռ ߲a࣮NT LPUMJO $ ,/
ܭଌɿ·ͱΊ • ࠓճͷܭଌͰૉͷωΠςΟϒ࣮Λ্ճΕΔ݁Ռ͕ग़ͨ • ͜ͷ෦ڪΒ͘NDKͷࣝෆͰ࠷దԽෆͳ෦͕͋Δͣ • K/Ndebug symbol͕ॏΊͳͷͰ͔ͬ͠ΓReleaseϏϧυΛͬͨ ΄͏͕Α͍
·ͱΊᶃ • ૉఢͳͱ͜Ζ • IDEࢧԉΛ͞Βʹड͚͍͢(CLion࣋ͬͯͳ͍ਓͰϦονͳࢧԉ͕Β͑Δ) • ڧྗͳstdlibपΓΛઃఆͳ͠Ͱ͑Δ • ίΞϩδοΫʹؔͯ͠׳ΕͯΔKotlinΛͬͯهड़͢Δ͜ͱ͕Ͱ͖Δ •
͋ͱҰาͷͱ͜Ζ • KotlinͬͯΔͷʹPointerΛҙ࣮͕ࣝͨ͠ՕॴՕॴͰൃੜ͢Δ • coroutine, atomicfu͕ରԠ͞Εͯͳ͍ରԠ͞ΕΔݟࠐΈͳ͍(͕ճආࡦࣗମ͋Δ) • ύϑΥʔϚϯεͦΜͳʹΑ͘ͳ͍ ૉͷ࣮ΑΓૣͯ͘ϏοΫϦ
·ͱΊᶄ • ωΠςΟϒϥΠϒϥϦ͔͠ͳ͍͚ͲͲ͏ͯ͠C++ͷΩϟονΞο ϓ͢Δ༨༟͕ͳ͍ɺͱ͍͏߹ʹͲ͏Ͱ͠ΐ͏͔
ߏମޓฤ, CInteropฤʹଓ͘ to be continued….