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
9.1k
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
PLaMo 3.0 Primeの構造化出力サポート
pfn
PRO
0
180
AIがコードを書く時代、人間は何を保証するのか———馬場さんと考える、開発者に求められる新しい責任と価値 - TECH PLAY
netmarkjp
0
1.3k
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.1k
Data Hubグループ 紹介資料
sansan33
PRO
0
3.1k
え?フロントエンドエンジニアの ワイがインフラも!?
puku0x
0
260
制約理論(ToC)入門 2026版
recruitengineers
PRO
2
330
ブラウザ研修 2026
recruitengineers
PRO
3
430
20260801_スクフェス大阪
kgnkhkr
1
1.1k
[ChatGPT Work LT]事務作業が苦手な人のための バックオフィスの「半」自動化
chimaki_iot
0
190
Cursor Meetup Sapporo - Cursor物語 続編
cocacola917
0
120
データ組織の転換期 一足飛びしない段階的戦略
leveragestech
PRO
0
150
Amazon Bedrock Managed Knowledge BaseDive Deep
ren8k
0
400
Featured
See All Featured
Writing Fast Ruby
sferik
630
63k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.2k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
650
AI: The stuff that nobody shows you
jnunemaker
PRO
9
870
Optimising Largest Contentful Paint
csswizardry
37
3.9k
GitHub's CSS Performance
jonrohan
1033
470k
The SEO identity crisis: Don't let AI make you average
varn
0
520
Java REST API Framework Comparison - PWX 2021
mraible
34
9.6k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
280
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….