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
Android Studioプラグインを作ってみよう 〜Compose for Desktop...
Search
k-tomoyasu
October 26, 2023
Programming
1
640
Android Studioプラグインを作ってみよう 〜Compose for Desktopで始めるプラグイン開発〜
2023年10月26日(木)開催のpixiv App Nightで発表した資料です。
k-tomoyasu
October 26, 2023
Tweet
Share
More Decks by k-tomoyasu
See All by k-tomoyasu
MRAID広告の実装から見るWebViewとアプリ間のインタラクション実装
fusuma0325
0
63
Coroutinesを中心としたAndroidアプリでの並行数制限・排他制御
fusuma0325
0
130
Kotlin Multiplatform Projectで社内用APIクライアントを作る
fusuma0325
0
2.1k
Kotlin/Nativeで作ってみるCLI, iOSアプリ
fusuma0325
1
140
Redashアラートの最近 - カスタマイズ機能を作った話
fusuma0325
0
830
Other Decks in Programming
See All in Programming
Introduce Hono CLI
yusukebe
6
3k
kiroとCodexで最高のSpec駆動開発を!!数時間で web3ネイティブなミニゲームを作ってみたよ!
mashharuki
0
830
TransformerからMCPまで(現代AIを理解するための羅針盤)
mickey_kubo
4
1.8k
Devoxx BE - Local Development in the AI Era
kdubois
0
130
アメ車でサンノゼを走ってきたよ!
s_shimotori
0
230
CSC305 Lecture 06
javiergs
PRO
0
270
Android16 Migration Stories ~Building a Pattern for Android OS upgrades~
reoandroider
0
130
CSC305 Lecture 09
javiergs
PRO
0
300
実践Claude Code:20の失敗から学ぶAIペアプログラミング
takedatakashi
16
6.5k
デミカツ切り抜きで面倒くさいことはPythonにやらせよう
aokswork3
0
250
Range on Rails ―「多重範囲型」という新たな選択肢が、複雑ロジックを劇的にシンプルにしたワケ
rizap_tech
0
6.7k
Webサーバーサイド言語としてのRustについて
kouyuume
0
3.5k
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.1k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.7k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
190
55k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
BBQ
matthewcrist
89
9.8k
Product Roadmaps are Hard
iamctodd
PRO
55
11k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.9k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Optimizing for Happiness
mojombo
379
70k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Transcript
2023/10/26 fusuma Android StudioϓϥάΠϯΛ࡞ͬͯΈΑ͏ ʙCompose for DesktopͰ࢝ΊΔϓϥάΠϯ։ൃʙ
ࣗݾհ • fusuma(;͢·) • ϐΫγϒגࣜձࣾ • pixivίϛοΫͷAndroidΞϓϦ։ൃ
Android StudioϓϥάΠϯ • Android StudioͷػೳΛ֦ு͢Δ༷ʑͳϓϥάΠϯ͕ެ։͞Ε͍ͯΔ • ։ൃͷੜ࢈ੑΛ্ͤͯ͘͞ΕΔ X(چTwitter)MeetͷίϝϯτͰ օ͞Μ͕Α͘͏ϓϥάΠϯΛڭ͍͑ͯͩ͘͞
εΫγϣิॿͷϓϥάΠϯΛ࡞ͬͨ • Android UiTheme Screenshot • εΫϦʔϯγϣοτิॿ • ϓϧϦΫʹషΔ༻ͳͲΛఆ •
ςʔϚΓସ͑ɾεΫγϣɾϦαΠζ ΛϫϯϘλϯͰ
σϞ
ϓϥάΠϯ։ൃ͍ͯ͘͠ ※հͨ͠ϓϥάΠϯͷ࣮ͷৄࡉʹ৮Ε·ͤΜ (ίʔυGitHubʹஔ͍͍ͯ·͢) https://github.com/k-tomoyasu/Android-UiTheme-Screenshot
Android StudioϓϥάΠϯΛ࡞Γ͍ͨ • Android StudioIntelliJϕʔεͷIDE • جຊతʹIntelliJϓϥάΠϯ • ଟ͘ͷIntelliJϓϥάΠϯAndroid StudioͰͦͷ··͑Δ
• IntelliJϓϥάΠϯ։ൃͷυΩϡϝϯτΛΈͯਐΊΔ https://plugins.jetbrains.com/docs/intellij/developing-plugins.html • ͍͔ͭ͘Android Studio͚ͷઃఆ͕͋Δ • Android Studioʹґଘͨ͠ػೳ͕ͳ͚Εෆཁ
։ൃڥ • ݴޠ: Kotlin | 1.9.10 • ։ൃ: IntelliJ IDEA
(Community Edition) | IC-232.10072.27 • ಈ࡞֬ೝ: Android Studio Giraffe | 2022.3.1 Patch 2 • ϓϥάΠϯ͕Android Studioʹͳ͍ػೳʹґଘͯ͠͠·͍ͬͯͯ։ ൃதʹؾ͚Δ(σϑΥϧτͩͱಈ࡞֬ೝ࣌ʹ։ൃͰ͍ͬͯΔIDE ͕ىಈ͞ΕΔ)
ϓϩδΣΫτ࡞ • File > New > Project ͔ΒIDE PluginΛબ •
࡞ͨ͠εέϧτϯϓϩδΣΫτʹAndroid Studio͚ͷઃఆΛՃ͑Δ
resouces/META-INF/plugin.xml ϓϥάΠϯͷઃఆ
build.gradle.kts ϓϥάΠϯͷϏϧυઃఆ
version.setͱAndroid Studioͷޓੑ • ࢦఆ͢ΔIntelliJ IDEAͷόʔδϣϯλʔήοτͱͳΔAndroid Studioͱޓੑ͕͋Δͷʹ͢Δ • ઌ΄Ͳͷྫͷ version.set(“2022.3.3”) ͷ෦
• IntelliJ IDEAͱAndroid StudioͷόʔδϣϯͷରԠΛ·ͱΊͨϖʔδ͕͋Δ • ࢦఆͨ͠IDEAͷόʔδϣϯ͕Android StudioͷͲͷόʔδϣϯͱޓੑ͕͋Δ͔֬ೝͯ͠ɺόʔδϣ ϯΛ߹ΘͤΔ
ϓϥάΠϯͷಈ࡞֬ೝ • Run PluginͰϓϥάΠϯ͕Πϯετʔϧ͞ΕͨAndroid Studio͕ىಈ
None
ϓϥάΠϯΛݺͼग़͢: ActionΛྫʹ • Action: ϓϥάΠϯΛݺͼग़͢खஈͰɺ࠷Α͘ΘΕΔ • ϝχϡʔπʔϧόʔ͔Β࣮ߦ͞ΕΔΑ͏ʹઃఆͰ͖Δ • AnActionΫϥεΛܧঝͨ͠ΫϥεΛ࣮͠ɺݺͼग़͠ͷτϦΨʔΛ plugin.xmlʹఆٛ͢Δͱ͍͏ྲྀΕ
None
resouces/META-INF/plugin.xml
දࣔ͞Εͨ
ϓϥάΠϯͷUI࣮ • ϓϥάΠϯͷUI࣮ʹSwingΛ͏ • Swing: JavaͰఏڙ͞Ε͍ͯΔGUIϑϨʔϜϫʔΫ • μΠΞϩά࣮ͷྫ(࣍εϥΠυ)
None
None
SwingɺΘ͔Βͳ͍ ※ Swing͕ѱ͍Θ͚Ͱͳ͍Ͱ͢
಄Ͱհͨ͠ϓϥάΠϯͰ
͜͜ΛComposeͰ࣮ ಄Ͱհͨ͠ϓϥάΠϯͰ
ComposeͰUIΛ࣮Ͱ͖Δ
Compose for Desktop • Compose MultiplatformͷҰ෦ • Jetpack Compose ͷ
API Λ༷ʑͳϓϥοτϑΥʔϜʹద༻ • Swingͱ૬ޓӡ༻͢ΔͨΊͷAPI͕͋ΓɺΈ߹Θͤͯ͑Δ • ϓϥάΠϯͷUI࣮ʹར༻Ͱ͖Δ • SwingΛΘͳ͘ͳΔΘ͚Ͱͳ͍ • Composeͱͷ͗ͪΖΜɺSwingͷ࣮Λ͍͍ͨ໘͋Δ
None
None
None
Before: Swing
After: Compose
ϓϥάΠϯUIɺ͍͚ͦ͏ͳؾ͕͢Δ
Compose for DesktopΛ͏४උ • IntelliJͰCompose MultiplatformͷϓϥάΠϯΛΠϯετʔϧ • Preview͕͑Δ(ͨͩ͠Previewͷߋ৽खಈ)
ґଘؔͷهड़ build.gradle.kts
ComposeͰ։ൃ͢Δ४උ͕Ͱ͖ͨ
IDEͷ৭ͱ߹͍ͬͯͳ͍
ͳΒจࣈΛന͘
จࣈΛന͘……
IDEͷ৭ʹద߹ͤ͞Δ࣮
None
None
࣮ͨ͠ThemeΛద༻
ComposeͰ։ൃ͢Δ४උ͕Ͱ͖ͨ
ϓϥάΠϯؔ࿈APIΛௐΔ • UI͕Composeͩͱͯ͠ɺػೳͷ࣮͢ΔʹϓϥάΠϯؔ࿈ͷAPIʹ ͍ͭͯௐΔඞཁ͕͋Δ • υΩϡϝϯτ͔Β୳͢……͚ͩͩͱେม • ࢀߟʹͳΔίʔυΛ୳͢ • Γ͍ͨ͜ͱʹ͍ۙطଘͷϓϥάΠϯ͔Β୳͢
• Android Studioͷ࣮͔Β୳͢
• ϓϥάΠϯͷઃఆը໘ʹ͋ΔϦϯΫ͔ΒḷΔͷָ͕ طଘͷϓϥάΠϯ͔Β୳͢
ιʔείʔυ͕ެ։͞Ε͍ͯͨΒɺ͔͜͜ΒḷΓண͚Δ
Android Studioͷ࣮͔Β୳͢ • Android Studioʹόϯυϧ͞Ε͍ͯΔϓϥάΠϯ͔Β୳͢ • ιʔείʔυ͕ެ։͞Ε͍ͯΔ https://github.com/JetBrains/android •
AndroidϓϥάΠϯͷґଘΛઃఆ͍ͯ͠ΔͷͰɺAndroid Studioͷ࣮ Λར༻͢Δ͜ͱͰ͖Δ
Android Studioͷ࣮͔Β୳͢ • Android StudioͷWebP ConverterΛىಈ͢Δ
Android Studioͷ࣮͔Β୳͢
ެ։ • JetBrainsͷΞΧϯτ͕ඞཁ • ࡞ۀυΩϡϝϯτͷखॱ௨ΓͰOK https://plugins.jetbrains.com/docs/intellij/publishing-plugin.html 1. GradleλεΫbuildPluginͰΞοϓϩʔυ͢ΔzipΛੜ 2.
JetBrains Marketplaceͷϖʔδ͔Β৹ࠪఏग़ 3. ೋӦۀͷʹ৹͕ࠪྃͯ͠ެ։։࢝
ɹϓϥάΠϯ։ൃͰ Compose for DesktopΛಋೖͨ͠ॴײ
Compose for DesktopͰͷϓϥάΠϯ։ൃͷॴײ • ؾʹͳͬͨ • ϓϥάΠϯͷϑΝΠϧαΠζ͕େ͖͘ͳΔ • SwingʹރΕٕͨज़ͷ҆৺ײ͕͋Δ •
Compose for DesktopͰෆ۩߹Β͖͠ͷΛ౿ΜͩΓɺະ࣮ͷͷ͕͋ͬͨΓ • Swingͱͷ૬ޓӡ༻͕ࠓޙൃల͍͔ͯ͘͠Ͳ͏͔ • ྑ͍ • ಈతʹมԽ͢Δཁૉ͕ଟ͍UIͷ࣮ʹڧ͍ • ComposeͷࣝΛ͑Δ • ϨΠΞτͷํ๏ඪ४తͳίϯϙʔωϯτͷ͍ํ͕͔ΔϝϦοτେ͖͍ • ָ͍͠
Compose for DesktopͰͷϓϥάΠϯ։ൃͷॴײ • ߴ͍҆ఆੑଟ͘ͷϢʔβʔʹΘΕΔͷΛٻΊΔͳΒؾ߹͕ඞཁͦ͏ • ಛʹUI͕؆ૉͰ͋ΕSwing͕ແ • ComposeΛ͍͍ͨؾ͕࣋ͪڧ͍/ͱΓ͕͋͑ͣࣗ͏༻ͷϓϥάΠϯ Λ࡞Γ͍ͨͳΒ👍
• ͱʹ͔͘AndroidΤϯδχΞʹͱͬͯऔ͖͍ͬ͢ͷັྗ
ࢀߟ • IntelliJ Platform SDK (ެࣜυΩϡϝϯτ) • Android Studio Plugin
• JetBrains/compose-multiplatofrm ϦϙδτϦ (pluginͷαϯϓϧ) • JetBrains/android (Android Studio࣮) • pbreqult/adb-idea • AndroidͰϥΠτ/μʔΫϞʔυͷεΫγϣΛshellΛୟ͚ҰׅͰࡱӨͰ͖ΔΑ͏ʹͯ͠Έͨ | Qiita • Compose for DeskopͰ࢝ΊΔAndroid։ൃޮԽπʔϧͷ࡞ | Speaker Deck