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.7k
Cache Me If You Can
ryunen344
3
9k
WindowInsetsだってテストしたい
ryunen344
2
400
サプライチェーン攻撃に備える
ryunen344
1
3.8k
Okioに愛を込めて
ryunen344
3
2.9k
Firebase Hostingを使ってPasskeyをandroidアプリで試してみよう
ryunen344
2
2.1k
Xcode Meets Gradle
ryunen344
0
430
わかった気になる、Coroutine1.7.0のチャンネルのパフォーマンス向上
ryunen344
0
460
K/NとNSKeyedArchiverと私
ryunen344
0
620
Other Decks in Technology
See All in Technology
【CEDEC2026】専門性の高いデフォルメチームが挑んだ人材育成戦略 〜Cygames Academiaの企画から実施まで〜
cygames
PRO
0
120
MIRU 2026 チュートリアル
keisuke198619
0
740
SnowflakeCoCoでデータエンジニアリング!
foursue
0
150
『三匹の子ぶた』から学ぶネットワークセキュリティの昔と今 / Network Security: Then and Now Through the Lens of The Three Little Pigs
nttcom
1
1.6k
コンポーネント名には何を含めるべきなのか? / what-should-be-included-in-component-names
airrnot1106
0
250
今こそ聞きたいソフトウェア設計 ドメイン駆動設計再入門
masuda220
PRO
7
2.2k
侵入は突然に 〜 IoTマルウェアと悪用される家庭の機器 ~ / When Intrusion Strikes: IoT Malware and the Abuse of Home Devices
nttcom
0
1.4k
システム監視を 「システムを監視するだけ」で 終わらせないために
seiud
0
170
【Google Cloud Next Tokyo'26】Gemini Enterprise と Oracle AI Database で実現する、業務データ活用を実現する AI エージェント実装
shisyu_gaku
0
190
AIが自社のTableauを操作する世界へ:Tableau MCP超入門
tbtykk
0
110
データエンジニアこそ組織のオントロジーに向き合うべき — 問いに答えるAIから、事業を動かすAIへ
gappy50
7
3.2k
AIは実装を速くする。では、私たちは何を今作るべきか?-立場を越えてリリースに向き合ったチーム開発の実践 / 20260801 Hiromi Nakaya and Naoki Takahashi
shift_evolve
PRO
3
330
Featured
See All Featured
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Scaling GitHub
holman
464
140k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
920
Rails Girls Zürich Keynote
gr2m
96
14k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
330
Fireside Chat
paigeccino
42
4k
A Soul's Torment
seathinner
6
3.2k
How to build a perfect <img>
jonoalderson
1
5.8k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Making Projects Easy
brettharned
120
6.7k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
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….