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
Gradle-Plugin-in-2026.pdf
ryunen344
1
120
せめて、ネイティブらしく
ryunen344
2
3.1k
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
450
わかった気になる、Coroutine1.7.0のチャンネルのパフォーマンス向上
ryunen344
0
470
Other Decks in Technology
See All in Technology
OAuth SPIFFE Client Authentication(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
410
ブラウザで変わるID連携(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
430
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
20k
承認ゲートは何を守っているのか? AIエージェントの自律購入を実測した結果
yama3133
1
100
Genie Code ワークショップ 基礎編 / Genie-Code-Workshop-fundamental
databricksjapan
PRO
0
220
DMMブックスのNext.js化を加速させるAI活用 / Migrating DMM Books to Next.js with AI
kentarom
1
260
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.5k
Bet AI Day 2026丨バクラク Autopilot、業務システムの再設計
layerx
PRO
1
320
『自分で判断できるか』を基準に、プロダクトのハンズオン研修でAI利用の線を引いてみた / Where We Drew the Line on AI in Hands-on Training
honyanya
1
590
Microsoft MVP プログラムを紹介するから目指す人増えてくれ
tsubakimoto_s
0
160
【Oracle AI Spotlight ウェビナー】AWSか、Azureか、Google Cloudか。その議論にオラクルを含める意義。
oracle4engineer
PRO
1
140
AIレビュー時代に必要なのは、SLOで引く撤退ライン
nobuoooo
0
160
Featured
See All Featured
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
310
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
630
Making Projects Easy
brettharned
120
6.7k
Bash Introduction
62gerente
615
220k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Rails Girls Zürich Keynote
gr2m
96
14k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.3k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Scaling GitHub
holman
464
140k
Building an army of robots
kneath
306
46k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
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….