$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DroidKaigi2016 アプリを Xamarin に移植した話 #jxug
Search
amay077
May 07, 2016
Programming
1
4.6k
DroidKaigi2016 アプリを Xamarin に移植した話 #jxug
JXUGC #13 東京 緊急開催 Xamarin のすべて! -
http://jxug.connpass.com/event/29734/
の発表資料です。
amay077
May 07, 2016
Tweet
Share
More Decks by amay077
See All by amay077
愛知県新型コロナ対策サイト(非公式)の紹介
amay077
0
320
愛知県コロナ対策サイトが立ち上がってから
amay077
0
110
Xamarin.Forms Hot Reload のススメ
amay077
0
890
クロスプラットフォームモバイルアプリ開発ツール総ざらい2019 〜Titanium Mobile から Kotlin/Native まで〜 #droidkaigi
amay077
11
10k
ハムスター検出器を1日で作ってみた #NGK2018B
amay077
1
1.1k
App Center から Azure Pipeline に乗り換えた話
amay077
0
1.4k
Xamarin.Forms.GoogleMaps について
amay077
0
1.5k
Xamarin.Android で始めるクロスプラットフォームモバイルアプリ開発 #jaghama
amay077
0
660
Xamarin.Android で始めるクロスプラットフォームモバイルアプリ開発 #jxug
amay077
0
970
Other Decks in Programming
See All in Programming
Developing static sites with Ruby
okuramasafumi
0
310
マスタデータ問題、マイクロサービスでどう解くか
kts
0
110
AI時代を生き抜く 新卒エンジニアの生きる道
coconala_engineer
1
370
ViewファーストなRailsアプリ開発のたのしさ
sugiwe
0
510
AI 駆動開発ライフサイクル(AI-DLC):ソフトウェアエンジニアリングの再構築 / AI-DLC Introduction
kanamasa
10
2.9k
Python札幌 LT資料
t3tra
6
980
Graviton と Nitro と私
maroon1st
0
120
Microservices rules: What good looks like
cer
PRO
0
1.6k
Cell-Based Architecture
larchanjo
0
140
dotfiles 式年遷宮 令和最新版
masawada
1
800
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
160
AtCoder Conference 2025「LLM時代のAHC」
imjk
2
550
Featured
See All Featured
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
29
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
100
Rebuilding a faster, lazier Slack
samanthasiow
85
9.3k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
94
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
61
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
180
The Limits of Empathy - UXLibs8
cassininazir
1
190
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.3k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
40
Transcript
DroidKaigi2016ΞϓϦΛ Xamarin ʹҠ২ͨ͠ ɹ ɹ ɹ ɹ - 2016/05/07 #JXUG
13 - @amay077 1 © @amay077 , 2016
ࣗݾհ • OKUYAMA Hironobu(@amay077) • Toyohashi, Aichi • Geospatial Engineer
• VB/VC('00-), C#('05-), Android/iOS('11-), Xamarin('13-) • BUILD Insider - XamarinٯҾ͖Tips 2 © @amay077 , 2016
DroidKaigi2016 ͷެࣜΞϓϦΛ Xamarin.Android Ҡ২ͨ͠ Λ͠·͢ • Android SDKͷബ͍ϥούʔ XamarinωΠςΟϒ ͷͰ͢
• Xamarin.Forms Ͱ͋Γ·ͤΜ • MVVM ͱ͔ɺiOSଞͱͷڞ௨Խͷ͠·ͤΜ • ࠷৽ͷ Android ΞϓϦ͕Ͳ͜·Ͱ Xamarin Ͱ։ൃՄೳ͔ʁ 3 © @amay077 , 2016
DroidKaigi2016 ͱ • droidkaigi.github.io • ΤϯδχΞ͕ओͷAndroidΧϯϑΝϨϯε • 2/18-19ɺ౦ژۀେֶ • ࢀՃऀ600ਓ(2Ͱച)ɺ45ηογϣϯ
ࠃAndroidΞϓϦ։ൃऀඞௌඞݟͷษڧձ 4 © @amay077 , 2016
DroidKaigi2016 ެࣜΞϓϦ ͱ • github.com/xamarinhq/app-evolve • εϐʔΧʔ/ελοϑͷ @konifar ͞Μ ͕ओಋ͠༗ࢤʢ
40໊ʂ ʣʹΑΓ։ൃ • ։ൃظؒɿ1/11ʙ2/12ʙ now • 6ը໘ɺ70Ϋϥεɺ4200ߦ(2/18࣌) Androidք۾ͷτοϓΤϯδχ Ξୡ͕࡞ͨ͠ݟͷմʂ 5 © @amay077 , 2016
AndroidΞϓϦΛ Xamarin.Android Ҡ২͢Δํ๏ • ը໘ • ॲཧ(Java) • ϥΠϒϥϦ
6 © @amay077 , 2016
ը໘ • ը໘ϨΠΞτɺը૾ɺจࣈྻϦιʔεͦͷ··ྲྀ༻Մೳ • activitymain.xml -> activitymain.axml • Android Data
Binding ͷ <layout> ͳͲɺ৽͍͠λάআ͕ඞཁ 7 © @amay077 , 2016
ࠨ:Java ӈ:Cˌ 8 © @amay077 , 2016
AndroidManifest.xml Xamarin.Android ʹ͓͍ͯɺը໘ͷ AndroidManifest.xml ͷఆ ٛෆཁ • <activity> ͷఆٛɺ XXXActivity
Ϋϥεͷଐੑ • <application> ͷఆٛɺ XXXApplication Ϋϥεͷଐੑ • ݖݶͷఆٛ AndroidManifest.xml ʹ͢Δ͕ Xamarin Studio/ Visual Studio ͷઃఆը໘͔Βߦ͑Δ 9 © @amay077 , 2016
// [BEFORE]AndroidManifest.xml in Java <application android:name=".MainApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme">
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="${mapsApiKey}" /> <activity android:name=".activity.MainActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:label="@string/app_name" android:theme="@style/AppTheme.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 10 © @amay077 , 2016
// [AFTER]MainActivity.cs [Activity( ConfigurationChanges = ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.ScreenLayout
| ConfigChanges.ScreenSize | ConfigChanges.Orientation, Label = "@string/app_name", Theme = "@style/AppTheme.NoActionBar", MainLauncher = true)] [IntentFilter (new []{ Intent.ActionMain }, Categories = new []{ Intent.CategoryDefault })] public class MainActivity : AppCompatActivity { // ... } 11 © @amay077 , 2016
// [AFTER]MainApplication.cs [Android.App.Application( AllowBackup=true, Icon="@mipmap/ic_launcher", Theme="@style/AppTheme")] [MetaData("com.google.android.gms.version", Value = "@integer/google_play_services_version")]
[MetaData("com.google.android.maps.v2.API_KEY", Value = "{your google maps api key}")] public class MainApplication : Android.App.Application { // ... } 12 © @amay077 , 2016
ॲཧ • جຊతʹॻ͖͠ • ߏจࣅͯΔͷͰίϐϖͯ͠ΤϥʔΛফͯ͘͠ • Sharpen ͱ͍͏πʔϧ https:/ /blog.xamarin.com/android-in-c-
sharp/ ͋Δ͚ͲࠓͰ͑Δͷ͔ͳʁ • ໘ͩͬͨΒػೳ୯ҐͰ Jar Խͯ͠ɺBinding ܦ༝Ͱ༻ͨ͠ํ ͕Α͍͔ 13 © @amay077 , 2016
ϥΠϒϥϦ • Android ΞϓϦ։ൃʹ(ओʹΦʔϓϯιʔεͷ)ϥΠϒϥϦͷ༻ ෆՄܽ • Android StudioҎ߱ɺgradle ʹΑΓϥΠϒϥϦͷ༻ɾཧ͕ख ܰʹʢnugetΈ͍ͨͳΜʣ
DroidKaigiΞϓϦͰ 27 ͷϥΠϒϥϦΛ༻ Xamarin.AndroidԽʹ͓͚Δ Ұ൪ͷน 14 © @amay077 , 2016
ϥΠϒϥϦҠߦͷબࢶ 1. ಉػೳΛ࣋ͭ .NETͷϥΠϒϥϦ Λ୳͢ 2. ಉ໊ͷ BindingϥΠϒϥϦ Λ୳͢ 3.
ಉػೳΛ࣋ͭ BindingϥΠϒϥϦ Λ࡞Δ 4. ಉػೳΛ࣋ͭ .NETͷϥΠϒϥϦ Λ࡞Δ 5. ಉػೳΛ͖͋ΒΊΔ 15 © @amay077 , 2016
.NETͷϥΠϒϥϦ Λ୳͢ • Gson → JSON.NET • RxJava → Reactive
Extensions • Dagger2 → Stiletto • Retrofit2 → Refit ୳͢ͱ݁ߏ͋Δ twitter teratail, Stackoverflow.jp ͳͲͰฉ͍ͯΈΑ͏ حಛͳਓ͕୳ͯ͘͠ΕΔ͔͠Εͳ͍ ʛш´)ŧŽŕ 16 © @amay077 , 2016
ಉ໊ͷ BindingϥΠϒϥϦ Λ୳͢ • Android Support Library / Google Play
services • Picasso → Square.Picasso • AndroidFlowLayout → AndroidFlowLayout ɹ ஶ໊ͳϥΠϒϥϦͳΒطʹ XamarinରԠͷnugetύοέʔδ͕༻ҙ ͞Ε͍ͯΔʢಛʹViewؔ࿈Binding͔͠બࢶ͕ͳ͍ͷͰʣ Android Support Library ؔ࿈ҰඞͣϋϚΔͷͰམͪண͍ͯ 17 © @amay077 , 2016
BindingϥΠϒϥϦ Λ࡞Δ • gradle Ͱऔಘ͞ΕͨϥΠϒϥϦ͔Β xxx.jar Λൈ͖ग़͠ɺ Xamarin.Android ͷ BindingϓϩδΣΫτʹΈࠐΜͰϏϧυ͢Δ
18 © @amay077 , 2016
ಉػೳΛ࣋ͭ .NETͷϥΠϒϥϦ Λ࡞Δ • ཧܥ͚ͩͲ࠷ऴखஈ • جຊతͳػೳͳΒʢJSON.NET ͷΑ͏ʹʣطʹଘࡏ͢ΔͩΖ͏͠ • Binding
Θͳ͍ͱ͍͏͜ͱɺϚϧνϓϥοτϑΥʔϜΛҙ ࣝͯ͠ͷબͩΖ͏͠ɺқ૬ߴ͍ • ʮҠ২͚ͩʯͷ༧ࢉͰ͍͠ͱࢥ͏ • ClosedXML, EPPlus Έ͍ͨͳͷΛ Xamarin ରԠ͢Δͷχʔζ͋ Δͱࢥ͏ʢΓқߴ͍ʣ 19 © @amay077 , 2016
ಉػೳΛ͖͋ΒΊΔ ͝ར༻ܭըతʹ • Android-ORM - ORMϥΠϒϥϦ • ସϥΠϒϥϦͱͯ͠ SQLite.NET ORM
͕͋Δ͕ɺ͍ํ͕໘ ͩͬͨͷͰɺKey-Value ετΞͰ͋Δ Akavache Λ༻ • parceler - ը໘ؒ௨৴σʔλͷγϦΞϥΠζΛॿ͚ΔϥΠϒϥϦ • ସϥΠϒϥϦ͕ݟ͔ͭΒͳ͔ͬͨͷͰɺը໘ؒͷ௨৴σʔ λ JSON(JSON.NET) ʹͨ͠ 20 © @amay077 , 2016
Android DataBinding ʹ͍ͭͯ • Android Studio/gradle ͕ɺ<layout> ͰғΜͩൣғͷUIཁૉͷม Λࣗಈίʔυੜ •
͍ΘΏΔ MainForm.designer.cs తͳ • Xamarin.Android ͰະରԠͳͷͰ <layout> λά͕Τϥʔʹ • <layout> Λআ͠ɺಓʹ FindViewById ͨ͠ 21 © @amay077 , 2016
Ҡ২ͷ݁Ռ • github.com/amay077/DroidKaigi2016Xamarin • 2/11 - 2/23ʢਖ਼ຯ̒ؒ͘Β͍ʣ • ຊՈͷ։ൃεϐʔυ͕ૣ͗ͯ͢࠷৽ػೳͷ࣮·Ͱ͍͚ͭͣ •
buggy... Xamarin ͰϞμϯͳ AndroidΞϓϦ͕։ൃͰ͖ Δ͜ͱ͕֬ೝͰ͖ͨ 22 © @amay077 , 2016
·ͱΊ • ը໘ͱॲཧ • ྗٕͰҠ২Մೳ • ϥΠϒϥϦ • ཁ݅ʹԠͨ͡બ͕ඞཁ ͍ͣΕʹͯ͠
Android ΞϓϦ։ൃͷࣝඞਢ 23 © @amay077 , 2016
ͭ·ΓٻΊΒΕΔͷ… 24 © @amay077 , 2016
εʔύʔXamarinਓࡐʂ 25 © @amay077 , 2016
26 © @amay077 , 2016
ʲ͓·͚ʳ͞·͟·ͳΧϯϑΝϨϯεΞϓϦ 27 © @amay077 , 2016
Google I/O 2015 App • github.com/google/iosched • Android ͷΈରԠ •
I/O 2016 App ͦͷ͏ͪ͘Δʁ 28 © @amay077 , 2016
try! Swift App • github.com/tryswift/trySwiftApp • iOS ͷΈରԠ • 3/2-4
ʹ։࠵͞ΕͨiOS/Swiftσϕϩο ύʔ͚ΠϕϯτͷެࣜΞϓϦ 29 © @amay077 , 2016
Xamarin Evolve 2016 App • github.com/xamarinhq/app-evolve • Android / iOS/
Windows ରԠɺ࠷ڧײ͋Δ 30 © @amay077 , 2016