$30 off During Our Annual Pro Sale. View Details »

DroidKaigi2016 アプリを Xamarin に移植した話 #jxug

DroidKaigi2016 アプリを Xamarin に移植した話 #jxug

JXUGC #13 東京 緊急開催 Xamarin のすべて! - http://jxug.connpass.com/event/29734/ の発表資料です。

amay077

May 07, 2016
Tweet

More Decks by amay077

Other Decks in Programming

Transcript

  1. DroidKaigi2016ΞϓϦΛ
    Xamarin ʹҠ২ͨ͠࿩
    ɹ
    ɹ
    ɹ
    ɹ
    - 2016/05/07 #JXUG 13
    - @amay077
    1 © @amay077 , 2016

    View Slide

  2. ࣗݾ঺հ
    • OKUYAMA Hironobu(@amay077)
    • Toyohashi, Aichi
    • Geospatial Engineer
    • VB/VC('00-), C#('05-), Android/iOS('11-), Xamarin('13-)
    • BUILD Insider - XamarinٯҾ͖Tips
    2 © @amay077 , 2016

    View Slide

  3. DroidKaigi2016 ͷެࣜΞϓϦΛ
    Xamarin.Android ΁Ҡ২ͨ͠࿩
    Λ͠·͢
    • Android SDKͷബ͍ϥούʔ XamarinωΠςΟϒ ͷ࿩Ͱ͢
    • Xamarin.Forms Ͱ͸͋Γ·ͤΜ
    • MVVM ͱ͔ɺiOSଞͱͷڞ௨Խͷ࿩͸͠·ͤΜ
    • ࠷৽ͷ Android ΞϓϦ͕Ͳ͜·Ͱ Xamarin Ͱ։ൃՄೳ͔ʁ
    3 © @amay077 , 2016

    View Slide

  4. DroidKaigi2016 ͱ͸
    • droidkaigi.github.io
    • ΤϯδχΞ͕ओ໾ͷAndroidΧϯϑΝϨϯε
    • 2/18-19ɺ౦ژ޻ۀେֶ
    • ࢀՃऀ600ਓ(2೔Ͱ׬ച)ɺ45ηογϣϯ
    ࠃ಺AndroidΞϓϦ։ൃऀ͸ඞௌඞݟͷษڧձ
    4 © @amay077 , 2016

    View Slide

  5. DroidKaigi2016
    ެࣜΞϓϦ ͱ͸
    • github.com/xamarinhq/app-evolve
    • εϐʔΧʔ/ελοϑͷ @konifar ͞Μ
    ͕ओಋ͠༗ࢤʢ 40໊ʂ ʣʹΑΓ։ൃ
    • ։ൃظؒɿ1/11ʙ2/12ʙ now
    • 6ը໘ɺ70Ϋϥεɺ4200ߦ(2/18࣌఺)
    Androidք۾ͷτοϓΤϯδχ
    Ξୡ͕࡞੒ͨ͠஌ݟͷմʂ
    5 © @amay077 , 2016

    View Slide

  6. AndroidΞϓϦΛ Xamarin.Android ΁
    Ҡ২͢Δํ๏
    • ը໘
    • ॲཧ(Java)
    • ϥΠϒϥϦ
    6 © @amay077 , 2016

    View Slide

  7. ը໘
    • ը໘ϨΠΞ΢τɺը૾ɺจࣈྻϦιʔε౳͸ͦͷ··ྲྀ༻Մೳ
    • activitymain.xml -> activitymain.axml
    • Android Data Binding ͷ ͳͲɺ৽͍͠λά͸࡟আ͕ඞཁ
    7 © @amay077 , 2016

    View Slide

  8. ࠨ:Java ӈ:Cˌ
    8 © @amay077 , 2016

    View Slide

  9. AndroidManifest.xml
    Xamarin.Android ʹ͓͍ͯɺը໘ͷ AndroidManifest.xml ΁ͷఆ
    ٛ͸ෆཁ
    • ͷఆٛ͸ɺ XXXActivity Ϋϥεͷଐੑ΁
    • ͷఆٛ͸ɺ XXXApplication Ϋϥεͷଐੑ΁
    • ݖݶͷఆٛ͸ AndroidManifest.xml ʹ͢Δ͕ Xamarin Studio/
    Visual Studio ͷઃఆը໘͔Βߦ͑Δ
    9 © @amay077 , 2016

    View Slide

  10. // [BEFORE]AndroidManifest.xml in Java
    android:name=".MainApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">

    android:name=".activity.MainActivity"
    android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
    android:label="@string/app_name"
    android:theme="@style/AppTheme.NoActionBar">






    10 © @amay077 , 2016

    View Slide

  11. // [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

    View Slide

  12. // [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

    View Slide

  13. ॲཧ
    • جຊతʹ͸ॻ͖௚͠
    • ߏจ͸ࣅͯΔͷͰίϐϖͯ͠ΤϥʔΛফͯ͘͠
    • Sharpen ͱ͍͏πʔϧ΋ https:/
    /blog.xamarin.com/android-in-c-
    sharp/ ͋Δ͚ͲࠓͰ΋࢖͑Δͷ͔ͳʁ
    • ໘౗ͩͬͨΒػೳ୯ҐͰ Jar Խͯ͠ɺBinding ܦ༝Ͱ࢖༻ͨ͠ํ
    ͕Α͍͔΋
    13 © @amay077 , 2016

    View Slide

  14. ϥΠϒϥϦ
    • Android ΞϓϦ։ൃʹ(ओʹΦʔϓϯιʔεͷ)ϥΠϒϥϦͷ࢖༻
    ͸ෆՄܽ
    • Android StudioҎ߱ɺgradle ʹΑΓϥΠϒϥϦͷ࢖༻ɾ؅ཧ͕ख
    ܰʹʢnugetΈ͍ͨͳ΋Μʣ
    DroidKaigiΞϓϦͰ͸ 27 ͷϥΠϒϥϦΛ࢖༻
    Xamarin.AndroidԽʹ͓͚Δ Ұ൪ͷน
    14 © @amay077 , 2016

    View Slide

  15. ϥΠϒϥϦҠߦͷબ୒ࢶ
    1. ಉ౳ػೳΛ࣋ͭ .NET੡ͷϥΠϒϥϦ Λ୳͢
    2. ಉ໊ͷ BindingϥΠϒϥϦ Λ୳͢
    3. ಉ౳ػೳΛ࣋ͭ BindingϥΠϒϥϦ Λ࡞Δ
    4. ಉ౳ػೳΛ࣋ͭ .NET੡ͷϥΠϒϥϦ Λ࡞Δ
    5. ಉ౳ػೳΛ͖͋ΒΊΔ
    15 © @amay077 , 2016

    View Slide

  16. .NET੡ͷϥΠϒϥϦ Λ୳͢
    • Gson → JSON.NET
    • RxJava → Reactive Extensions
    • Dagger2 → Stiletto
    • Retrofit2 → Refit
    ୳͢ͱ݁ߏ͋Δ
    twitter ΍ teratail, Stackoverflow.jp ͳͲͰฉ͍ͯΈΑ͏
    حಛͳਓ͕୳ͯ͘͠ΕΔ͔΋͠Εͳ͍ ʛш´)ŧŽŕ
    16 © @amay077 , 2016

    View Slide

  17. ಉ໊ͷ BindingϥΠϒϥϦ Λ୳͢
    • Android Support Library / Google Play services
    • Picasso → Square.Picasso
    • AndroidFlowLayout → AndroidFlowLayout
    ɹ
    ஶ໊ͳϥΠϒϥϦͳΒطʹ XamarinରԠͷnugetύοέʔδ͕༻ҙ
    ͞Ε͍ͯΔʢಛʹViewؔ࿈͸Binding͔͠બ୒ࢶ͕ͳ͍ͷͰʣ
    Android Support Library ؔ࿈͸Ұ౓͸ඞͣϋϚΔͷͰམͪண͍ͯ
    17 © @amay077 , 2016

    View Slide

  18. BindingϥΠϒϥϦ Λ࡞Δ
    • gradle Ͱऔಘ͞ΕͨϥΠϒϥϦ͔Β xxx.jar Λൈ͖ग़͠ɺ
    Xamarin.Android ͷ BindingϓϩδΣΫτʹ૊ΈࠐΜͰϏϧυ͢Δ
    18 © @amay077 , 2016

    View Slide

  19. ಉ౳ػೳΛ࣋ͭ .NET੡ͷϥΠϒϥϦ Λ࡞Δ
    • ཧ૝ܥ͚ͩͲ࠷ऴखஈ
    • جຊతͳػೳͳΒʢJSON.NET ͷΑ͏ʹʣطʹଘࡏ͢ΔͩΖ͏͠
    • Binding ΋࢖Θͳ͍ͱ͍͏͜ͱ͸ɺϚϧνϓϥοτϑΥʔϜΛҙ
    ࣝͯ͠ͷબ୒ͩΖ͏͠ɺ೉қ౓͸૬౰ߴ͍
    • ʮҠ২͚ͩʯͷ༧ࢉͰ͸೉͍͠ͱࢥ͏
    • ClosedXML, EPPlus Έ͍ͨͳͷΛ Xamarin ରԠ͢Δͷ͸χʔζ͋
    Δͱࢥ͏ʢ΍͸Γ೉қ౓͸ߴ͍ʣ
    19 © @amay077 , 2016

    View Slide

  20. ಉ౳ػೳΛ͖͋ΒΊΔ
    ͝ར༻͸ܭըతʹ
    • Android-ORM - ORMϥΠϒϥϦ
    • ୅ସϥΠϒϥϦͱͯ͠ SQLite.NET ORM ͕͋Δ͕ɺ࢖͍ํ͕໘
    ౗ͩͬͨͷͰɺKey-Value ετΞͰ͋Δ Akavache Λ࢖༻
    • parceler - ը໘ؒ௨৴σʔλͷγϦΞϥΠζΛॿ͚ΔϥΠϒϥϦ
    • ୅ସϥΠϒϥϦ͕ݟ͔ͭΒͳ͔ͬͨͷͰɺը໘ؒͷ௨৴σʔ
    λ͸ JSON(JSON.NET) ʹͨ͠
    20 © @amay077 , 2016

    View Slide

  21. Android DataBinding ʹ͍ͭͯ
    • Android Studio/gradle ͕ɺ ͰғΜͩൣғͷUIཁૉͷม
    ਺Λࣗಈίʔυੜ੒
    • ͍ΘΏΔ MainForm.designer.cs తͳ
    • Xamarin.Android Ͱ͸ະରԠͳͷͰ λά͕Τϥʔʹ
    • Λ࡟আ͠ɺ஍ಓʹ FindViewById ͨ͠
    21 © @amay077 , 2016

    View Slide

  22. Ҡ২ͷ݁Ռ
    • github.com/amay077/DroidKaigi2016Xamarin
    • 2/11 - 2/23ʢਖ਼ຯ̒೔ؒ͘Β͍ʣ
    • ຊՈͷ։ൃεϐʔυ͕ૣ͗ͯ͢࠷৽ػೳͷ࣮૷·Ͱ௥͍͚ͭͣ
    • buggy...
    Xamarin Ͱ΋Ϟμϯͳ AndroidΞϓϦ͕։ൃͰ͖
    Δ͜ͱ͕֬ೝͰ͖ͨ
    22 © @amay077 , 2016

    View Slide

  23. ·ͱΊ
    • ը໘ͱॲཧ
    • ྗٕͰҠ২Մೳ
    • ϥΠϒϥϦ
    • ཁ݅ʹԠͨ͡બ୒͕ඞཁ
    ͍ͣΕʹͯ͠΋ Android ΞϓϦ։ൃͷ஌ࣝ͸ඞਢ
    23 © @amay077 , 2016

    View Slide

  24. ͭ·ΓٻΊΒΕΔͷ͸…
    24 © @amay077 , 2016

    View Slide

  25. εʔύʔXamarinਓࡐʂ
    25 © @amay077 , 2016

    View Slide

  26. 26 © @amay077 , 2016

    View Slide

  27. ʲ͓·͚ʳ͞·͟·ͳΧϯϑΝϨϯεΞϓϦ
    27 © @amay077 , 2016

    View Slide

  28. Google I/O 2015 App
    • github.com/google/iosched
    • Android ͷΈରԠ
    • I/O 2016 App ΋ͦͷ͏ͪ͘Δʁ
    28 © @amay077 , 2016

    View Slide

  29. try! Swift App
    • github.com/tryswift/trySwiftApp
    • iOS ͷΈରԠ
    • 3/2-4 ʹ։࠵͞ΕͨiOS/Swiftσϕϩο
    ύʔ޲͚ΠϕϯτͷެࣜΞϓϦ
    29 © @amay077 , 2016

    View Slide

  30. Xamarin Evolve 2016 App
    • github.com/xamarinhq/app-evolve
    • Android / iOS/ Windows ରԠɺ࠷ڧײ͋Δ
    30 © @amay077 , 2016

    View Slide