Together, we will discover Android Things and see how we can create a machine capable of detecting and exterminating Reptilians. How? Using a Raspberry Pi, an Arduino, and using specific Android Things APIs, such as GPIO, PWM, and others allowing us to interact with external peripherals.
Android Things is an extension of Android designed to enable developers to build high quality, secure devices, and maintain them at scale. While this description is accurate, it does not reflect how fun it is to develop your own IoT devices, powered by Android. This talk will give you an introduction to Android Things development, and show you step by step how you can build fun projects, such as an 8-bit piano made of beer cans, an LED chainsaw, a remote-controlled catapult, a manically depressed robot, and some other ideas.
So you've got a Google Home device, some really cheap LED light bulbs, and wonder how you can integrate those seamlessly in your home, so you can simply talk to the Google Assistant to change the light color in your living room... That's what we will see today, first doing some slight retro-engineering with an Arduino to understand how those light bulbs work, and then creating an Android Things and an Actions on Google project to control those.
XamarinのMonoチームが開発しているプロジェクトのひとつに、Android StudioやXcodeから.NETやXamarinのライブラリを利用できるEmbeddinator-4000というものがあります。Xamarin.AndroidやXamarin.iOSを使わなくてもC#のコードが再利用できる仕組みです。 本セッションでは、このEmbeddinator-4000を使って、Android StudioからC#のコードを再利用する方法を説明し、またその技術的背景を解説します。 技術的背景の説明はある程度の技術知が必要かもしれません(monoやXamarinに関する前提知識はあまり求めません)。Android開発者が関心をもちそうなトピックは、Javaと他言語(今回の場合はMono/.NET)の相互運用の部分です。Xamarinの低レベルの仕組みもある程度解説することになると思います。 セッションの構成(予定) - Embeddinator-4000とは(Xamarin.Androidとの違いなど) - Embeddinator-4000の使い方 - 技術的背景の解説 - 組み込みmono - Androidとの相互運用
このセッションでは、Kotlin v1.1から登場したcoroutinesについて基礎から実践的な内容までを解説します。 coroutinesとは何かから始め、非同期処理を同期的に記述するasync/awaitパターンやactorやChannel/selectを用いた並行プログラミングについて紹介します。 また、Androidアプリに実際に組み込む際にあたっての注意や設計指針、RxJavaとの関係についてもお話します。
Google presented EmojiCompat as a way to provide emoji compatibility for older devices, but does it solve all the issues developers have with emojis? On this talk, you will learn about the different pitfalls developers face when dealing with Emoji, like different Emoji interpretations, code points, the Fitzpatrick modifiers and shortnames, as well, I will show you alternatives to EmojiCompat. In this talk you will learn: What are the problems developers face with Emoji. How Emoji works. How to use EmojiCompat including dynamic font downloading. What is EmojiCompat not solving! And how to fix it. What alternatives are there to EmojiCompat. ..and of course everything in Kotlin! After this talk, you will be an Emoji expert, no longer afraid of □□□ (missing Emoji) !
Have you ever got a crash because you did something wrong with a Fragment? I did, many times! Fragments are not easy to use, and many experts even recommend to avoid them. But what is the alternative? We tried Conductor, we liked it and I am going to show you what can you do with it. In this talk you will learn: The basics of Conductor: Routers and Controllers. Conductor and the new Architecture Components from Google. Navigation from Controller to Controller. Handling configuration changes with Controllers. Retaining views vs. recreating them. Running espresso tests on a single Controller. ...and of course everything in Kotlin! By the end of the talk you will want to start using Conductor on your next project!
Firebase Notifications can be confusing, there are different ways to implement them and not all behave the same. When you are targeting Android, iOS devices and browsers the one-size-fits-all solution from the tutorials won’t be enough for you, instead, you will need to dig deeper into the API to get the best of it. We went through that learning process and in this talk you will learn our tips and tricks. In this talk you will learn: What can you do (and not) with the Notifications console. How to properly handle cloud messages on Android. The difference between the Notification and Data object. Customizing cloud messages for your needs. Using the new Android O notification features. Keeping things separated between Android, iOS and web browsers. This talk is aimed for Android developers and architects willing to integrate the cloud messaging services on your apps. After it, you will be able to integrate cloud messaging even on your personal projects without effort.
このセッションでは、Androidアプリでよく使用されるDIフレームワークであるGoogle Dagger、特にAndroid向けのサポートを行うdagger.androidモジュールについて解説します。 dagger.androidモジュールはAndroid開発におけるDaggerのボイラーテンプレートを減らしてくれる強力なツールです。一方、生成されるコードが様々な処理を肩代わりしてくれるため、ブラックボックス感が強くなっています。 実際にDagger2が生成するコードを紐解きながら内部でどのような処理が行われているのかを紹介した上で、AndroidでよくあるシチュエーションにおいてどのようにDagger2を使用していけばいいのかのベストプラクティスを解説します。
Implementing OAuth authentication on your app is the key for the app to succeed. However, it is not easy to correctly implement OAuth that includes handling revocation and re-authentication of tokens properly. In this session, I first explain how to implement OAuth authentication and re-authentication method at token invalidation using OkHttp. Next, as a more important topic, I will explain how to write androidTest to ensure that these are definitely working.
近年のAndroidデバイスには多くのセンサーが組み込まれるようになった。Googleはこれらのセンサーを活用してActivityRecognitionというユーザーの行動認識APIをAndroidフレームワークで提供した。 ユーザーの行動を認識することによって、アプリケーションプロバイダは適切なタイミングで適切な内容のコンテンツを提示することができるようになる。 例えば車を運転中であれば、車やドライブに関する情報である。 このActivityRecognitionを実用的に活用するためには、その認識精度が非常に重要になる。誤認識が発生するとユーザー離反の原因となり得る。また、ActivityRecognitionのエンジン自体はブラックボックスとなっているため、改善が難しい。 このセッションではActivityRecognitionの基本的な利用方法を説明し、現状の認識精度を調べた結果を報告する。さらに、複数のセンサーデータをシミュレーションし、精度向上のヒントとなる情報を探る。最後に実用的なActivityRecognitionの利用方法を説明する。
お客様の中に「RxJava?名前はよく聞くけど、実際のプロダクトに導入するところまでは踏み切れていない」という方はいらっしゃいますでしょうか? RxJava にとっつきにくさを感じるのであれば、まずは具体的な使い方から覚えてみるのはいかがでしょう。 このセッションではライブラリとしての RxJava の使い方にフォーカスし、実際のコードを基に、以下を説明します。 - そもそも、 RxJava を使うと何がうれしいのか? - RxJava を使った簡単な非同期処理はどう書くのか? - 既存の非同期処理は RxJava でどう置き換えられるのか? ほか
Android SDK にはせっかく WebView という部品があるので、ブラウザアプリを作ってみたいと思う方もいらっしゃると思います。このセッションでは、ゼロからブラウザアプリを作る際に何が必要なのか、どうやって実装するといい具合になるのかを説明していきます。 - そもそもブラウザ自作して何が楽しいのか? - Web 検索機能 - タブブラウジング - メモリ
Android アプリを使っていて「この機能どうやって作っているんだろう?」と思ったことはありませんか?また、数十MBのアプリに「いったい何が入っているんだろう?」と疑問に思ったことはありませんか? Android アプリの中身はわりと簡単に覗き見することができます。 このセッションではAndroid アプリのAPK の中身を覗き見する方法を紹介し、実際に中身を見てみます。面白い発見があるかもしれませんよ?
Android開発における難しさの一つに、Activityが突然死するというものがあります。「縦横回転をしたらActivityが再生成されて本気で困った」という経験はAndroidエンジニアであれば誰しもが通る道です。 AndroidManifestに画面のオリエンテーションを指定する等してこういった問題を回避する方法はよく知られていますが、実はこの方法は本質的な解決には全くなっておらず、グローバルな市場を相手にアプリを作っていると「ちょっと画面が切り替わっただけでActivityがkillされる低スペック端末」というものに出会ったらお手上げだったりしてしまいます。 本セッションでは、そんなActivity再生成に耐えうるためのtips、さらに、もっと本質的にこの問題を解決していくためのアーキテクチャの組み方をご紹介します。具体的には、MVVMパターンで組んだアーキテクチャにRxJava2とDagger2を適用することで、Activity再生成がいつ起きても全く怖くない状態を作る方法をご紹介します。 さらにArchitectureComponentsの活用法についても言及する予定です。
Android開発でDIといえばDagger2が有名ですが、そもそも何のためにDIを使うのか?という所に立ち返り、Dagger2を使うモチベーションや基本的な使い方を解説し、「何となく雰囲気で使ってます」という方 (割と多い印象) のモヤモヤを、このセッションで全て晴らします。 またDIというと "Unit testを作りやすくする手段" として注目されがちですが、こちらに関しても、実例を交えながら、すぐに普段の業務に取り入れる事ができるプラクティスを紹介します。
※Elastic = 伸縮自在な・弾力性のある [内容] Androidアプリ開発において生じる問題を解決するために行ったチームビルディングについて話します。 [対象者] ・Globalメンバー(英語ベース)を含めた多様性のあるチーム作りに興味がある方 ・中・大規模の組織で開発プロセス上におけるステークホルダーが多く困っている方 ・会社のiOSファーストの意思決定に困っている方 ・Androidエンジニアの採用に苦労している方 問題例) ・外国人メンバーとのコミュニケーション ・無名スタートアップにおける採用の難しさ ・iOSファースト ・ビジネスの成長 VS 技術負債解消
kotlinの特徴的な機能の1つとしてある「Null-Safety」ですが私達プログラマはその恩恵を正しく活用できているのでしょうか?今一度、「Null-Safety」が何なのかを見直してより安全なコードを書けるようにしましょう。
Google I/O 2017 で Android アプリ開発において Kotlin の正式サポートが発表されました。モダンな言語によるアプリ開発を安心して行えるようになる一方、既にリリースされているアプリへはどのように Kotlin を導入していったら良いのかハッキリしていません。そこでこのセッションでは継続して開発を行っているアプリへの Kotlin 導入と、メリット、デメリット、チームへの浸透、コードレビューなどについての知見を共有したいと思っています。
Google I/O 2017 にて、Kotlin が Android アプリの開発言語として公式サポートされることになりました。 これにより、既存の Java コードを Kotlin に自動変換する機能を使っている方も多いのではないかと思います。 しかしながら、自動変換後の Kotlin コードは、まだまだ Kotlin の利点を活かし切れていないコードになっていることがほとんどです。 本セッションでは、Java から Kotlin に自動変換した後の Kotlin コードを、さらに Kotlin の利点を活かしたコードに修正していくポイントを紹介します。
A story about how we are doing it at Agoda with a team of 40 Android developers on a single repository with 80% of test coverage and 900 automation tests. This talk about the project structure and team structure, how to work together and dont break things.
私が作成したチャットアプリで使用したFirebaseの機能をどのような方法で実装してどのような動きをするかを話そうと思います。
USB接続するアプリを開発した経験がある方はいらっしゃいますでしょうか?ほぼいらっしゃらないですよね。このセッションでは今後みなさんに役立つかどうかはわかりませんが、USB接続してデータのやりとりをするアプリを開発した時の事をお話します。 USB接続するための基礎的な部分をまず説明したのちに、実際にどのように開発・デバッグを進めていったか。ハマりどころについてお話していきます。 詳細な内容としては以下の通りです。 # USB接続を扱う時の基礎知識 ## Accessory modeと Host mode - 今回はAccessory modeでUSB接続するアプリを作りました ## 基本的な使い方の説明 ## USB接続周りの権限は特殊 # USB接続するアプリの開発 ## どんなUSB接続するアプリを作ったか? ## ハードウェアがまだ出来ていない時にどうやって開発していたか? ## USB接続しているのでデバッグが大変 ## ハマりどころ - ActivityでしかUSB接続を検知出来ない - 特定の機種でとある条件でUSB接続のイベントが飛んでこない - close処理を忘れるとUSBを抜き差ししないと二度接続が出来ない - 物理的にはささっているけど、USBのDETACHEDとATTACHEDが連続して呼ばれてしまう
Android が搭載されたスマートフォンは非常に多く、開発者としても選択肢に悩むところです。昔と比べて魔改造された端末は減ってきているとはいえ、あまねく全ての想定するバージョンの Android が搭載された端末で、確実に開発したアプリを動作させられるかは運次第です。1 アプリの事例を元に、開発をスムーズに行うための端末の選び方などをお話できればと思います。
Dialogflow(旧:API.AI)は自然言語処理を提供するプラットフォームです。基本的なDialogflowの使い方と、Android アプリにチャットボットを構築する方法をご紹介します。 対象者 - 自然言語処理をAndroidアプリに導入したい方 - 既存のAndroidアプリにチャットボットを導入したい方 - 自然言語処理が全くわからないけど使ってみたい方 内容 - 基本的なDialogflowの使い方 - Androidアプリに導入する方法
Offline capability of your app let users use it conveniently regardless of location or network connectivity. In this session, I will explain how to create an stress-free application by obtaining the latest information when you are online and displaying the previously acquired data smoothly when offline by using RxJava and simple SQLite with layered architecture. I will NOT cover databases that are offline supported as they are, such as Firebase Realtime Database and Realm.
Android Auto は、Lollipop の登場とともに発表されたスマートフォンと自動車をつなぐ比較的新しい仕組みです。現在着々と市販車のカーナビシステムに組み込まれてきており、かつスマートフォン単体でも Android Auto が動作するようにもなっています。今後アプリが自動車内にいるユーザとのエンゲージメントを得るためには、Android Auto について知っておくことは大きなアドバンテージになるはずです。 本セッションでは、Android Auto そのものの概要やそのフレームワークがもつ API の紹介から、Android Auto が生まれる経緯を踏まえつつフレームワークがどのように構築されているか、Android Auto を支えている技術を深掘りして見ていきます。その上で、フレームワークを使うときの注意点やノウハウ、また注意点・ノウハウの Android Auto 以外での一般的な応用を考察します。
このセッションでは、Android (Kotlin)と比較しながらiOS (Swift)のアプリを作ってみます。 Androidでも使われているアーキテクチャ、ライブラリがiOSにおいてはどれに対応するのか、同じように使えるのか、何が違うのかを検討します。 また、Androidと違って、iOSではどんなところがつらいのかについても取り上げます。 日頃Androidアプリを開発しているが、開発リソースの問題でiOSもやらなきゃいけなくなった!とか、Androidアプリはある程度作れるようになったので、iOSアプリにもチャレンジしてみたい!なんて思ったことはないですか?実際挑戦してみるとiOSにはiOSの辛みがあってうまく進まないこともあるかと思います。 AndroidエンジニアのみなさんのiOSに対する挑戦のハードルを下げて、iOSの開発に挑戦したくなってもらうのがこのセッションのゴールです。 取り扱う内容 (予定) - SwiftとKotlinは似ているのか - よく似たUI Component - ConstraintLayoutとAutoLayout - REST API Client Library - JSON Decoding - Codableへの誘い - RxJavaとRxSwift - Dependency Injection - Push Notification - testing - iOS開発のつらみと対処法
Rx (Reactive Extensions) is a breakthrough of handling and composing multiple asynchronous tasks with its flexible API and straightforward way of error-handling. However, the huge amount of operators of RxJava might seem to be overkill for a beginner trying a little bit. In this session I will explain what RxJava is quite briefly and then introduce some of the practical APIs that I often use in practice. I will also cover the Rx's schedulers for efficient concurrent execution.
Unit testing enhances the quality of your app and makes it more resistant to changes. In this session, I will introduce the method of writing unit tests according to the method of test-driven development and its merits.
JUnit5 is now GA! In this session, I will briefly introduce the usage and migration guide of JUnit 5 in Android development, and its merits.
■対象 ・データバインディングに興味がある人、使っている人 ・データバインディングを使っているが、もっと効率のいい書き方をしたい人 ■概要 データバインディングが公開されて以来、開発者の間で徐々に普及しつつあるように思います。findViewByIdやButterKnifeの代わりとして使うだけでも十分便利なデータバインディングですが、カスタム属性の追加やビューへの通知機能を持つコレクションクラスなどもっと多くの機能があります。 本セッションでは、データバインディング未経験者・初心者向けに、より日常の開発が便利になる使い方をいくつか紹介します。BindingAdapter / InverseBindingAdapterなどXML属性を増やす仕組みや、データバインディング利用時のリストやアニメーションの扱いなど、実践的な内容を紹介します。最後に、データバインディングを使う前提での設計のコツやKotlinではどう書くかといった話も紹介します。 ■アジェンダ(予定) ・双方向バインディング ・BindingAdapter / InverseBindingAdapterの作り方 ・RecyclerViewとObservableListの連携 ・アニメーションとの連携 ・MVVMとデータバインディング ・Kotlinでデータバインディングを書く ・データバインディングを使うときの個人的なコツ
■対象者 ・CI/CDをこれから導入したい人 ・他社のCI/CDの運用事例に興味がある人 ■概要 アプリ開発において、CIやCDを導入することで日々のタスクを自動化したり、テストを自動化して品質を担保したりすることはとても大事です。しかし、特にAndroidアプリにおいてはCIサーバーでのビルドが遅かったり、メモリの制約が厳しかったりと導入にあたってのハードルが高い/安定して稼働させるのが難しいと感じている開発者も多いのではないでしょうか。 本セッションでは、私が現職で実施しているCI/CDの事例を紹介します。CIサーバーの選択肢の紹介から、中盤以降はCIサービスとしてCircleCI 2.0を採用し、チーム内での開発版の配布、テスト自動化、Google Playへのリリース自動化まで幅広く紹介します。皆様の日々の開発の一助になれば幸いです。 ■発表内容(仮) ・CIサーバーの比較 ・CircleCI 2.0の導入 ・開発版をチームに配布しよう ・テストを自動化しよう ・単体テスト ・UIテスト ・Firebase Test Lab ・リリースを自動化しよう ・他のwebサービスと連携しよう
Android provides a hook point to read metadata from source at build time and generate code based on it. The generated code is complete Java source code, and therefore it is more secure and high performance than using the Reflection API. This session will explain how to generate source code using javapoet. In addition, I will introduce examples of what source code generation is suitable for practical use, and also explain what it can not be done.
Though Canvas is one of Android's oldest APIs, its usefulness never goes away as of 2017. Canvas can do anything like a Swiss Army Knife - drawing, deformation, scaling, coloring of figures and text. In this session, I will introduce practical usage of the Canvas API by taking a complex View that can not be expressed with Android's standard components, such as tiling a huge image and changing the image according to the magnification rate as an example.
Do you want to send patches to Kotlin? Do you want to know what the best practise of Kotlin development? Do you want JetBrains to list your name in Kotlin blog? This is the talk for you! This talk will explain how to send patches to Kotlin (mainly Kotlin plugin) repository as an external contributor. The expected audience should know the followings: * Git/GitHub * Kotlin syntax The expected outlines are followings: * Setup development environment * Communicating with other developers * Developing one of Kotlin plugin features * Implementing unit tests * Sending a pull request After this talk, you will be ready to send pull requests to one of the best computer languages in the world!
Androidアプリを開発していると、アプリの中にグラフや表を表示したい、複雑な独自のUIを表示したいという要望を受けることがあります。 オープンソースのライブラリで良いものがあれば、そちらを使えば良いのですが、オープンソースで公開されているライブラリの中に要件に合致するものが無かったり、既存のコンポーネントを組合せることで実現可能だがパフォーマンスが出ない、などといった場合には自作のカスタムビューでそれを実現する手段を持っておくと非常に役立ちます。 このセッションでは、そもそもViewがスクロールできるとはどういうことかという話から始めて、View内部でスクロールを実現するためのミニマムな実装について、コードを示しながら一つずつ説明していきます。 ■ セッションの構成(予定) - 基本的なカスタムビューの作り方のおさらい - そもそもViewがスクロールできるとはどういうことか - スクロール可能なViewのタッチハンドリング - カスタムビューの一部だけをスクロールするには - スクロールが可能なViewGroupの中でView内のスクロールを正常に動作させる ほか
自分の関わるAndroidのアプリ開発ではマルチモジュールな作り方を実践しています。 その中で得られた知見を共有します。 下記がagenda(仮)です。 - マルチモジュールに分けた動機 - メリット - デメリット - 技術的な実現方法 - ハマりポイント & 気をつける場所 - 途中からマルチモジュール化する - etc
■対象者 ・AndroidエンジニアだがWearについてはよく知らないという方 ・Wear用のアプリ開発に興味のある方 ・Androidエンジニアとして何か新しい機能を提案やサービスを提案、開発したいと考えている方 ■概要 Android Wear2.0で実現出来る機能とUIコンポーネントの紹介から具体的な実装方法、実装時の注意点やプラクティスなどを実際にWear用アプリを開発・リリースした経験を元にお話しします。 現状、Android Wear開発に関する情報や知見は日本語のみならず英語でもあまり存在しない状態で、Android Wear自体の機能や魅力なども十分に伝わっていない状態ですが、だからこそまだまだ可能性やチャンスがたくさんある分野だと思うので、具体的な知見を共有する事でAndroid Wear対応アプリの開発ハードルを下げると共にAndroid Wearの魅力をお伝えし、いろいろなアイデアを実現するきっかけが作れればと考えています。 ■アジェンダ(仮) ・Android Wearの基礎知識 ・Wear2.0で実現出来ること ・Wear向けアプリの種類 ・Wear用UIコンポーネントの紹介と実装方法 ・Wearアプリ開発時のハマりどころなど
■対象者 ・モバイルエンジニアとしてのキャリアを考えている学生や新人プログラマなど。 ・エンジニアとしてどんなふうに仕事や学習と向き合っていくか悩んでいる方。 ・他人の人生のエモい話が聞きたい方。 ■概要 小中不登校→通信制高校中退→高卒認定→専門学校卒という学歴の話者が、Androidエンジニアとして就職し、フリーランスを経てフィンテックベンチャーに転職するまでの約5年間に何を意識し、どんな行動をしてきたのか、その中で学んだ事や経験した事などをお話します。 モバイルエンジニアという比較的新しい職種の中で、どのように勉強していけば良いか、どのような働き方があるのかなど、よく分からないという方もいるのではないでしょうか。 そのような方や、これからAndroidエンジニアとして就職を考えている学生の方などに、一つの参考例としてちょっと変わった経歴の自分の知見が少しでも役に立てば良いなと思っています。 ■アジェンダ(仮) 自身の半生を紹介しながら、その時々に悩んでいたことや不安に思っていたこと、取り組んでいたこと、それが環境の変化と共にどう変わっていくのかをお話します。 また、モバイルエンジニアからみたフリーランスという働き方についてもお話出来ればと思います。 ・経歴の話 ・何もなかった頃の話 ・専門学校時代と就活の話 ・新卒時代の話 ・転職失敗と挫折 ・フリーランス時代の話 ・フリーランスについて ・フリーランスになる方法 ・フリーランスのメリット・デメリット ・前へ進むために心がけていること ・学習の仕方 ・エンジニアとして一目置かれるためのいくつかのこと ・自分が大切だと思っていること(まとめ)
■対象者 ・流行りにのってMVPっぽい設計にしたがあまりメリットが感じられていない人 ・MVPやCleanArchitectureを採用したがテストが書けていない人 ・設計やテストについて他社の事例や知見が知りたいと思っている人 ■概要 CleanArchitectureを採用し、なんとなくPresenterを作ってみたけれど、Activityとの役割が曖昧で、コードが二箇所に分散しただけでかえってメンテしにくくなってしまった...。そんなプロジェクトに心当たりのある方も多いのではないでしょうか? このセッションでは話者が数年間試行錯誤した経験を元に、Model-View-Presenterアーキテクチャを採用したアプリをどのように改善し、よりよい設計にしていくかについての知見を紹介します。 また、Presenterに対してMockitoなどを使ったテストを有効に書くための手法やTipsなども紹介したいと思います。 ■アジェンダ(仮) ・MVPアンチパターンと改善例 ・MVPでテストを書く ・Presenterのテストの書き方 ・テストライブラリを活用する ・テストのリファクタリング ・テストのガイドラインを定める ・Presenterを整理する ・ドメインモデルを厚くする ・テンプレートクラスを自動生成する
JUnit 5 constitutes the next major evolution of the most popular unit testing framework for programming languages on the JVM. JUnit has been embraced by developers for decades now, and continues to amaze with a revised architecture built from the ground up in version 5. This talk aims to give an introduction to the motivations, architecture and intricacies behind evolving beyond the well-known JUnit 4, and gives an overview of the new features provided by its successor. Attendees will come to embrace the versatility of aspects like dynamic test generation, new APIs for expressive test case declaration, as well as the elaborate backwards compatibility agenda enforced by JUnit 5, which allows for consistent and gradual migration for existing test suites. Finally, the advantages of early adoption for Android developers specifically are presented by introducing the audience to a third-party Gradle plugin, which enables any Android project to profit from what will eventually become the future de-facto standard for unit testing.
GraphQLを使ったAndroidアプリ開発についての話をします。 GraphQLはアプリとサーバの連携を行なう比較的新しい仕様になります。 GraphQLの実装の1つであるApolloを使用して開発を行った経験を元に、RESTful APIとの比較、Firebase Databaseとの比較を交えながら、GraphQLの特徴やメリット、デメリットを紹介します。
■概要 Android Wearでは、時計の盤面を変更することができます。その時計の盤面というのがWatch Faceと呼ばれるものです。 Watch Faceは、Android Wearを利用する上でユーザーの目に最も触れる機能です。 Android WearのWatch Faceは単純に日時を表示するだけではなく、歩数や天気などの小さな情報も表示できます。 このセッションでは、Android WearのWatch Faceに関連するAPIや、それを利用したWatch Faceの実装方法、そしてWatch FaceをPlayストアに公開する方法などについてお話します。 ■対象者 - Android Wearアプリ開発に興味がある人 - Android WearアプリのWatch Faceに興味がある人 - Androidアプリ開発をある程度やったことのある人 ■目次案 - Watch Faceとは - Watch Faceに関連するAPIについて - Watch Face API - Complications API - Watch Faceを作ってみよう - Android Wearアプリのデバッグ方法 - Watch Face APIを利用して時計を描画する - Complications APIを利用してWatch Faceに小さな情報を表示する - Watch Faceの設定画面を用意する - Watch Faceを公開しよう - Android Wearアプリ単体で公開する - Android Wearアプリを既存アプリのAPKに含める - Android Wearアプリの審査について
DIを利用することによるメリットは多くの開発者に浸透しているものと思います。 AndroidアプリケーションでDIを行う場合その仕組みを一から自作することはまれで、多くの場合Dagger2を利用しているのではないでしょうか。 Dagger2は高機能・高パフォーマンスなDIコンテナとしてデファクトスタンダードの地位を築いていますが、高機能ゆえに使うためのセットアップが複雑で面倒なものになりがちです。 本セッションで紹介するToothpickは、多くのアプリケーションが使う機能に絞ることでセットアップをシンプルにしつつも速度においてはDagger2にひけをとらないものになっています。 本セッションでは、このToothpickについて詳しく解説するとともに、具体的なコードでその使い方を紹介します。
Android Instant Apps に対応するときの手順や Instant App と Installed App で異なるデータソースを利用する際のモジュールの設計、そのほかの Tips について発表します。
AndroidではSpeechRecognizerを利用することにより気軽に音声認識が利用できる。 一方で世の中にはGoogleCloudSpeech, Nuance, AlexaなどのAndroidデバイスで利用可能な多くの音声認識サービスが存在する。 本セッションでは、それぞれの音声認識エンジンをAndroidで利用できるように実装し、実環境における音声認識率評価実験を行い、その評価結果報告する。 評価実験には下記環境を用意する。 まず環境雑音のない音声を特定の残響環境下で収録する。 その際、音声はアナウンサーのようなはっきりとした音声と、日常会話のような音声2種類を用意する。読み上げるテキストは短いものから長いもの、スピードも遅いものから速いものを用意する。 その後、大通り沿い、車内、飲食店内などの環境雑音を収録し、上記のクリーンな音声に加算する。 それぞれの雑音加算済み音声データに対して、防音室において各音声認識エンジンに認識させる。
React NativeのAndroidランタイム実装を参考に、外部スクリプトからAndroid APIを呼び出しアプリを構成する方法を解説します。
このトークでは、AOP (Aspect Oriented Programming) を Android アプリに取り入れる方法についてお話をします。 AOP の内容については「ユースケースによるアスペクト指向ソフトウェア開発」という書籍に準拠します。 # トピック(仮) - AOP とは? - AspectJ について - Kotlin で AspectJ を使って AOP する方法 - AOP を取り入れた結果
GitHub API v4 が GraphQL になるなど、最近注目されてきている GraphQL。 Android で用いる場合は apollo-android を使うのが主流になってきており、Kotlin もサポートされています。 ですが、実プロダクトで導入されている事例はまだ少ないと思っています。 そこで本トークでは、実プロダクトへの導入実績を元に、 - apollo-android を始めとするライブラリ等の導入と気をつけるべき点 - ユニットテストについて - キャッシュ等のパフォーマンス面について - GraphQL を導入してよかった点、苦労した点 をお伝えできればと思います。
2017年10月現在、絶賛開発中のプロダクトでは、Android アプリをデザイナーと Android エンジニア1人ずつで開発を進めています。ツールは主に Zeplin を使いながら最速かつ高クオリティなアプリのリリースを目指しています。 本トークではその事例を中心に、効率よくデザインを実現するために「エンジニアがデザイナーのことを考えて」実行したこと、その結果をお伝えできればと思います。 # トピック(仮) - 開発体制 - デザイナー→エンジニア視点はあるけど逆はあまりない? - デザイナーとエンジニアの役割の住み分けは? - Material Design とアプリの世界観を両方守りたいけどどうする? - 結果、現状どうなってる?
Gitのマネジメントプラットフォームでデファクトスダンダードとなっているのは皆さんご存知のGitHubですが, ・社内のセキュリティ規約で github.com は使えない! ・でもGitHub Enterpriseは高すぎる! 等,様々な理由でGitHubを利用できないこともあります. GitLabはいわゆるGitHubクローンであり,基本機能は全て無料で利用可能なオープンソースソフトウェアです. リリース当初の機能不足,パフォーマンスが厳しかった頃もあってその評価を引き摺ることになってしまいましたが,現在ではGitHubにも負けないほど非常に高機能になっています. 特にGitLabはCIやDocker Container Registryも含み,CI面が非常に強力にサポートされており,低コスト・ハイパフォーマンスなCIを実現することができます. 本セッションでは,GitLabの簡単な概要と,コスト感,GitLabでAndroidプロジェクトをCIするテクニックなどを紹介します.
対象者: Android開発してるけどあまり触ったことがない人 これからiOS開発もしないといけない人 そこまでOSの機能を触ったことがない人 ディレクター 概要: iOS, Androidの両方でアプリ開発をする機会が多い中で、「自分が使っているOSの方は詳しく知っているけれど、もう一方には正直詳しくないんだよなぁ...」という人も多いのではないでしょうか。 アプリの機能を作るに当たって、何が出来るのかを把握しておくのは大事です。 少し触っただけでは分からない、細かな機能にまでフォーカスしてお話したいと思います。 内容案: - 基本機能 - 音楽 - 動画 - ファイルの扱い - デフォルトブラウザ など
対象者: iOSとAndroid開発の違いを知りたい人 概要: iOSアプリ開発者がAndroidアプリ開発にも興味を持つ人がいるように、Androidアプリ開発者もiOSアプリ開発に興味を持っている人がいるのではないでしょうか。 今回、普段iOSアプリ開発をしている自分が、お天気アプリのような簡単なアプリを作る上で感じた違いについてお話したいと思います。 iOSもAndroidも両方もどっちも良いなぁと思ってもらえるセッションにしたいと思っています。 内容案: アーキテクチャの選定の違い 標準で提供されているライブラリの大まかな違い 概念の違い アプリ開発時に感じた細かな違い など
■対象者 ・Android初級者〜中級者 ■概要 アプリのユーザーにとって、通知はとても重要な機能です。適切なタイミングで適切な内容を出すことでユーザーの利便性を向上できる一方、過度な通知や見た目の悪い通知を出せばユーザーのアプリへの信頼を損なう恐れもあります。 Googleも通知を重要な機能と捉えているため、Androidの通知APIはOSのバージョンアップのたびに頻繁に更新が入ります。アクションボタン、スタイル、ヘッドアップ通知、スタッキング、チャンネル、etc。新しい機能がバージョンアップのたびに追加されるため、開発者が後方互換性を維持したまま通知機能を開発していくのは大変な作業です。Support Libraryでも一部応されていますが、実際にはバージョンごとに分岐を書かなくてはいけないことも多いのではないでしょうか。 本セッションでは、Androidの通知がどのような変遷を経てきたかを機能ごとに振り返るとともに、ICSからOreo※までをサポートするためにはどういう実装をすればいいか、どのOSの組み合わせて検証すればいいか、他にどこに気をつければいいかを解説します。 ※Support LibraryがICSより古いOSのサポートを切っているため、ICS以前の通知は本セッションのスコープ外とします。
このセッションでは、Javaに無い機能をKotlinがどの様に実現しているのか、Javaが分かれば理解できるレベルで紹介します。 KotlinにはJavaにない便利な機能がたくさんあります。 Data Classes, Extension Functions, Inline Functions, Default Arguments, Named Arguments, Delegation, Properties, Null Safety... それらをKotinがどの様に実現しているのかは必須の知識ではありません。しかし、これらの知識はKotlinで開発して何かに躓いた時に役立つこともあります。Kotlinがどのようなバイトコードへコンパイルされるのか、機能ごとに紹介していきます。
本セッションではKotlin stdlibに用意されている関数の用法と仕組みについて話す予定。 letやapplyなどのスコープ関数、委譲プロパティを利用して遅延評価を行えるlazy、closableのclose忘れを防ぐuse、コレクション操作を容易にするtoやmap, reduce, filterなどKotlin stdlibには便利な関数が多数用意されています。 これらを知ることでJavaで今まで書いていた無駄なコードを省ける事があります。
このセッションでは、今からAndroidアプリ開発を始めるに当たり、2018年において必要となる基礎的な知識や学習のコツを網羅的に紹介します。 対象者はまだAndroidアプリ開発をした事がない初学者や、久しぶりにAndroidやってみようかなという人です。 簡単なサンプルアプリを題材にして、以下のようなトピックに触れます * Android アプリの基礎知識 & 用語解説 * レイアウト * 非同期処理 * ネットワーク通信 * 通知 * 主要なアーキテクチャ * テストとその自動化 * デバッグ方法 * 最低限必要となる各種便利ライブラリ * トレンドのキャッチアップ * etc... このセッションを通じて、スラスラとAndroidアプリが実装できるようなるわけではありませんが、Androidアプリ開発の学習を開始するに当たって必要となる最新の基礎知識を獲得することができます。
Google I/O 2017で発表されたAndroid Architecture Componentを中心に話します。 テストをしやすくするためのアプローチとして、ActivityやFragmentなどのUIを操作するプレゼンテーションとビジネスロジックを分離させるのは有効な方針です。 Android Architecture ComponentはAndroidフレームワーク固有のライフサイクルの問題を配慮しつつ、プレゼンテーションとロジックを分離させ、テスタビリティの高い設計を導入する助けとなるライブラリです。 本セッションは、アーキテクチャによってテスタビリティを向上させるという設計における基本的な課題解決を、Android Architecture Componentを題材に検討するのが目的です。 Android Architecture Componentの基本的な導入方法から、ViewModelを使ったテストの実践までを主題とします。テスト周辺の技術として、Mockitoをつかったテスト方法を取り上げます。 また、Dagger2などのDIについての踏み込んだ解説は予定していません。Android Architecture Componentに含まれるORMのRoomについても主題から離れてしまうため触れる予定はありません。 本セッションは以下のような方をメインの対象と考えます。 - Android Architecture Componentの基本的なコンセプトや導入手法について理解を深めたい方 - MVPやMVVMなどの設計を取り入れることのメリットについて理解を深めたい方 - テストしやすいAndroidアプリの設計について理解を深めたい方
このセッションでは、Fluxアーキテクチャをさらに押し進めたCQRS(コマンドクエリ責務分離)アーキテクチャを、新しくSupport Libraryの仲間入りをしたArchitecture Componentsと共に構築するアプローチを紹介します。 CQRSアーキテクチャは、サーバと通信を行って受け取ったデータを表示する単なるクライアントアプリから、ローカルで様々なロジックを実行するリッチなアプリまで幅広い領域に適用可能な強力なアーキテクチャです。 Clean Architectureを採用したもののドメインモデルが薄くなってしまった経験をお持ちの方や、Fluxで設計してみたがStoreが太るのが気になるといった方は是非聞きに来てください。 1つの解をご提供できるでしょう。
■ 対象者 C/C++を使わないといけない開発者 モバイルゲーム開発者 ■ 概要 Androidのアプリケーション開発において、Android NDK(Native Development Kit)を利用することで、JavaのコードからC/C++のコードを呼びだす事ができます。 「え? Android NDKは知っているけど、使う機会も減ってきたし…。今はほとんどメンテされていないんじゃ…?」と思っている方がいるかもしれません。しかし、Android NDKも、Android Oに対して新しくNative APIが追加するなど、まだまだ進化しつづけています。 このセッションでは、まずAndroid NDKとは何か? どのような機能があるのか?といった基礎的な事から、Android Oで追加されたNative APIsの紹介といった最新事情についてお話していきます。 あとは、ドキュメントに書かれていないようなAndroid NDKの機能、ライブラリの使い方を調べる方法についても共有できればと思います。
何かと近年耳にする「IoT」、その代表的な技術とも言えるBluetooth Low Energy(BLE)は様々なデバイスに用いられており、またそのデバイスと接続するためのアプリも多数開発されています。本セッションでは、BLEを利用したiBeacon/EddyStoneと言ったビーコン技術や、BLEデバイスに接続して操作する技術をAndroidから扱うために必要な知識や、デバッグが困難、コールバック地獄になりがちと言った一般に「つらい」と言われがちなAndroidでのBLE実装のTipsについて、Genuino 101等の開発デバイスを用いてアプリ側、デバイス側両面からお話します。「IoT」がなんとなくでもAndroidのシステムと結びつくというイメージが本セッションを通じて伝われば幸いです。 # 内容 - BLE自体の仕組み - BLEビーコンを扱う際のAndroidでの実装について - Genuino 101等を用いたBLEで接続するデバイスのAndroidでの操作の実装について - 扱いやすいBLE実装をするためのTips # 対象者 - Androidからデバイスを操作することに興味のある人 - AndroidでBLEを使用したことがある/使用している人
“Security theater” is the practice of investing in countermeasures that give a feeling of improved security while doing little to achieve it. Misinformation and misconceptions make developers put effort into practices that do not increase security and add maintenance overhead. Conversely, real security issues are ignored or not given sufficient thought. I plan to outline some of these popular "theatrical" issues and their potential solutions. Security and cryptography are complex topics and it pays to know the correct answer, and not invent incorrect solutions.
[内容] Android Oでは、セキュリティに関する様々な機能に変更が生じています。 Android MのRuntime PermissionやAndroid NのNetwork Security Configのように、目新しいセキュリティ機能という物ではありませんが、アプリの挙動に影響を与える変更も多く存在します。 このセッションでは、公式リファレンスだけではわかりにくい変更点の内容について、解説を行います。 [セッション構成](現在調査中のため、増減する可能性があります) -Runtime Permissionの変更点 -TLS/SSL周りの挙動の変更 -WebView周りの変更点、追加機能 -端末識別子 -提供元不明アプリに関する変更 -etc
リファクタリング、ナビゲーション、ファイルの移動、ビルド・・・、マウスを使って操作していませんか? マウス、トラックパッドは窓から投げ捨ててしまいましょう。 Android Studioの知ってトクするショートカット、便利技100選を紹介します。 明日から開発速度が100倍くらいになる!かもしれません。 なおマウス、トラックパッドを処分する際は自治体の定める方法でお願いいたします。
Androidアプリに地図を導入するならほとんどの人が使用するGoogle Maps Android APIですが、ただピンを立てるだけで終わっていませんか? このセッションではGoogle Maps Android APIがもつ機能(図形の描画、背景地図の変更から、マーカークラスタリングやヒートマップを使う、まで)を30分でひとめぐりします。 さらに、Google Mapsではできないことを "自力で" 実現するために、Google Maps以外の選択肢であるオープンソースの地図ライブラリも紹介します。 地図ライブラリと併せて、使用できる地図データやその作り方についてもお話します。 地図ライブラリを使いこなして、あなたのアプリに最適な地図を提供しましょう!
Shame is the most powerful, master emotion. It’s the fear that we’re not good enough. Vulnerability is about showing up and being seen. It’s tough to do that when we’re terrified about what people might see or think. Brené Brown We live in a society that's motivated by comparison, in a culture in which everything you do is never enough, one in which you are constantly engaging with people using shame, either to shame or to be shamed, and in which making yourself vulnerable – exposing your fears and uncertainties, taking emotional risks - is considered a form of weakness, and something most of us want to run away from. But as an Android developer you cannot run away from being vulnerable. No matter your level, you will be constantly exposed, you are constantly vulnerable. With pull requests, stack overflow (questions or answers), blog posts, talks.. You are being vulnerable. Unfortunately that means you are also more exposed to being shamed, to being told off on how wrong you are, or how little knowledge you have. This kind of behavior can be toxic and can lead to people feeling insecure about themselves (hello impostor syndrome). It's not only you. This is something that affects all of us the moment we decide to be developers. And it has an impact in our growth, our jobs and the way we interact back with the community. I want to explore what shame and vulnerability really are, how we perceive it and how it affect us in the core of our interactions and our job. What makes Android developers vulnerable. Learn the tools we are already using to fight against shaming behaviour, and what we can do in our day to day job to make it even better. With this talk I want everyone to leave the talk knowing they are good enough, they are brave enough, and they can put a stop to toxic behavior we don't realize we do.
There are over 4.600* free libraries that you can integrate inside your Android application. You can find libraries for almost anything you might need when developing an app. From libraries to render emojis in your application to physics engines, you can find a library for anything! Android as a platform can be very flexible, ie. you can do the same thing in different ways. Because of this, Android developers have different opinions on which might be the correct way to do things. We can see this within the libraries, we can find different, and sometimes opposite opinions, about the most essential libraries any Android application should have. When you are a beginner it can be very overwhelming to see so many libraries, and so many different opinions. So, where should you start? Who should you listen to? In this talk first we first try to understand when we should consider using a library. Sometimes we forget the overhead and disadvantages they might bring. After we have understood the pros and cons of using libraries, we will continue to take a look at the most common libraries out there at the moment, and we will try to understand in which conditions the library would be a good fit within your app. And finally, we will have a look at some libraries that could be useful as a development tool in any application. The goal of the talk is to teach people how and when to use a library, to show them why not all libraries fit with any Android application, and that it depends on the context for each one of them. *Based on the free libraries in the Android Arsenal: https://android-arsenal.com/free
Unit testing coverage is a great way to show us the amount of tested lines and branches of code, but is this really enough? The answer is "no" since unit testing coverage does not really fully measure the efficiency of the unit tests. This is why there is a need for having techniques that show unit tests efficiency. Mutation testing is one of these powerful techniques. The main idea of mutation testing is to perform byte code modifications (mutations) to original Android app source code and then run app unit tests to check if they are strong enough to fail as a result of these mutations. This session discusses mutation testing techniques, and demonstrates PIT as a powerful mutation testing tool for Android apps with demos.
MVVM is one of the most common architecture patterns for developing Android apps. However, in order to implement it efficiently, Android developers need to deeply look into Android Lifecycle events for activities (and fragments) and manage resource allocation and de-allocation manually by themselves in order to avoid memory leakage and performance problems. During Google I/O 2017, Google introduced architecture components that facilitates developing Android apps. New Google architecture components include LiveData and ViewModel. This session discusses the best practices of applying MVVM using ViewModel and LiveData for Android apps. It includes a complete demo MVVM app that demonstrates using Android architecture components in action with Dagger 2, Retrofit and Room.
After so many years of hopeless waiting, Mockito 2.x is released to solve many problems that most of the android developers were having in their tests. There are great features of Mockito 2.x which includes mocking final classes and methods, support for Java 8, and Migration from CGLIB to ByteBuddy. But if you are having today large tests written in Mockito 1.x and PowerMock, will it be an easy task to migrate? Unfortunately, it is not a straight forward task since Mockito 2 is not fully compatible with the old behavior of Mockito 1.x. Adding to this complexity, If you are having PowerMock in your old tests, then you will have to face another dimension of complexity since most of PowerMock’s versions are having integration issues with Mockito 2.x. This session goes through the tips and tricks that you need to consider in order to migrate to and utilize Mockito 2.x. It has demos to show migrating Android app Mockito 1.x tests to Mockito 2.x.
Actions on Google is a fascinating platform that allows us to create conversational experiences. These experiences can cater for many use cases, allowing us to build conversation tools using both audio and visual means - allowing us to create interactions which are accessible to many users with different needs. In this session, we’ll be exploring the Actions on Google platform, the components available to use in the Actions SDK and how we can use API.ai to learn how we can create a conversational guitar tutor for Google Actions.
Android Lint was introduced in ADT 16 as a tool to scan for potential bugs. However, Lint itself has been around since the Unix V7 in 1979 as a static analysis tool and adopted by every major programming language over the past 40 years. Well utilized Lint not only prevents common errors such as use of deprecated elements or API calls, but also improves code quality and enforce tailored rules. At the end of this session, audience will walk out with knowledge that reveals the full potential behind Android Lint from the built-in checks and configuration, most updated APIs, UAST Library. And step by step implementation will be shared for one customized check used by production Groupon app (also submitted to the Retrofit Library!). This talk will also cover the difference between Android Lint and other static code analysis tools such as PMD and Findbugs to help you make better decisions on which fits a certain purpose best. Now are you ready to join us and become a Lint Expert?
Why are annotations in Android becoming more and more common over the years and almost all great open source projects uses it as much as possible? Well, not only do they simplify the source code and improve readability, but also help reduce potential bugs by detecting subtle code problems. This session is a feast of annotation starting with basic logistics and some useful tips on how to utilize existing annotations to the fullest extend. And then we will go through the implementation on a customized annotation used in the Groupon production app. From now on you will be able to leave the plumbing to annotation and march forward with your hands free for more work!
Rx and Retrofit each claims itself as the go-to framework for simplifying http tasks in mobile programming. However, which one should you use? Why did we migrated to Rx first and then switched to Retrofit a year later at Groupon? This session will cover the basics for Rx and Retrofit, and present the examples on each for network tasks in production Groupon app as well as how the migration can be realized. After that we will leverage the pros and cons for each so that you will walk out knowing which suits your needs best.
2017年に発表されたARCoreを使って、自作のモデルファイルをAR上に表示する方法をご紹介します。 単純に動かないモデルの表示から、アニメーション付きモデルの表示方法、モデルファイルをインターネット上からダウンロードしての動的表示などを説明します。
In this talk I'll show how you can increase developer productivity of your Android Teams by adding simple debug features to your app, hacking gradle and Android Studio to turn your Devs into Super Heroes who ship much better products faster than ever. Everybody talks about Design, Architectures, Libraries and what not, but, what we often forget is that most of the times quick wins for us as developers can be much more beneficial than tackling large refactors to use the latest technologies available so if we apply the 80-20 rule to our development workflow we can achieve so much more. People with any level of android experience can see this talk.
Clean architecture is a powerful concept that allows us to build maintainable, extendable and thoroughly testable applications. Not only does it create a clear separation of concerns, but this concept can be pushed further by modularising our applications to easily enforce this principle. In this talk, we’ll be looking at how we’ve built our latest Android app at Buffer using clean architecture coupled with architecture components (lifecycle aware components & Room). We’ll be covering how we can utilise this combination to create a well structured, modularised application. And to top it off, we’ll also be learning about the benefits of working in this way and with how we apply testing to all the parts of our app in this new architectural approach.
# 概要 複数の国や地域、あるいは言語に対応する場合に避けられないMulti Locale対応ですが、Android Frameworkのバージョンによってできること・しなくてはならないことが変わって来ます。 各APIでの大きな変化を時系列でまとめてご紹介します。 また、実際にMulti Localeに対応して来た中で遭遇したハマり所とその対策方法・tipsなども共有していきます。 # 対象 Multi Locale (多言語・多地域)対応の知見を得たい、他社の事例が知りたいエンジニアを対象とします。基本的なAndroidの知識はすでにある前提で話します。 特にアプリ内で独自言語設定をするアプリに興味がある方は得られるものが多いかと思います。 # 今のところ想定しているトピック ## Localeの基本的な前提知識 ## API Versionによる変遷 (一部) - JB(4.2) BIDI support - Nougat (7.0) Multi Locale - Oreo(8.0) Separated resources ## 実際に遭遇したハマりどころと対策方法、tips
将来に不安を感じている組み込み系Androidエンジニアのみなさん、あるいは組み込み系出身でWeb系に転身したAndroidエンジニアのみなさん、こんにちは!組み込み系Android(主に通信周り)で数年キャリアを積んだ後Web系Andoirdアプリエンジニアにジョブチェンジして得た知見・感想を共有します! 同じく組み込み系からのジョブチェンジを考えている人にとっては事前に「知って(覚悟して)おいたほうがいいこと」、そして「手を動かしていたほうがいいこと」が得られると思います。また、すでにジョブチェンジした人はニヤニヤしながら心の中で「わかる〜〜!」って言いながら聞いてもらえるトークです : )
Managing states within the Android application is never easy; when you mutate something in one place, and/or another place, and somehow you want to share the mutated value in multiple places, then you find yourself lost and your value never becomes as you expected. In this talk, I'll talk about flux architecture as one of the solid solutions for managing states within Android application; by achieving unidirectional data flow, we aim to think less, focus more on feature development, and scale faster. I'll also show some example implementations with Flux architecture and try to explain pros and cons of choosing flux architecture for Android application development.
Androidのアプリケーション開発においてJavaのソースコードをKotlinに置き換える開発者が多い中で、「Kotlinは可愛い、愛らしい」という声をよく耳にします。 Kotlinの持つ優れた言語設計や便利なAPIは、たしかに多くのAndroidエンジニアを魅了しています。しかし、JavaのソースコードをKotlinへと置き換る作業は、注意して行なうべきです。それは、KotlinがJava言語とは対象的に言語設計レベルでnull非許容であるという理由以外に、本来Javaのソースコードであれば決して行なうことのないような非効率な処理をバイトコードレベルで行なってしまうことにつながりかねないからです。 本セッションでは、JavaのソースコードをKotlinに置き換える上で、Kotlinの可愛さに見とれてしまうことでうっかり低パフォーマンスのソースコードを記述してしまわないために心がけるべきことや、よりパフォーマンス性の高いKotlinの書き方について具体例を交えて発表します。
Kotlinが普及してきたとは言え、テストフレームワークとしてはJUnitが主流です。JUnitは非常に優秀ですが、Kotlinの多様な表現力を活かしきれているとは言えません。本セッションで紹介するSpekは、Kotlinの表現力を活かしたフレームワークでです。 本セッションでは、JUnitと比較しながらSpekを紹介します。さらに、Spekを拡張して独自のDSLを定義する方法やSpekの内部実装についても紹介できればと思います。また、JUnit 5自体にも軽く触れる予定です。 対象者 - Kotlinの中~上級者 - JUnitでのテスト経験者
Googleが提供するプラットフォーム『Firebase』には無料、月額固定制、月額従量制という3種類のプランがあります。このプランはアカウント単位ではなくプロジェクト単位で指定する形になっています。そのため、軽い気持ちで始めたい個人プロダクトや、検証として社内で始めるプロダクトを気軽に有料プランで始めづらい悩ましさがあるのではないでしょうか。もしくは、そもそもやりたいことが無料プランだけで十分かという判断も難しいのかもしれません。 本セッションでは、そんな悩みをもつ方々に向けて、私自身が無料プランで実際に行った数々の利用例を紹介します。この内容が、みなさんにとって利用方法の参考や検討の材料になれば幸いです。 ■ 対象者 * Firebaseがなんなのかはぼんやり知っている方 * 無料プランではできないことを知りたい方 * 他の人がFirebaseをどんな風に使っているかを知りたい方 ■ 対象でない方 * Firebaseの名前さえも知らなかった方 * ゼロからFirebaseの使い方を知りたい方 * Firebaseの有料プランで何ができるか知りたい方 * すでにFirebaseの有料プランでいろいろやっている方 * 悩むことなく有料プランを即決できる環境にいる方 ■ 話す内容 * 社内アプリをRealtime Databaseで構築した際の利点/欠点/悩みどころ * FunctionsとFCMを組み合わせたエラー通知システムの開発 * StorageまたはRealtime Databaseを使った更新通知 * その他 ■ 話さない内容 * Androidをいっさい介さない利用例(HostingによるWebアプリケーション構築に関する知識など) * 有料プランのみで可能な利用方法の詳細な解説
Androidでは複雑なレイアウトを構築するためにRecyclerViewを使うのが一般的です。 しかし、RecyclerViewは機能が多くとても複雑です。パフォーマンスに関しては特に意識せずに作ってもそれなり出るのでつい手を抜きがちです。 しかし、GUIアプリでユーザ体験を高めるためには60fpsを達成することが1つのポイントとなります。そして、RecyclerViewで60fpsを達成するためにはより詳しくRecyclerViewを知ることが必要不可欠です。 この発表では60fpsを達成するために必要なことを順を追って説明します。 - とにかく最初はProfiling。Profilingからボトルネックを探る - Prefetchを使い早期にViewを生成する - DiffUtilを使って差分アップデートをする - 非同期にデータを扱わなければいけない場合 - Glideを使って効率良く画像を読み込む
いまなおAndroidアプリエンジニアは需要に対して供給が不足しています。いつかあなたにも業務でAndroidアプリ開発の声がかかるかもしれません。もしくはあなた自身が今後Androidアプリ開発への挑戦を希望しているのかもしれません。いざそんな日が来た時のために、どんな勉強をすればよいのでしょうか。いろんな方法はありますが、そのひとつとして実際に題材を決めてアプリを作るというものがあります。しかしすべての人が何か作りたいアプリが浮かぶわけではありません。そのうえ、題材によってはバックエンドの開発ばかりしてしまい、肝心のアプリ開発にまったく進められないこともあります。 本セッションでは、多くの一般的なアプリにおける共通点を解説し、そこから考える「はじめてのアプリ開発」として適切ではないかと思われる題材についてを紹介します。 ■ 対象者 * これからAndroidアプリの勉強をはじめようと考えている方 * そろそろ何かアプリを開発したいが、何を作ればよいか浮かばない方 * 社内のアプリ開発研修で、最終的にどんなアプリを作ってもらうべきか悩んでいる方 ■ 対象でない方 * 業務以外で自分が作りたいアプリをいくつも抱えている方 ■ 話す内容 * 「よくあるアプリ」とはどんなものか * 研修・勉強に向かないアプリの題材 * お勧めしたい題材 * 開発の進め方 ■ 話さない内容 * フレームワークの選定、アーキテクチャやパターンなどの設計部分に関する解説など
HotSpotVMを参考に、ガーベージコレクションの仕組みについてゼロから初心者向けにご紹介致します。 CFP提出時点では、Androidの開発は行ったことがないので、そちらを話に盛り込めるかはわかりません。
CFP提出時点ではAndroidアプリ開発未経験の私が、DroidKaigiにスピーカーとして参加するためにAndroid開発を始めた話について、お話します。 発表内容としては、社内に準備されているAndroidエンジニア向けの課題アプリをScala or Kotlinで作って、つまづいたところをメインにお話します。 また、iOSエンジニアからの視点での発表になるので、Androidとの比較の話も内容として取り扱う予定です。
CFP提出時点ではAndroidアプリ開発未経験の私が、DroidKaigiにスピーカーとして参加するためにAndroid開発を始めた話について、お話します。 発表内容としては、社内に準備されているAndroidエンジニア向けの課題アプリをScala or Kotlinで作って、つまづいたところをメインにお話します。 また、iOSエンジニアからの視点での発表になるので、Androidとの比較の話も内容として取り扱う予定です。
DDD(ドメイン駆動設計)で実際にプロダクトに適用する際には、解釈次第で色々な実装ができると思います。 そこでDDDの書籍を読んだ上で、実際にコードに落とし込む時にはどのような形になるかをAndroid×DDDで簡易な掲示板を作るという中でご紹介したいと思います。 CFP提出時点でAndroid開発が未経験のため、既存のAndroidの設計からは外れてしまう可能性はあります。 実装はKotlin or Scalaで考えています。
iOSエンジニアの私がAndroid開発未経験の視点で、現場でiOS/Android同様の機能を開発するにあたって、iOS開発と比べて 実装難易度が違うかについてお話します。 具体的な例の一つとしては、「動画コンテンツにおいて、バックグラウンドの音声との制御」といったような機能の実装で、iOSでは相当苦労しましたが、Androidでの実装は一瞬だったことなどを取り上げる予定です。 ※iOSで苦労した話はiOSDC Japan 2017で発表したので、興味のある方は資料をご覧ください。 https://www.slideshare.net/MasayaDake/bgm-79828928 ※他のネタはまだ決まっていません。 あくまでもAndroid開発未経験の視点なので、Androidの熟練した開発者からすると当てはまらないかもしれませんが、比較という観点で楽しんでいただけるとありがたいです。
Hands on codelab to learn more about Android Things
KotlinがAndroid開発言語として公式化されたことにより、採用が増えてきています。 KotlinはJavaより表現力が豊かで、短くシンプルに記述できるケースが多くあります。 豊かな表現は、DSL(Domain Specific Language)を実装する際にとても便利です。 DSLの要件は以下の通りです。 - 本質に集中できるようにシンタックスをわかりやすくしたい - IDEの補完機能などでアシストが使えるようにしたい - なるべくドメインの言葉で書きたい これらを実現するためのKotlin機能がたくさんあります。 - Operators - invoke - infix - Lambdas - Extensions Functions or Properties ... Javaにはなかった表現力で、幸せなAndroid開発を!
■概要 Android組み込み開発やAndroid端末開発では、Android Platformに独自機能を追加することがあります。 その機能はAndroid Platformに組み込まれるため、通常では単体試験が行いづらいですが、工夫をすることで可能となります。 Android Platform開発(Java層)における単体試験とTDDについて紹介します。 ■対象者 ・Android Platform(Java層)開発者 ・AndroidでJUnitを用いた単体試験を行いたい方 ■内容 ・Androidフレームワーク(frameworks/base以下)へ追加するモジュールを単体試験可能とする設計 ・JUnit + Robolectric + Mockito + Jacocoによる単体試験 ・ビルドし、実機に焼いた後での自動テスト方法
特定用途に特化した専用端末は、Kiosk端末と呼ばれています。 例:ATM、切符販売機、店舗の予約受け付け端末など 本セッションではAndroid 5.0から追加されたDeviceOwnerを活用し、 下記の要件を満たすAndroidのKiosk端末化についてご紹介します。 * 通常操作では、専用アプリ(Kioskアプリ)以外の画面には遷移できない * 端末を再起動しても、強制的にKioskアプリが立ち上がる * 特定の手順を踏むと、Kioskアプリ以外の画面に遷移できる また、Kioskアプリ固有の問題とその対処についてもお話しする予定です。
入門書では設計・コードの書き方が扱われることは多くありますが、IDE自体の便利な使い方が扱われることはなかなかありません。 しかし、Android StudioにはAndroid Developerのための便利な機能が多く用意されています。 これらを使いこなすことで、さらにステップアップすることを目的に、僕がAndroidを学び始めたときに知っておいてよかった機能の発表を行います。 - Layout Inspector - Live Template - Vector Asset Studio - etc... もちろん、Android Studio 3.0に対応した内容をご紹介します。
Android上の開発は非同期の扱いを避ける事はできないです。ネットワーク、フレームワーク、ユーザの操作などから非同期処理が発生してます。油断してしまうとアプリが複雑化してメンテナンスが難しくなります。皆様はネットワークからレスポンスを待っている途中、ユーザが画面をローテーションしても問題ないですか?並行してユーザがいろんな操作しても大丈夫でしょうか? Model-View-Intent アーキテクチャは非同期処理が発生する前提で考えられたため、すべてがストリームとして扱ってデータの流れを一方通行にするかつ不変オブジェクトを使うのが MVI アーキテクチャの方針です。マルチスレッディングやAndroidのライフサイクルの対応から生じる問題がアーキテクチャによって解決されるおかげでアプリのロジックに集中できるようになり、コードが書きやすく、今後の保守も楽になります! 皆様が MVI アーキテクチャの強みを理解し自分で実現できるようにする目標で Kotlin と RxJava を使って並行処理、画面ローテーション、スナックバーを含んだ画面をどうやって作っていくかを語るつもりです!
“I don’t have time to write tests”, “My code works, I don’t need to test it”, “I’ll write the tests later” - I’m sure we’ve all heard at least one these before! These are all unfortunately commonly heard phrases when it comes to testing. But we’re only human, and no matter how skilled of a developer you are, testing is essential to ensure your product remains stable and maintainable throughout its lifetime. Luckily for us, the Android ecosystem provides a collection of libraries and tools that make it easy for us to test the multiple layers of our application. In this talk, I want to explore with you the importance of the testing of our applications, in the form of both Unit and UI testing, along with the tools and practices we can use to help us achieve. I’ll be sharing our own experiences at Buffer of going from 0 tests to a well-tested codebase and we’ll be looking at how we can write and structure maintainable tests for our own applications using both jUnit & espresso.
The mobile devices of the latest generation are now capable of powering the desktop user experience. Get your Android apps ready for the big screen. Learn what it takes to optimize your apps for enhanced interactions, desktop mode capabilities, and an overall amplified in-app experience. Stay for the quiz and for a Samsung DeX station giveaway at the end of the session!
AOSPにて公開されてるDataBindingのコードを読み、実際にどのような仕組みになっているか、デバッグ方法等を簡単に紹介します。 また、実際にパッチを投げた話も紹介したいと思います。 # 対象者 DataBindingに興味のある人 # 予定内容 * DataBindingの仕組み * DataBindingのデバッグ方法 * AOSPへパッチの送り方 * バグ修正した話
Androidの画面構築に欠かせないViewGroup。使い方は当然ご存じだと思いますが、レイアウトアルゴリズムがどのように実装されているかまでご存じでしょうか? このセッションではViewGroupのレイアウトの基本的な流れのおさらいと、いくつかの有名なViewGroupのレイアウトアルゴリズムについて解説します。ViewGroupの基本的な話は程ほどにし、内部実装について掘り下げた話をします。 注意:このセッションを聞いてもConstraintLayoutなどの使い方は学べません。 ■目次(案) ・Viewってどうやってレイアウトされているの? ・View#onMeasure ・知ればシンプルなMeasureSpec ・View#onLayout ・使おうgetMeasureWidth、getMeasureHeight ・FrameLayoutのonMeasure、onLayout内部実装解説 ・LinearLayoutのonMeasure、onLayout内部実装解説 ・weightの実現方法 ・ConstraintLayoutのonMeasure、onLayout内部実装解説 ・特徴的な各機能の実現方法 ■対象者 ・独自ViewGroupを作るのが好きな方 ・特にonMeasureやonLayoutをついつい自分で書いてしまう方 ・各ViewGroupのレイアウトを「特に」知りたい方 ・Viewのレイアウトを本気でチューニングしたい方
ネイティブアプリ用広告SDKなどの開発者がアプリに導入することを対象としたソフトウェアやライブラリの開発には、「あまり他ライブラリに依存しない」ということを始めとした通常のストアに乗るようなアプリの開発とは違った意識の持ち方や、開発の方針があります。本セッションでは、私がAndroidアプリ向けの広告等のSDKを開発する中で意識していることや開発時のTips、リリース時に行うことになるproguardやライブラリサイズの削減等のTips、果てはSDK自体のKotlin化と言うようなことについてお話できればと思います。 # 内容 - SDK開発において意識すること - SDKを開発する際のTips - SDKをリリースする際のTips - SDKレベルでKotlin化をする話(予定) # 対象者 - 広告等のSDKを利用されている方 - OSS/非OSSに問わずライブラリ開発をしたことがある方 - SDKを開発したことがある方
Android 7.0から、WebViewのレンダリングエンジンを設定(開発者向けオプション)で切り替えることができるようになりました。 Androidフレームワークのソースを読んで、 ・どうやれば自作のWebViewをAndroid OSに認識してもらえるようになるのか ・自作のWebViewでは何を実装する必要があるのか を読み解いていきます。 なお、実用性は全くありません。 Androidのソースを読んでみたいという方であれば、初心者の方でも楽しんでいただけます。
Flutter is an exciting new framework from Google that allows us to create cross-platform mobile applications. I’ve never been a huge fan of cross-platform solutions, but Flutter caught my eye and in this talk, I want to share my experiences with you. After a brief look into what Flutter is and why it’s here - we’re going to diving into the Flutter framework in a practical manner to learn exactly what we can do with it. Using Dart as our language, we’ll look at how we can craft beautiful applications with Flutter followed by how we can test and keep our projects maintainable to follow the same craft we that do when working with the Android framework.
Beautiful, Elegant UI is something which win’s the user’s heart. But yes, Unique and stylish UI is often complex to develop and code.This talk will let you know some amazing UI components which can take your app design to an incredible level with less effort and yes in very less time ;) :) . ---Outline--- 1.) Creating Chat Head Like Facebook in less than 10 mins 2.) FlowingDrawer - swipe right to display drawer with flowing effects 3.) Advanced RecyclerView :- Google’s Inbox app like swiping, Play Music app like drag-and-drop sorting and expandable item features 4.) Circular SeekBar 5.) Easily Managing Gradients 6.) Zooming, Panning Functionalities To Images 6.) Highly Customizable Calendar 8.) Markdown magic in Android 9.) What all you have for animations ??
Android has seen a lot of attention to meta programming, starting from reflection based approaches to annotation processing in more recent years. In this talk I will focus on the less popular technique of byte code weaving, which enables more powerful meta programming. Byte code weaving is the underlying tech of popular libraries like NewRelic, retro lambda and project lombok. Based on code examples we will * discover how byte code weaning works * understand how it allows a whole new class of modification to existing code by changing existing classes * learn how to apply byte code weavers to android projects * learn how to build our own 🤗
With the introduction of ARCore, applications can now easily deliver rich augmented reality experiences. In this session, you will learn how to add AR to your application, why and how physically-based rendering can be used to make the experience even more immersive.
■概要 Android4.4から導入されていたHCE(Host Card Emulation)ですが、イマイチ流行りませんね! 面白そうだけどとっつきづらそう。ICカードのお作法とか色々と面倒くさそう。そういったイメージも障壁になっているのではと思います。 ですので今回は細かいことは置いておいて「ケータイでピッとするやつ」ぐらいの認識でもサクッと作れちゃう!という気持ちにさせるようなセッションを目指します。 サクッと作れる人が増えれば面白い使い方を思いつく人も増えるのではという思いを込めて… ■アジェンダ(仮) HCEとは NFCってなんだっけ Androidアプリ with HCE *APDU等、ICカード周りの話題にはあまり触れない予定です ■対象者 Androidアプリ開発経験の有る方 HCEに興味はあるけど触ったことが無い方 ケータイでピッとするやつを自分で作ってみたい方
みなさん、もうアプリ開発はKotlinに切り替えていますか? Android Studio 3.0よりKotlinが正式にサポートされ、実際にKotlinを使用しているという事例も増えてきました。 そこで、実際に業務でKotlinを使用してアプリ開発で得た知見などについてお話します。 ### 対象 - Kotlinによるアプリ開発に関心のある方 - これからKotlinを使ってアプリ開発をする方 - 「俺はそれでもJavaでやる!!!」という固い決意を持てずにいる方 ### 内容案 - KotlinとArchitectureComponent - Kotlinでの非同期処理とRxJavaからの卒業
昨今のAndroid開発では、RecyclerViewを使うことが非常に多いと思います。 Epoxyはレイアウトが複雑なRecyclerViewの実装をサポートしてくれるライブラリです。 https://github.com/airbnb/epoxy 本セッションでは、Epoxyを使ってアプリ開発を行った経験から得られたTipsを紹介します。 具体的には以下の内容を紹介する予定です。 * EpoxyをKotlin環境で使うTips * EpoxyとDatabindingを同時に使うTips * Epoxyを使ったRecyclerViewでRecyclerView.ItemDecorationを実装するTips
■概要: AndroidのJavaとOracleのJavaは微妙に異なると言われていますが、普段その違いを意識することはあまりありません。 実際、「だいたいJava6ぐらいかなー」って思っていればうまくいくことが多いと思います。 そこで今回は「全く同じJavaコードを書いてもOracleのJVMとAndroid Runtimeで異なる動作をすることがある」っていうのを紹介したいと思います。 題材にするのはよく使われるArrayListです。 ■対象者: JavaでArrayListを使ったことがある。 if文やfor文、拡張for文、Iteratorなど、Javaの基本的構文を書いた or 読んだことがある。 世界にはJavaコードから生成されたプログラムを動かす実行環境がたくさんあるらしい(OracleのJVM、Dalvik仮想マシン、Android Runtime) ことを知ってる。(これを読んだあなたはもう知っているので対象者です) ■目次 ・普通に書けば、普通に同じ動作をする ・ArrayListを拡張for文で回す←ここまでは同じ ・for文中にあることをすると・・・おおっと ・大丈夫なこともある? ・なぜ大丈夫なこともあるのか? ・Javaは不思議だなぁ。AndroidもJavaだもんね、同じことが・・・ ・ピュアJavaだと思った?残念Androidでした ・AndroidはJavaとAPIが同じなだけ ~いつからAndroidをJavaだと錯覚していた?~ ・ネタばらし ・もちろん逆パターンもあるぞ ・その他の事例もあるぞ(先駆者紹介) 注意:このセッションは好奇心を満たすだけで、明日使えるテクニックは何もありません
新しいAndroidアプリを開発するにあたり、MVVMを採用しようと考えたのですが、先にリリースされたいたiOSのコードの見通しがあまり良くなく、AndroidアプリではMVVMではなく、単方向データフローのアーキテクチャを採用することにしました。 単方向データフローのアーキテクチャとしてはFacebookのFluxが有名です。 https://facebook.github.io/flux/docs/in-depth-overview.html#content 私が採用したアーキテクチャではデータフローの実装にはRxJavaをフル活用しています。 RxJavaを使うことで、データフローの合成が簡単に行うことができています。 このセッションでは以下の内容を発表する予定です。 * なぜ単方向データフローアーキテクチャを採用したのか * このアーキテクチャで得られたもの、失ったもの * コードの共通化にどのように向き合ったか * 単方向データフローでは表現しづらいダイアログやトーストの表示をどのよに実装したか なお、紹介するアーキテクチャはiOSのReactorKitというライブラリを参考にしています。 https://github.com/ReactorKit/ReactorKit
自社の求人情報サービスをWebサイト/ネイティブアプリ(iOS/Android)の両方を同時にフルリニューアルし、同時にリリースするというプロジェクトでプロジェクトマネージャの一人としてやり通し、そこで得られた経験、困難なプロジェクトを成功させるためにやるべきチームビルディングの大切さについて共有していきたいと思います。 アジェンダ(検討中) ・自社サービスの説明 ・リニューアルの概要 ・成功させるためにやるべきこと、やらないこと
Writing high-quality path morphing animations for Android is a near impossible task. In order to morph one shape into another, the SVG paths describing the two must be compatible with each other—that is, they need to have the same number and type of drawing commands. Unfortunately popular design tools, such as Sketch and Illustrator, do not take this into account, and as a result engineers will often have to spend time tweaking the raw SVGs given to them by designers before they can be morphed. To address this issue, I built a web app called Shape Shifter (https://shapeshifter.design), a tool that helps developers and designers to more easily create path morphing animations for their Android apps. In this talk, I will explain how to use Shape Shifter to create seamless transitions between arbitrary shapes using AnimatedVectorDrawables. I will also explain how Shape Shifter internally uses bioinformatics algorithms and Voronoi diagrams in order to auto-generate morphing animations between incompatible shapes, as well as some of the challenges I faced while building the tool.
# 概要 Android端末に使われている CPU は多種多様にある。ARMアーキテクチャーとは?から、それぞれのメーカーが作った Snapdragon, Exynos, kirin, MediaTek などのCPUの性能の違いや歴史を話したいと思います。またスマートフォン端末ではあまり話に上がらないGPUについても話せれたなと思います。 # 話す内容(予定) - AndroidとCPUの歴史 - ARMアーキテクチャーとは - CPUの種類と性能差 - 最新スマートフォンの性能 - スマートフォンとGPU
■ 概要 ActivityやFragmentにビジネスロジックがありユニットテストしずらいコードに対して、レイヤードアーキテクチャ(今回はMVPアーキテクチャ)を導入しAndroid非依存なクラスに抽象化することでテスタブルにする方法を紹介します。 ■ 対象者 ・テスト対象範囲を増やしたい方 ・MVPアーキテクチャの記事やサンプルコードを読んだけどいまいちわからなかった方 ・既存のコードを段階的に改善したい方 ・安心してコード改修できる環境にしたい方 ・Util系クラスしかテストがない方 ・ついでにKotlin率をあげたい方 ■ 話すこと(仮) ・MVPアーキテクチャとは ・Android非依存なクラスとは ・Repositoryに分離する ・Presenterに分離する ・Presenterのテストを書く ・Mockitoを使う ■ 話さないこと ・Dagger, Espresso, robolectric ・Kotlinの文法など説明 ・他のアーキテクチャ説明、比較
Material Designの特徴をつかみ、 魅力的で使いやすいアプリをデザインする上で 必要なデザインプロセスのノウハウを述べる。 * Material Designについて * Material Designの概要 * 他のデザインガイドラインの違いについて * デザインプロセス * 調査 * コンセプト設計 * 可視化 (UX/UI Design) * 評価 (コンセプト/ユーザビリティ評価)
■ 概要 既存プロダクトにKotlinを導入するためにやったこととKotlinを書いていく上での注意点などの紹介をします。 ■ 対象者 ・Kotlinを導入したい方 ・学習方法を知りたい方 ■ 話すこと(仮) ・Kotlin導入のためにやったこと(説得編) ・Kotlin導入のためにやったこと(学習編) ・Kotlinの文法 ・Kotlin to Java ・etc...
#概要 AndroidアプリをMVCで作っており、各層の責務が曖昧になっており見通しが悪くなったので、 構造を見直すために設計手法を調査しました。 調査時に設計というよりパッケージ構成に着目されている気がしたので、 各アーキテクチャがどのような問題を解決しようとしているかをお話します。 #対象者 - AndroidのMVW(MVC,MVP,MVVM)をなんとなく使ってる人 - Androidアーキテクチャの選定に悩んでいる人 #Wの視点 - MVCの概要と問題点 - MVPの概要と解決しようとしたこと - MVVMの概要と解決しようとしたこと #Mの視点 - レイヤー化アーキテクチャ(≠DDD) - クリーンアーキテクチャ の解決しようとしたこと #その他 - アーキテクチャの必要性について - アーキテクチャを考える上で重要なこと
<対象者> ・Androidアプリのデザインを良くしたいけど何をしたらいいかわからない方 ・iOSっぽい見た目のAndroidアプリを作っている方 ・マテリアルデザインに興味のある方 <概要> 世の中のAndroidアプリには、iOSライクのダイアログ、アクションシートもどき、統一感のないカスタムUIなど、お世辞にも良いデザインとは言えないUI部品が存在します。私の会社で作るアプリにもそうしたUI部品があります。それらを「ありました」と言えるようにする基盤を作るために私が取り組んできた(いる)こと、その結果得られた成果(少しずつ置き換えが進んでいること)について話します。 <内容案> 〜主なトピック〜 ・デザインガイドラインの作成:自社アプリのデザインガイドラインを作成することで、理想的なデザインに関する共通認識をチームに持たせる取り組みをしました。その際、iOSに寄せたデザインよりもAndroid標準コンポーネントを利用する方が適切だという説明をし、チームに受け入れてもらいました。10月現在、iOSライクのダイアログをAndroidの標準ダイアログに差し替える実装をしているところです。デザインガイドライン作成の手順や難しさ、今後の展望などについて発表します。 ・マテリアルデザインガイドラインの読破:良いAndroidアプリのデザインに関する理解を深めるために、現在マテリアルデザインガイドラインの輪読会を大阪で実施しています。これまでに輪読会を2ヶ月で4回実施し、現在全体の40%ほど読みました。2018年の1月中には読み終える想定です。マテリアルデザインガイドラインを読破して得られた知見を発表します。
There are many improvements of UI development on Android, but Anko is extension of Kotlin which became official language of Android development now. Besides, Anko is more feasible and efficient when programming, so that's why it's worthy to take a look. I am also a beginner of Anko, but I hope we can understand Anko more deeply after this introduction. 1. Use Anko to build dynamic layout 2. The comparison between Anko and XML 3. Anko coroutine
概要 IoTデバイスとの接続方式として採用されることの多いBluetooth Low Energy(BLE)ですが AndroidのBLE実装はiOSに比べて、なにかと辛いポイントが多いことで有名です。 この発表ではAndroidのBLEアプリ開発で実際に遭遇した辛いポイント、ハマりどころなどに ついてお話したいと思います。 対象者 - Bluetooth Low Energyを使ったAndroidアプリを開発中または興味のある方。 話す内容 - AndroidのBLE開発はこんなに辛い - AndroidのBLEはなぜ繋がりにくいのか - AndroidのBLE実装で気をつけたいポイント - BLEの不具合解析方法
#概要 ButterKnife vs DataBindingの論争は、Kotlinの世界でも再現されるんでしょうか。 KotterKnifeは、Kotlin向けのButterKnifeとして、軽量でエレガントな方法でViewInjectionを実現しています。 一方で、かつて不安定の塊だったDataBindingも、十分に安定してきており、Kotlinでも使用することができます。 このセッションでは、KotterKnifeとDataBindingを比較しながら、 Kotlinで使う場合の、両者の長所と短所を概観し、落とし穴を紹介します。 #対象者 Kotlinを導入している人 Kotlinの導入を考えている人
#概要 ある処理を実現したい場合に、直接そのロジックを実装するのではなく、 ロジックを生成する高位ロジックを書き、それを使って機械的にコードを生成する手法のことを、 メタプログラミングと呼びます。 広く使われている強力なOSSのなかには、アノテーションプロセッサや、バイトコード変換など、 なんからのかたちでメタプログラミングを使用しているものが多くあります。 Javaの世界では、そのためのライブラリも豊富に用意されていましたが、Kotlinではどうでしょうか。 アノテーション周りでトラブルが多い印象のKotlinですが、メタプログラミングの手法はそれだけではありません。 Pure Kotlinの世界において、メタプログラミングを行うための手法と制限についてお話したいと思います。 #対象者 - 珍しいものが好きな人 - 黒魔術が好きな人 - Kotlinでライブラリをつくってみたい人 #話す内容 - 魅力的なメタプログラミングの世界 - KotlinとJavaとアノテーション処理の微妙な関係 - バイトコード変換とその限界
#概要 Android Architecture Componentsは、Android特有のUIコンポーネントの複雑さに対処するために産まれたライブラリです。 Google I/O 2017で発表されたとたん、話題の的となったArchitecture Componentsですが、 いったいどのようにして、ライフサイクルイベントを拾い、各コンポーネントはどのように反応しているのでしょうか。 Lifecycle, LiveData, ViewModel, Roomの内を覗いて、それらがどう動いているのか、探ってみましょう。 #対象者 - Android Architecture Componentsを使っている人 - ライブラリの中を覗くのが好きな人 #話す内容 - Android Architecture Componentsの中身 - Android Architecture Componentsを使うときの注意点など
全てのAndroid、そしてiOSエンジニアへ。そして数少ない、両方のOSのアプリを開発せしツワモノ達へ。 iOSとAndroidの両方のOSのアプリを開発するエンジニアとしての環境や言語の違いからくる「辛さ、大変さ」、そしてなにより「面白さ・楽に進める方法・共通化について」を話せればと思います。 日本最大級のiOSのカンファレンス、iOSDC2017で登壇した時に話した以下のセッションの内容を今回はAndroid Developerという視点で話します。 https://speakerdeck.com/jumbo_ken/liang-osyarumantoiuxuan-ze 「iOSも始めるんだ」「両方のOSをどう運用しているの?」「AndroidでこれはiOSでどう実装するの?」 現場で困りがちな内容を重点的にお話します。 これから両方のアプリを開発する予定の方、チームのエンジニアをOSで分けずに進めたい方、どちらの開発も経験があって一緒に辛みを共有した方、お待ちしております。 ------- This session is for developer that need to develop iOS and android. I'd like to share below knowledges. - What's different iOS and android? - How to develop both app with common architecture. - Why we need to release both app on Japan. and any knowledge for growth and develop your app!
Andoirdアプリのプロダクトマネージャーとして3年に渡りScrum開発を取り入れて来た中から、アプリ開発における開発プロセスとしてScrumを採用した理由を述べ、エンジニアの観点とプロダクトマネージャーの観点から、なぜ開発プロセスをしっかり定義しておくことが重要なのか、その必要性をお話します。 ただし、Scrum Masterの資格を持っているわけではないので我流も大量に混じっています。
スマホ市場が成熟期に入ったことで、ユーザーのインストール行動がシュリンクし、国内でも一つのアプリに複数のサービスを持つ「垂直統合型」のアプリの存在感が増してきています。Googleアプリを始めとする、シンプルなアプリを複数出すことでユーザーの利便性を高める「水平統合型」のアプリとの違いはなんなのか。国内と、できれば海外の事例も含めて紐解いてみたいと思います。
タッチ操作で意図通りにぐりぐり動くUIを作りましょう。 Androidでは多くのコンポーネントが提供されており、標準的な操作への対応であれば、タッチイベントのハンドリングをアプリで独自実装しなければならないシーンは少ないと思います。 しかし、少し凝った操作系を作ろうとすると、独自にタッチイベントを捕まえ動きを実装する必要があります。 このタッチイベントのハンドリングは奥が深く、ドラッグとタップ両方できるようにする、複数本の指でピンチもできるしフリックもできるなどを実現しようとするとタッチイベントに対する深い理解が不可欠です。 Androidのタッチイベント伝搬の仕組みや、MotionEventが保持する情報といった基本的な説明、マルチタッチへの対応、陥りがちなポイント、有用なユーティリティの説明などを交えつつ、ぐりぐりと意図通りに動くUIの作り方を説明します。
動画の時代が来ると、数年前から言われており、動画を扱う案件が増えていると思います。 しかし、MediaCodecを使用した動画編集に関する情報はネット上にもとても少ないです。 そこでMediaCodecを使った動画編集を、サンプルと共に情報公開をしたいと思います。 目次案(検討中) * MediaCodecの概要 * OpenGLESの概要 * MediaCodecとOpenGLESで動画にフィルターをつける。 * MediaCodecとOpenGLESで動画にウォーターマークをつける * まとめと個人的な所感
#概要 Androidの世界には、数多くのORMが存在します。 その事実は、以下のいずれかを意味しています。 ・各ORMは、それぞれ異なる課題意識に基いて設計されている ・これを使っとけば何も問題ない、極楽だ、という決定打となるORMが存在しない ・みんなORMを作るのが楽しくてしょうがない 実際のところ、ORMは便利です。そして悩みの種でもあります。 どのORMを使うにしても、ここはこうあってくれたらいいのにな、という点が、1つか2つか、あるいはもっとあるのではないでしょうか。 そんな方向けに、ORMがどういうもので、どんな技術を使って作られているのか、お話したいと思います。 #対象者 - ORMを作りたくてしょうがない人 - 黒魔術的なものが好きな人
#概要 RxJava + Retrofit + Okhttp をつかった通信処理については、これまでも何人も何回も話されてきたかと思います。 ググればいくつもの記事が見つかることでしょう。 このセッションでは、そうしたテンプレ部分を超えて、もうちょっと実践的なパターンについてお話したいと思います。 通信中にはインジケータをだし、 通信不能な場合にはメッセージバーを出し、 失敗したら、何度かリトライし、 特別な場合には、メッセージカードを出してみましょう。 アクティビティのライフサイクルにも対処しなくてはなりません。 こういった要件を踏まえたうえでの、コード例を見ていきたいと思います。 #対象者 - Retrofit / RxJavaを使ったことがない人 - RecyclerViewが大好きな人 - サンプルコードは全部Kotlinです
# 概要 発表者が使っている、便利なWebサービスだけどAndroidアプリが無い、APIも公開されてない、ブラウザ版で使えないことも無いけどアプリで気持ちよく使いたい!と思ってスクレイピングで非公式Androidクライアントアプリを作ってリリースした話をします。 # 対象者 - Androidアプリが無いWebサービスを使っているAndroid開発者 # 話す内容(仮) - Androidアプリでのスクレイピングに便利なライブラリーの紹介 - スクレイピングする上で使ったツールの紹介 - スクレイピングする上でハマった事とどうやって乗り越えたか
このセッションでは、関数を組み合わせて様々な構文をパースできるパーサーを作成します。 あなたはアプリを作っていてこんな場面に遭遇したことはありませんか? - サーバから返ってくるちょっと変わった構文をパースしたい - SQLをパースして構文にミスが無いかチェックしたい - いざパーサーを作ろうと思ったけど、if文とループのオバケの様になってしまった こんな時、kotlinの関数を活用すれば簡単に保守しやすいパーサーを作ることが出来ます。 また、関数を活用したパーサーはコードをひと目見ただけで どんな構文をパースしようとしているのかとても分かりやすいものとなります。 さぁ!みんなで関数の世界へ飛び込もう!! アジェンダ(予定) - パーサーを作るにはどんな部品が必要か? - パースの失敗と成功を表現する - 小さなパーサーを作ってみる - 決められた順序で文字列が続くパターンをパースする - 特定の文字で区切られたパターンをパースする - 複数のパーサーのうちどれか1つにマッチするパーサーを作る - パースした文字列を任意のオブジェクトに変換するパーサーを作る - 小さなパーサーを組み合わせて大きなパーサーを作る - jsonのサブセットをパースしてみる - SQLをパースしてみる
MVP、MVVM、クリーンアーキテクチャ等、Androidアプリケーションの設計を整理するパターンは様々存在しますが、 実際にこれらのパターンを開発で適用しようとすると、どうしてもネックになりやすいのがAndroid SDKに依存する機能の呼び出し部分です。 例えば + Contextに依存する処理 + 画面遷移 + FragmentManagerの操作 + DialogFragmentの表示、 + Lifecycleイベントのハンドリング などがあげられます。 Fat Activity/Fragmentを避けようとMVP、MVVM、クリーンアーキテクチャ等のパターンを適用したはずなのに、どうしてもActivity/Fragmentにロジック部分が残ってしまいがちで結局設計を逸脱した例外的な処理の記述の仕方を行った経験などがある方もいらっしゃるのではないでしょうか。 本発表ではDagger2のScope、Subcomponentの機能を活用し、Android SDK由来の各種機能を疎結合に整理する方法、その利用例をご紹介します。 なお、本発表のサンプルコードはAndroid Data Bindingを利用したMVVMパターンを適用したアプリケーションを例として使用します。 ## 目次(予定) + Scopeは二つに分ける(Singletonスコープ、Lifecycleスコープ) + Context依存を切り離す + 二つの方法、メリット/デメリット + 画面遷移を整理する + Delegationパターンを使ってActivity/Fragment/DialogFragmentに対応する + FragmentManager(DialogFragment)依存を切り離す + Lifecycleイベントのハンドリングを整理する + Android Architecture Componentsを利用するパターン + 自前でコールバックを定義するパターン ## 対象者 + Fat Activity/Fragmentをスリムにしたい人 + Dagger2の基本的な使い方は理解しているが、実践的にAndroid実装に適用する際のベター/ベストプラクティスを知りたい人
NDKを使って高パフォーマンスなアプリケーションを作成する手法、チップス、APIなどを紹介します。 本セッションは日本語、英語混合セッションとなります。 ・C++を使ったAndroidプログラミング ・Android電話向けパフォーマンスチューニング手法 ・systrace, simpleperf等紹介 ・CPU governor挙動について ・Android NDK packaged the necessary API and tools to create low latency audio apps , high end graphics games, stunning video/camera apps, and accelerated Machine Learning applications; plus tools and Android Studio IDE to make creating Android high performance applications an pleasant experience. Goes through Audio, Graphics, Camera, Tools and Studio IDE to help developers to create compelling high performance Android applications.
■概要 サーバーサイドの開発に携わるようになり、コマンドに慣れてきたので、 Androidの開発をする時にもコマンドを取り入れてみました。 そこでの学びをお話しします。 開発効率を上げるために取り組んでいることを伝えていこうと思います! ■対象 Android開発には慣れてきたけど、もう1歩進みたい。1upしたい方々! いまいち取り入れ方法がわからない!そして黒い画面を避けて通ってきた方など.. ■喋ること ・adbコマンドなど使いますが、コマンドの紹介というよりは、実務で使えそうなものをデモを中心に進めます ・取り入れるときに躓いた点 ・dotfilesの中身紹介など ・Android開発を離れてみての学び
This talk covers a wide variety of the most popular libraries. Explaining why you may want a library for a specific problem. It also provides pros, cons, gotchas and tricks of each library that can save developers days of discovery testing on their side.
Everybody cares about performance, but keeping an app performant is a huge challenge=. This talk dives into the different things you should be thinking about when considering the performance of your app and how to approach improving the performance.
We are now operating in a data-driven world. If your company isn't using metrics to determine what their next step is, then your company is likely moving blindly. That is fairly universally accepted, but what's worse is when what your metrics tell you isn't true. This talk discusses what you can do to prevent your metrics from misleading you.
We face multiple issues such as Null pointers, Memory leak, Hardcoded XML, RTL and may want to enforce custom rules such as all the activities extends BaseActivity, or no one uses an internal buggy API. We’ll see some amazing tools to help you fix these issues and focus on your core business logic. We'll also see how we can detect code smells, security vulnerabilities ,UI Overdraw, Heavy AsyncTask, Heavy Broadcast Receiver and much more. ---Outline--- 1. Annotations - Using annotations not only improve your code quality but also help tools like Rave and Infer. 2. Lint and Custom Lints - Enums are expensive and should be replaced by magic constants (it is just an example to demonstrate custom lint). We will go through a sample custom lint which prevents anyone from checking enums into your code. 3. Qark - Tool to look for several security related Android application vulnerabilities either in source code or packaged APKs. 4. Paprika - A toolkit to detect some code smells in analysed Android applications. It can also detect UI Overdraw, Heavy AsyncTask, Heavy Broadcast Receiver and much more. 5. FlowDroid: Precise Context, Flow, Field, Object-sensitive and Lifecycle-aware Taint Analysis for Android Apps 6. Infer - We will be talking about the cases infer can catch - Context Leaks and NPE. 7. Rave - We will be validating schema from servers or local DB. How it can be integrated into your existing network layer (such as retrofit 2). 8. ErrorProne - How can we move the errors earlier into our build process? Instead of waiting for lint tasks to be completed on CI/Locally, how can we detect the issues at compile time. If a code has pointer null pointer flows, the compilation will fail.
Android Architecture Blueprints は、Google が提供しているAndroidアプリを作るにあたって用いられている代表的なアーキテクチャを使用した実装サンプル集です。 この Blueprints では、同じ仕様のアプリを違ったアーキテクチャで実装することにより、それぞれのアーキテクチャの特徴や長所、短所を学習するよい教材になっています。 本セッションでは、代表的なアーキテクチャでの実装を追いながら、それぞれのアーキテクチャの特徴をご紹介します。 またそこで使われているフレームワークの基礎知識も学んでいきます。
Progressive web apps are awesome, but no one talks about how to build them at scale.For a big company practically, just hitting a 100 score in lighthouse is not enough.This talk will help you choose the right tech design, architecture, the right stack to build an app like experience in web using PWA. ---Outline--- -> What is PWA and How it can replace Apps ? ->APP vs PWA advantages and disadvantages and why pwa wins -> Bringing best of app world to the browser - modern apis ->Defining Tech Stack for a great PWA. -> App Shell on steroids - Build App like experience - optimise first paint. -> Service Workers - doing the right thing, dealing with CDNs. -> Push notifications -> Animations - hitting 60fps animations in browser - Critical for app like experience -> Smart Components - Dynamic image optimizations. -> Stitching smoother search experience along with AMP -> Build Systems - fast reloads for devs and optimized builds for production, code split Catches! -> Ajax Calls and Caching - Optimising for browsers which doesn’t support
There is a lot of Hype with ML and AI lately, and TensorFlow is the framework of choice from Google. But as a Mobile Developer you might have asked yourself, how can I benefit from it? In this talk, you will learn your first steps into the fascinating ML world for mobile. The session will show examples in: - Classifying example - Detection example - Analyzing example Also, we will have a state of the art report, which hole is TensorFlow covering, explanation of some real use cases, theory of Neural Networks, showcasing how models are training, what is the motivation of using ML on Mobile instead of on a server, etc. I will show as well some live demos on Android of how TensorFlow works, showcasing iOS and explaining how we can adapt our own models to Google samples.
Androidアプリの開発では多様な画面サイズや画面回転への対応など、柔軟性を意識してUI・レイアウトの構築を行う必要があります。また、Android 7.0でのマルチウィンドウのサポートもあり、画面構成の変更時の状態保持に対する理解の重要性も高まっています。 このセッションでは、ウィンドウサイズの変更に強い画面の構築を通して得た知見、Tipsを共有していきたいと思っています。 ■ 対象者 ・マルチウィンドウや横画面でも表示の崩れないレイアウトの構築に興味のある方 ・構成の変更時(ウィンドウのリサイズ、画面回転等)の画面状態の保持に対して苦手意識を持っている方 ■ 内容(予定) ① ウィンドウサイズの変更に強いUI・レイアウトの構築について ・様々な画面サイズ、OSバージョンで表示の崩れないレイアウトを構築する上でヒントとなる知見やTips ・fitsSystemWindows / WindowInsetsを活用してシステムUI(ステータスバー等)のサイズに影響されないレイアウトを組む方法 ② 構成の変更時の画面の状態保持について ・savedInstanceState、setRetainInstance、それぞれの状態保持の手法の利点と使い分け ・Android 7.0で強化されたonSaveInstanceStateで保存するペイロードへのサイズ制限とその対策 ・構成の変更とActivityの再生成を理解した上で、画面の状態保持に対して取りうる戦略を考える ※特定のアーキテクチャとの組み合わせでのより効果的な解決方法など、発展的な内容にまでは踏み込みません。
■ 概要 30分で新規プロジェクト作成から始めてストアにリリースまでできるかチャレンジします。 ■ 対象者 ・リリースまでの一連の流れを知りたい方 ・個人アプリを作ってみたい方 ・広告収入を得たい方 ■ 話すこと(仮) ・Firebaseの使い方 ・AdMobの使い方 ・証明書の作り方 ・簡易的なアプリアイコンの作り方 ・簡易的なストア画像の作り方 ■ 話さないこと ・アプリの細かい実装
AndroidのViewレイアウトを定義するために、XMLで消耗していませんか? 私はViewの生成をAnkoのみで実装したアプリをリリースしました。 そこで得られた知見などを共有したいと思います。 * Kotlin Ankoを使う上で必要なKotlinの機能やシンタックスについて簡単に触れます。 * Ankoの内部実装 Ankoの内部実装を紐解きます。 一見、黒魔術的に思えるAnkoのView生成の仕組みを解説します。 * Ankoなら出来ること AnkoはKotlinのコードベースであるため、動的なレイアウトが可能であったり、再利用性が高いことが特徴です。 XMLでは出来ない、Ankoならではのテクニックを共有します。 * Ankoでは出来ないこと Ankoでは実現不可能なことも存在します。そのいくつかを紹介します。 * Ankoのハマりどころ 私がAnkoのみで開発する上でハマったポイント、その回避策を紹介します。 * ViewだけじゃないAnko AnkoではIntentの発行やダイアログ、トーストの操作もサポートしています。Viewレイアウトの定義だけでない、Ankoのその他の機能を紹介します。 * Anko DSL Preview CfP時点では安定していないAnkoのPreview機能。 セッション時点ではどうか?最新情報をお届けしたいと思います。
2017/10現在、5人のエンジニアできりもりしているメルカリ Android チームですが、東京オリンピックが開催される2020年にはこの40倍の200人規模になっている野望があります。そんな大規模チームになってもスケールする、モバイルアプリケーションアーキテクチャの礎を築いている中で得られた知見を共有したいと思います。
Titanium という JavaScript を使ってネイティブ UI を持つ iOS / Android 両対応アプリを作る技術があります。今、この Titanium という言葉は多くの場面で React Native という言葉に置き換えられて語られています。スピーカーは元々 Titanium のヘビーユーザーで業務としてこの技術を使っていました。しかし、 Android 版の Titanium は非常に制約が大きく、スピーカーを Android ネイティブエンジニアに転向させるまでに至りました。では、今話題の React Native はどうなのでしょうか?元 Titanium ヘビーユーザー、現 Android ネイティブエンジニアの視点で React Native の感想を語りたいと思います。
APIサーバーとやりとりするアプリケーションではAPI仕様を作る事が一般的ですが、アプリやサーバーが仕様通りに動いていなかったり仕様書のメンテナンスが疎かになったりしがちです。私が開発に携わっているプロジェクトでは、この問題に解決するためにAPIのサーバーやクライアントのコードを自動生成するツールを TypeScript で自作し、1年間ほど運用しています。 本セッションでは、APIコードの自動生成ツールを作る事になった経緯や、実際に運用する上での知見などを紹介します。 以下のようなトピックを想定しています。 - 🤔 なぜAPIコードの自動生成ツール作っちゃったの? - 😍 ツールを自作する事ならではのメリットは? - 😱 困った事と、その対策 - 😤 今後の展望や、思い!
KotlinといえばNull Safetyや拡張関数といった機能がクローズアップされがちですが、それ以外にも魅力的な機能が多数あります。 本セッションでは、その中でもdelegated propertyにテーマを絞りその基本的な使い方や、この機能がJavaの世界でどのように実現されているのか、Android開発においてどのように有効活用することができるか解説します。
Androidで単体テストを書こうと思い立ったが、アプリのコードがテスタブルになっていないため効率的にテストが書けないといった経験をしたことがありませんか? 効率的にテストを書くには、テスト対象のコードがテスト可能な設計になっていることが肝心です。これには単純にRobolectricやMockitoの使い方を知っているのとはまた違うノウハウが必要になります。 本セッションでは、私が既存のアプリにRobolectricでの単体テストを導入した経験をもとに、「こんなコードはテストが書きにくい」といったアンチパターンの紹介から、「こう書き換えればテストを書けるよ」といった改善事例を紹介します。 発表内容(予定) ・Daggerを導入する ・MVP/MVVMパターンを導入する ・staticメソッドを使わない ・Facebook SDKなど外部SDKをモックする
While Kotlin becomes more and more popular, lots of Java libraries are getting Kotlin helpers to make their usage from Kotlin code more idiomatic and clean. People, who’ve already tried Kotlin, understand that this language is much more pleasant to write code in than Java. Sure, one of the main selling sides of the language is its stunning Java interoperability. It’s really easy to call Java code from Kotlin, however, the opposite has its pitfalls. In this talk we'll discuss, what tools Kotlin creators have prepared for such cases and how they will affect the resulting JVM bytecode. This talk will be useful not only for library creators, but also for developers who are afraid to migrate their Java codebase.
Android開発では、出来る限りdexファイルのサイズを削減しなければいけません。ProGuardを使うことで、無駄なコードを削除し、dexファイルサイズを削減することが出来ます。コード量を削減することで、アプリの高速化も期待できます。またInstant Appsでは4MB制限があるため、ProGuardの重要性がより増しました。しかし、ProGuardの設定は複雑なため、なんとなくのコピペですませがちです。 本セッションではなんとなく動いているProGuardから脱出するために、 - Proguardはそもそも何をしているのか? - OkHttpなどのライブラリでなぜこのProGuardの設定の追加が必要なのか? - Proguardを導入することでどれくらいの削減/高速化が期待できるのか? - Android StudioのAPK AnalyzerでProGuardの結果を見る - (時間が余りそうならfacebook/redexについて) について説明し、なんとなく動いているProGuardから脱出することを目指します。
概要 明日からUnityでアプリ開発をするとなった場合あなたは何を思うでしょうか? 「C#での開発経験がないんだけど。。」 「開発環境は?」 「ってかGitで管理とかできんの?」 「Buildとかどうすんの?Gradle?」 「んっ?社内に知見なくね?」 : Unity上でアレコレする以前に考えることがたくさんあると思います。 このセッションではAndroidエンジニアがUnityでアプリ開発をする際に体験したこんな"そもそも"な話を実体験を踏まえてしようと思います。 対象 Unityを触ったことがない方 Unityを1日で挫折した方
概要 最近ではメモをとるときに、紙とペンでなくスマートフォンやタブレットを使うことが多いかもしれません。 それでも「ちょっと計算したい」や「図を書いて説明をする」「お絵かきする」など、 ”フリーハンド” でものを書くという需要はこの先もなくならないでしょう。 このセッションではこの "フリーハンド" をデジタイザペンを用いてタブレット上に実現する話をします。 発表内容 - デジタイザペンについて - Androidでとれるタッチイベント - デジタイザペンでとれるイベント - デジタイザペンを使ってでできること - デジタイザペンが上げるプロダクトの価値
本セッションでは、Android界隈で大人気のネットワークライブラリ「OkHttp」と、OkHttp内部でI/O処理のために利用されている「Okio」という2つのライブラリの内部実装(キャッシュやI/O周りの処理等)について解説します。また、これらのライブラリを活かした実用的なコード例を紹介します。 OkHttpは、開発が活発に行われており日々進化しています。例えばv3.4.0では、独自に再開発されたHttpURLConnectionを利用することで、パフォーマンスを損ねること無く、より内部構造がシンプルになっています。Okioはjava.nioパッケージに代わりスマートなAPIを提供し、より直感的なI/O処理を実現します。 これらのライブラリの内部の詳細を理解することで、よりパフォーマンスや保守性の高いネットワーク処理やI/O処理のコードを書き、Androidエンジニアとしてステップアップしていきましょうー↑↑
JSONをパースするのにGsonが一般的に使われていると思います。しかし、なぜGsonを使っているのか説明できる人は少ないのではないでしょうか? Android開発では他にもMoshiやKotlin serializationなどの優れたライブラリが存在します。 本セクションでは、各serializationライブラリの特徴/内部構造を理解することで、あなたのアプリに適したライブラリを見つけ出すことを目指します。 - 各ライブラリの特徴 - 内部実装の差異 - 選ぶときのポイント(メソッドカウント、速度など)
Kotlinが公式言語としてサポートされたことによって、Android開発においてKotlinを利用する機会が益々増えてきました。Kotlinを使っているので、言語自体にコントリビュートしてみたいと感じている方が多くいらっしゃるのではないでしょうか?このセッションでは、私が初めてKotlinコントリビュートした知見を共有させていただければと思います。 アジェンダ(予定) - Kotlinのコントリビュート内容 - Kotlinコミュニティについて - モチベーション維持方法 - 困った時の問題解決方法 - 学びのアウトプット Kotlinコントリビュートしてみたいけど、「英語理解してもらえるかな?」、「英語でマサカリ飛んでこないかな...」など尻込みしている方々の支えとなれたら嬉しいです。
アプリ開発において、明確なフロー・CIによる継続性・安定したリリースフローは切っても切れない存在です。 実際の案件を例に、少人数での効率的な開発やリリースを支えた「開発フロー」「導入技術」を解説します。 発表内容(予定) 開発フロー編: ・開発チーム内の役割分担 *「メンドウ」と「ムリ」は分けて考えよう ・githubとRedmineによるコード/タスク管理と運用例 ・CircleCIセットアップとビルドスクリプトの工夫 *ビルドスクリプトの工夫 *アプリサイズ縮小の工夫 ・テストフロー *複数のアプリと共通コードをビルドするにあたって発生した問題と導入した工夫 ・リリースフロー *DeploygateとGoogle Play Alpha/Betaと段階リリースの使い分け ・運用フロー *サポートとバグ報告及び改善リクエストフロー 導入技術編: ・SwaggerによるAPIレビューと差分管理 ・自作Gradleプラグインによる開発効率化 ・Firebaseによる各種実装やテストの省力化 *Test Lab導入によるCI実機テスト *Authenticationによるユーザー管理の簡素化 *Remote Configで管理したパラメータ *Firebase Storageの導入と問題と速度改善 *Realtime Databaseの導入と、サービス停止/ユーザー集中時のバックアッププラン *Analytics導入によるアプリ改善と可視化 *Crash Reportingによる迅速な改善 ・CI速度を力と並列化でねじ伏せた実例
【内容】 あなたのAndroidアプリプロジェクトには、テストコードはありますか? テストがなくて不安ですか? アプリが落ちた、使えない、とPlayStoreに書き込まれないか心配ではないですか? ネガティブな書き込みが増えて、ダウンロード数が減って、収益まで減ってしまったら… 不安なあなた、この機会にテストを始めてみましょう! 自動テストができれば、手戻りが減り、アプリの品質を保ちやすくなります! 品質の良いアプリはPlayStoreでは良いレビューが付き、ダウンロード数の向上も見込めるでしょう。 このセッションでは、Androidアプリケーションのテストの ・基礎知識 ・初め方 ・進め方 ・テストが容易になる設計 を解説します。 【対象】 ・テストの必要性を感じているが、どう取り組んだら良いかわからない方 ・ハマりどころなど、Androidのテスト特有の事情について知りたい方 【アジェンダ(予定)】 そもそも自動テストって必要ですか 手動で十分なケース 一般的な自動テストの種類 単体テスト 結合テスト Androidのテストの種類 LocalTest Instrumented Test Android特有のテストの難しさ android.* パッケージの問題 実際にテストしてみる Robolectric espresso mockito 良いテストケースの作り方 たくさんassertが並ぶと危険信号 テストできる設計(APIデザイン)をしよう 依存性注入 コンストラクタ引数の活用
【内容】 突然、iOSの開発現場にAndroidエンジニアが放り込まれたら… 嫌ですか? それとも、心躍りますか? 特にエンジニアが足りない組織のあなたは、すぐにでもそうなる可能性があるのではないでしょうか… 大丈夫です。AndroidエンジニアはiOS開発でも活躍する事ができます。 同じモバイルアプリケーションとは言え、開発の仕方や気をつけるところが異なるiOSの世界。 ・最速でキャッチアップし、成果を出すには ・Android開発スキルを活かすには ・エンジニアとして成長し続けるには を、実際に放り込まれた人間がお話します。 【対象】 ・トラック転生並みの無茶振りでiOSの開発現場に放り込まれそうな方 ・あるいは放り込まれてすぐの方 ・他言語/他プラットフォームでのモバイルアプリ開発を始めてみたい方 【アジェンダ(予定)】 AndroidとiOSの世界の違い 言語の壁 Java/Kotlinをやっていた人がSwiftに挑むときに気をつけたいこと 名前空間がない! protocol != interface typealiasの罠 フレームワークの壁 java.* あたりの機能に対応するのが Foundation Android Framework に対応するのが UIKit 証明書の沼 文化の壁 ストアリジェクトのリスク ライブラリの豊富さ シングルトンを使いがち テストのハードルが高い 外部ツールを使うならrubyを覚えよ 成長の壁 アウトプットが必要だが… Androidで養ったスキルをどうしよう
🏴☠️ ARrrrg! 🏴☠️ This was my first reaction reading through the code of the sample provided by Google for it's new ARCore. After the first shock, I took a close look on how the app works, and what ARCore could do for my use case: Having my virtual collection of toy figures always with me ❤️. 🤖🤴 In this talk, I will talk about Augmented Reality, walk through the current demo app for ARCore on Android and purpose a better way of writing the app, extending it to be able to read different models at different times ... Expect a bit of Computer Graphics terminology, source code watching, Pirates, and more lame jokes.
アプリは作ってリリースすれば勝手にユーザーが増えてビジネスとして成長していくわけではありません。せっかくインストールしてもらっても、操作しにくかったり使い方が理解されなかったりすると結局起動されなくなり、いずれアンインストールされます。使い続けてもらうためにはユーザーに寄り添って何度も何度も何度も継続的に改善を繰り返していかなければなりません。しかし一口に改善といっても、何を持って改善されたといえるのでしょうか?改善されたというためにはそれを裏付ける指標が必要です。その指標を得るにはログを取り、解析をしなければなりません。 ではログ自体はどうやって取れば良いのでしょうか?「ログなんか取っておけば良いでしょ?」、そんなふうに考えていた時期が私にもありました。しかしアプリを改善させるためにログ解析をしていると、ログの抜けや重複、衝突などがあり、正しく解析できないことが何度もありました。ログを取るためのトラッカーはアプリ開発者が設計して実装しなければ、そういった役割を果たせるものではないのです。 また指標はGoogle AnalyticsやFirebase Analyticsでパッと見れるものならば良いですが、アプリの個々の機能の指標を作ろうとするとHadoopやBigQueryのようなログ解析のインフラと、ExcelやGoogle Data Studioのような可視化のためのツールも必要になります。それらをうまく活用するためには、元のログを解析しやすいようにしておく必要があり、それもトラッカーを埋めるアプリ開発者が行わなければなりません。 本発表ではアプリ作るだけだった私がログ取りやログ解析を行い、実際にデータに基づいたアプリの改善を行うようになるまで、何を学び、何に気をつけて開発を行っているかをお話します。
【内容】 新規アプリの開発を担当することになったら、まず何をしますか? 開発をどう進めていきますか? そして、期日が迫っていたらどうしますか……? 既存アプリの機能追加や保守よりも、不確定要素が多くて不安になりがちなアプリの新規開発。 その分、自由にできることも多くチャレンジングでもあります。 新規アプリ開発を成功させるために、Androidエンジニアは何ができるのか。 実際に新規アプリを開発している途中(2月には大概出来上がっているはず…!)のエンジニアがお話します。 【対象】 ・新しいAndroidアプリを作ることになって、進め方に悩んでいる方 【アジェンダ(予定)】 まずは事前の聞き取りから 大切なことは何か 残り時間をはっきりさせる スケジュール延期に対する姿勢を知りたい iOS版との関係性 設計 設計を左右するファクター どれくらい時間をかけられるか 人数 エンジニアはどれくらい開発に集中できるか メンバー入れ替わりの頻度 代表的なアーキテクチャ とにかく時間がない場合の緊急手段 開発進行 ゲーミフィケーション タスクは細かく 終了条件を明確に 直後に取り組むタスクだけ見えるように Androidの罠を踏まない screenOrientation="portrait"だって選択肢の一つ Rxを使わなくてもアプリは作れる 低スペック端末は無視 もちろんツケは回ってくる
RecyclerViewは非常に自由度が高いものの、標準で提供されている機能が少ないため頻繁に有るユースケースでも実装が大変なことがあります。また実装のアプローチが何パターンも取れてしまうため、実装者や実装の時期によってコードの書き方がバラけてしまう問題もあります。私が直面した問題には次のようなものがありますが、どれも一般的なアプリでよく行うことでしょう。 - アイテムの中のクリックイベントのハンドリング - アイテムの中のSpinnerやSeekBarの操作のハンドリング - RecyclerView in RecyclerView - RecyclerViewでのセクション分け - 複数のViewTypeがあるときのスパゲティコードの回避 - Adapterクラスが乱立する問題の回避 これらの問題について実際に経験した悩みどころやそれをどうやって解決したかについてお話します。またこれらの問題は最終的にAdapter-Toolboxというライブラリの形でまとめましたのでそちらも合わせてご紹介します。
対象 アプリ開発のアーキテクチャに興味がある人 概要 アーキテクチャとしてGoogle I/O 2017で発表されたAndroid Architecture Componentsで採用されたMVVMや、Android Architecture Blueprints(GitHubのgooglesamples/android-architectureリポジトリ)にてサンプルがつくられているMVPやMVP + Clean Architectureなどが有名です。 このような数あるアーキテクチャではなくWeb界隈でよく使われているReduxをAndroidアプリ開発のアーキテクチャとして採用しました。 Reduxを選んだ理由とその特徴、実現するために使用したライブラリ、シンプルなアプリ実装例(Kotlin)、Androidのライフサイクルや画面遷移にあわせてReduxをどのように適用したのか、採用してよかった点、わるかった点、みえてきた点について話す予定です。 ※ 絶賛開発中のため結論はどこに転がるかまだわかりません。
対象 AndroidとiOSのアプリをチームで開発している人達 話すこと アーキテクチャを揃えることになった経緯と手順、結果 話さないこと Android/iOSの実装方法 概要 近年のアプリ開発ではAndroidとiOSそれぞれのネイティブアプリ開発が一般的となりましたが、各OSで仕様が異なってしまうことはありませんか?UIに関しては各OSのデザインガイドラインに従うべきですが、ビジネスロジックは基本同一になるべきです。 そこでAndroidとiOSでビジネスロジックの実装を揃えるために、共通のアーキテクチャとしてReduxを採用して開発しました。アーキテクチャを揃えることで、Androidエンジニア-iOSエンジニア間のコミュニケーションを活発にし仕様に対する認識の差を埋めようと試みました。 今回はいくつかのプロジェクトにて実践した結果を共有します。 目次案 Reduxの特徴 使用したライブラリ 揃えることで期待する点 揃えた点、揃えなかった点 採用してよかった点、わるかった点 今後の課題 ※ 絶賛開発中のため結論はどこに転がるかまだわかりません。
CleanArchitectureは各レイヤーごとに役割が明確に決まっており、大規模開発などに非常に向いている。 しかし一方、大きなデメリットとして ・DI周りの実装がそもそも解りづらい(特にDagger) ・クラス数が多くなる→単純に作業量、コード量が増える&ケアレスミスですぐ動かなくなる ・CleanArchitectureの構造を理解していないとオレオレ実装が蔓延る といったものがあるのではないだろうか。 そこで注目したのがKotlinとTemplateの存在。共通のテンプレートを作成し、それを使うことで、 ・DIの実装が解りづらい?→Templateがやってあげるよ ・作業量が増える?→Templateがやってあげるよ ・コード量が増える?→KotlinだからJavaより減るよ&読みやすいよ ・ケアレスミス?→Templateがミスしやすそうなところは全部やるよ ・オレオレ実装?→みんな同じTemplate使えば差異がぐっと減るよ という状況を作り出した。 本発表では、上記のCleanArchitectureのデメリットを減らし、最大限活用したら開発が爆速になったお話に加え、CleanArchitectureを採用したことで得られたメリットについてお話しようと思います。
新しい知識を習得するためには、実際に手を動かしてみることがいいことは周知の事実かと思います。サンプルコードを読むのも勉強になりますが、そのサンプルを自分で書きながら進めていくcodelabsはとても良い教材だと思います。 しかし、Google codelabsを(とりわけGoogle I/O後に自分だけで)いざやってみようとしても、どんなものがあるのか分からなかったり、自分の学習レベルに合うものがあるのか分かりづらかったりします。 そこで私が一通りやってみたり目を通してみたりした情報をまとめ、特にAndroid開発経験が比較的短い方がどのようにcodelabsを活用できるかを共有したいと思います。
Builds can always be faster. Whether you are a lone developer or a large team, a 10% build speed improvement adds up over the course of a project. And your time is important. If you're an Android Developer using Android Studio, you are already familiar with the Gradle build system and the Android plugin. The great news is that Android Plugin 3.0.0 and higher include major changes that bring significant performance improvements to large multi-module projects—in some cases, we've experienced builds that are 3-5X faster! Some of the improvements include: * Better parallelism for multi-module projects through a fine grained task graph. * Variant-aware dependency management. (When building a certain variant of a module, the plugin now automatically matches variants of local library module dependencies to the variant of the module you are building.) * Compilation avoidance via new dependency configurations. * Faster incremental build speed due to per-class dexing. Each class is now compiled into separate DEX files, and only the classes that are modified are re-compiled. * Faster resource packaging with AAPT2 enabled by default. In order to bring about these improvements, there are some breaking changes in the plugin behavior, Domain Specific Language (DSL), and APIs. In this talk, a member of the Android Studio team shows you how to easily migrate your project to the new plugin, resolve build errors, optimize your build configuration, and prepare your project to take advantage of future improvements to the plugin.
With every release, Android Studio improves support for projects that are written with C and C++ code. For example, the IDE now supports building C/C++ code using external build tools, such as CMake and ndk-build, and then packaging your C/C++ libraries into your APK with Gradle. As support for such projects grows, we expect the complexity of the projects to grow as well. In this talk, we explore tips and best practices to make sure your C/C++ projects can scale in complexity while limiting its memory footprint and build times.
Android NDK packaged the necessary API and tools to create low latency audio apps , high end graphics games, stunning video/camera apps, and accelerated Machine Learning applications; plus tools and Android Studio IDE to make creating Android high performance applications an pleasant experience. The session goes through Audio, Graphics, Camera, Tools and Studio IDE to help developers to create compelling high performance Android applications.
In this talk I'll go through the process Dropbox followed to go from supporting Offline Files to supporting Offline Folders. I'll focus on the things paint points of implementing it in Android, like Doze and the way Android manages storage.
# 概要 Java6から登場しているPluggable Annotation Processing API。 Dagger2やButterKnifeなどメジャーなライブラリで使われてるのは見たことあるけど自分で触ったことはないという人が多いのではないでしょうか? 普通にアプリを作っているだけだと中々触れる機会がないけど奥が深いこの機能、Android開発にどう活かすことができるのかを解説します。 # 対象者 - 毎回似たようなお決まりのコードを書くことが多い方 - Annotation Processingって聞いたことあるけどいまいち何してるのかよくわかってない方 - コード生成という単語にビビッと来たそこのあなた # 目次(予定) - そもそもどんなことができるのか - アノテーションとコード生成 - JavaPoetとKotlinPoet - Android開発の現場においてどのように活用できるのか - Kotlinから使う場合の注意点 などを私自身が作成、公開しているライブラリのコードを交えて紹介します
「対象者」 ・CIをこれから導入しようと思っている人 ・もっとCIを活用したいと思っている人 ・どのCIサービスを使えば良いのか迷っている人 「概要」 Androidアプリ開発においてCIサービスは欠かせないものになってきています。 Androidアプリ開発で利用できるCIサービスはクラウド・オンプレミスを含め色々と存在します。 それぞれのCIサービスには差異があり、必ずしもあなたのプロジェクトにあうかは分かりません。 また、CIをどこまで活用出来ているでしょうか。 そもそもCIとはなにか、CIを導入するメリットは何なのか、何に注意するべきなのでしょうか。 そこで本トークでは、CIをプロジェクトに導入し利用し続けるための話と、Androidアプリ開発で利用できるCIサービスとその特徴、そしてどのようなプロジェクトにどのCIサービスが向いているのかの話をします。
「対象者」 ・UIテストの実行時間で悩んでいる人 ・UIテストに興味がある人 「概要」 AndroidアプリにおけるUIテストは以前と比べ、実装しやすくなってきています。 そのためUIテストを実装する方が増えてきているかもしれません。 しかし、UIテストの実行時間は問題になりやすいです。 せっかく実装した価値のあるUIテストも、実行時間の長さによりあまり利用されないといったケースもあります。 UIテストだからしょうがないと諦めてしまっては勿体ありません。 本トークでは、SWETが取り組んでいるUIテストの実行時間を短くするための色々な方法について述べます。 tipsレベルからSWETが開発しているサービスまで紹介する予定です。
ARCoreが発表されAndroid OS上でTangoなどのデバイスに依存せずにARアプリを構築する環境が整ってきました。有名なARアプリでは位置情報が使われていることが多いですが、このセッションでは位置情報をどのように組み合わせてARアプリの拡張世界を作るのかを説明します。 - ARアプリで位置情報を使う方法 - 3D空間へのマップのレンダリング - 3Dワールド空間への位置情報の変換 - 精度の高い位置情報を取得する方法 - Visual Positioning Service(空間認識技術)の動向と、GPSと空間認識の連携の可能性 について基本的な知識から実践を通して得た知見まで実際のサンプルARアプリを使って説明したいと思います。
Kotlin offers a modern language design in contrast to Java, while at the same time maintaining fully interoperably: Data classes, properties, delegation, inline functions, string interpolation and much more. But, if Java can't offer these features how can Kotlin, what does Kotlin do to make it possible to use this Syntactic sugar? In this talk, we will go backstage and dig into the Bytecode that Kotlin generates to make all the features we love work on a runtime that technically does not support them. We will look at the impact kotlin code generations has on method count. Get a deeper understanding of how Object and companion object work and see the implications of the use of either under different circumstances. Finally look at common patterns that can help reduce the size of both the bytecode and method count.
7/10 developers don’t really know how to test their apps and write testable code. From practically writing code to test genuine production level scenarios with different approaches to incredibly optimising your tests cases, we will also see what’s new in Android Test Support Library 1.0. ---Outline--- -> Important Testing GuideLines -> Espresso and Robolectric (In and Out ,Crisp and To the point) -> Making Code highly Testable using MVVM , Repository Pattern and Data binding ->Pure production level Scenarios Testing Demo:- -> Will be showing the order lifecycle of an e-comm site and show how different orders states can be Unit Tested( A very genuine and typical use case applicable to almost every startup or company) -> Will be showing This with the following three approaches using Dagger 2 a.) Using Robolectric (JVM based without needing a device or emulator) b.) Using Espresso (Unit Instrumentation Tests) c.) Testing the ViewModel (Purely JVM based) -> Optimise them further (reducing test suite running time from 16s to 180ms) -> Espresso Unit Instrumentation Testing Vs Robolectric Unit Testing Vs Unit Testing MVVM architectured app (Detailed analysis including performance) -> Integration Testing Using Espresso -> Demonstrating the New Features of Android Test Support Library 1.0 -> Android Test Orchestrator -> New Features Of AndroidJUnitRunner -> Espresso 3.0 New Features -> New Test Rules ->If time allows -> UI Automator in Action -> Testing on Multiple Devices Fire Base Test Labs -> Continuous Integration Using Circle CI -> What’s More In AWS Device Farm
DaggerはDependency Injectionパターンを実現するためのライブラリになります。DIを適用することで、各クラスを生成する責務をクライアントから取り除くことなどのメリットを享受することが出来ます。DaggerはDIを実現する上で便利である一方、とても複雑です。2.11からAndroidサポートが導入されたことで、Daggerはより巨大なライブラリになり、複雑さに拍車をかけたように思えます。 しかし、Component、Moduleクラスは何をしているのか? ScopeやQualifierはどういうユースケースで必要なのか? DaggerとJSR-330との関係は? などのDaggerを構成/取り巻く要素を1つ1つ理解することでDaggerを攻略出来ると考えています。 本セクションでは、Daggerを構築している要素を1つ1つ解説していくことで、Daggerがどのように動作しているか、何をしているのかを理解することを目指します。結果、Daggerを使いこなせることが出来るようになります。
How many times do you hit Alt+Enter in a day? Intellij has a feature calls Intention/Inspection. We can customize Alt+Enter! This talk explains how to create Intention/Inspection using Kotlin based on what I released https://plugins.jetbrains.com/plugin/8424-activity-kreateintent-inspection https://plugins.jetbrains.com/plugin/8430-fragment-kewinstance-inspection https://plugins.jetbrains.com/plugin/9271-databinding-support The expected outline is followings: * What is Intention * What is Inspection * What is the differences between Intention and Inspection * How to create custom Intention and Inspection * How to test them The expected audience is: * Interested to Intellij Intention/Inspection * Interested to develop Intellij plugin
Have you ever consider creating an Intellij plugin? Do you know you can do that using Kotlin??? I have been maintaining more than 10 Intellij Plugins using Kotlin. https://plugins.jetbrains.com/author/shiraji This talk will introduce these plugins and show pros/cons about using Kotlin for Intellij Plugins. The expected topics are followings: * Basis of Intellij Plugin * Extending Actions * Tool Windows/Wizard * Custom Intentions/Inspections * Pros/Cons of using Kotlin
# 概要 最近では複雑で高品質なアプリ開発要求に対し、CleanArchitecture/MVVMなどアーキテクチャパターン採用で設計を良くしようという試みが活発に行われていますが、 根本のクラス設計に注力しなければ結局複雑化し、最悪アーキテクチャ自体が破綻します。 その一つの原因としてエンジニアが軽視しがちな、クラス/メソッド名などの「命名」があります。 また、根本のクラス設計に対してAndroid界隈ではDDDが少しずつ広まってきていますが、DDDを行う上で「命名」というのは複雑な概念を簡潔に表現するためのとても重要なファクターです。 このセッションではDDDを採用する上でのファーストステップとして「命名」にどう注力するとどんなメリットがあるのか、Activity、View、layout.xml上などでの実例を元に以下の内容を説明します。 - 命名によるクラス間の複雑さの解消と責務の適切化 - ユビキタス言語がもたらす実装速度向上 - 命名のアンチパターン - 名前が統一された世界でのコードリーディング速度 - 名前が統一された世界でのバグ検出向上 # セッションで取り扱う技術 Android(Activity/View) DDD CleanArchitecture CleanCode Kotlin # 対象者 アプリを作っていくとどうしてもコードが複雑になってしまう方 過去の自分のコードが全然読めない/読みづらい方 実装/コードリーディング速度を上げたい方 コードレビューに時間がかかってるので速度を上げたい方 DDDに興味ある方
Google I/O 2015で発表されsupport library 23から利用可能となったCoordinatorLayout。 AppBarLayoutやFloatingActionButtonと組み合わせて使うことで複雑なUIのスクロール処理を簡単に実現することができます。 しかし、これらのコンポーネントの動きをカスタマイズしたり、独自のBehaviorをもったViewを開発しようとするとBehaviorやNestedScrollがCoordinatorLayoutとどのように作用しているか理解する必要があります。 本セッションでは、BehaviorやNestedScrollがCoordinatorLayoutとどのように連携し複雑なUIの動きを行っているのかを解説し、独自Behaviorを持ったViewの作成の足がかりとなることを目標とします。
Androidアプリにかぎらず、アプリ開発は大きな裁量のある自社案件だけでなく、様々な制約のある受託案件も多く存在します。 受託をするからには「どのくらいの期間で」「何人の人員で」「おいくら万円になるのか」等を見積もり出さなくてはなりません。 「この機能ならこれくらいだな」と直感で出してしまうと、あらゆるところに待ち受ける地雷であっという間に爆発四散してしまうでしょう。 Androidアプリ固有の問題、機種固有の問題のみならず、開発フローの問題、社内政治的問題、期間の問題、そして開発者のエゴの問題などなど。 このセッションでは、アプリ開発時に感情に含めなければならないあらゆる要素について、技術的観点以外についても解説していきます。 ※講演者及び周辺人物の経験則に基づく要素が大きいということを予めご了承ください 発表内容(予定) ・Androidアプリ開発固有の問題 ・機種固有の問題 ・開発周辺環境の問題 ・関わる人間の問題 ・社内政治の問題
開発規模が多ければ多いほど忌み嫌われるモノ。 その名はオレオレライブラリ。 作った者にしか理解できず、使い方のドキュメントは整わず、どうやって導入したらいいのかもわからないオレオレライブラリを、なぜ作るのか。 楽しいからである! このセッションではオレオレライブラリを実際のプロジェクトに導入する際の注意点、「欲しいものが無いから」「技術向上のため」「純粋にコードを書くことを楽しむ」といった理由のために書いたオレオレライブラリの顛末について解説します。 レッツ・オレオレライブラリ! 発表内容(予定) ・実際に作ったライブラリたち ~奴らは何故生まれたのか~ ・失敗談 ~こんな導入方法はやめよう~ ・実際の運用例 ・いつ導入して、いつ導入しないか
▶対象 ・Protocol buffers に興味がある人 ・Protocol buffers の導入を悩んでいる人 ▶概要 APIのレスポンスとしてJsonが使われることが多いと思います。 一方でProtocolBuffersを使用しているプロジェクトも増えてきており、興味があったり、導入を検討している方も多いと思います。 このセッションでは、ProtocolBuffersを用いたAPI通信ための導入方法や、実際にProtocolBuffersはどのくらい早いのか?など、導入する際のメリットやデメリットなどを話します。 ▶内容 ・ProtocolBuffersとは ・ProtocolBuffersの導入方法 ・ProtocolBuffersのメリット・デメリット ・ProtocolBuffersとJsonの比較 (レスポンススピード、運用方法など) ・ProtocolBuffersでgRPC
Androidの公式言語として仲間入りしたKotlinの初学者向けハンズオンです。 Kotlinの概要と誕生の背景から始め、 Kotlinの基本文法、クラスやオブジェクト、拡張関数を学び、体験します。 実際に手を動かす課題としては、FizzBuzzなどの簡単なものから、 クラスの定義とその機能追加などちょっとだけ本格的な内容も含みます。 Kotlinの言語そのものにフォーカスしているため、 本セッションで得られる知識は、Androidに限らず他の分野でも応用できるでしょう。
参加者が、既存のAndroidアプリをKotlinで書き直すコードラボです。 題材となるAndroidアプリは、Javaで記述された単純なアプリです。 これをKotlinで書き直して、JavaからKotlinへの移行を図ります。 Kotlinについてわからないことがあれば、もちろんサポートします。 セッションの後半では、Kotlin移行で得られた知見や難しかったところなどを共有・ディスカッションします。 Kotlinを試して、良いところ悪いところを理解し、業務での導入につなげていただければ嬉しいです。
▶対象 ・Androidで動画を扱うアプリに携わっている人 ・Androidの動画周りに興味がある人 ▶概要 画像やテキストが主流だった時代から動画の時代へと移り変わってきました。そこで、今回はAndroidで動画を扱うために必要なTipsなどをお話できればと思います。 動画Player周りでは、Androidで主流になっているExoPlayerを使って説明していく予定です。 最後にインスタのライブ配信やFacebookライブの様なライブ配信をAndroidでどう実現するかや実際にそのデモを行います。 ▶内容 ・動画の配信Protocolと概要 (MPEG-DASH, HLS) ・Androidでの動画再生 with ExoPlayer ・ExoPlayerでできることとその内部実装 ・Androidで動画配信 ・Androidでライブ配信 (デモ)
■対象 アーキテクチャに悩む人 ■背景 アーキテクチャを選択するとき、どのように選択していますか? 選択するためには、たくさんの時間を使って、読みやすいか、拡張しやすいか、メリット、デメリットを考えていく必要があります。 しかし、時間が取れずに、とりあえずMVPを選択、、などという形で選択してしまう事が現実として多いです。 そのようなことを減らしたいです。 ■セッションの内容 自分が実際に苦しんでアーキテクチャの選択を行い、カンファレンスアプリのアーキテクチャを選ぶ上でどのように考えていったかを説明します。これにより、皆さんのアーキテクチャの選択を楽にしたいです。またOSS開発の中で改善した点があれば取り入れて話します。 ■大まかな目次 ・まずはDroidKaigi 2017アプリについて知ろう ・今回のアプリの目的 ・まずはいろんなアーキテクチャを軽く知ろう ・Android Architecture Blueprints ・MVP ・MVVM ・Clean Architecture ・Android Architecture Component Sample ・Google I/O 2017 ・Flux ・どのアプリが今回のカンファレンスに向いているか? ・最終的な設計
■対象 マテリアルデザインでアプリを実装したいけどどう実装したらいいのかわからない人 ■背景 マテリアルデザインで実装していくためにはさまざまな知識が必要となります。 しかし、それぞれの必要となる知識はかなり分散しており、まとまっていないのではないでしょうか? それにより、マテリアルデザインのために必要な知識が得られず、てきとうな実装になってしまっていませんか? ■内容 マテリアルデザインを支える技術は説明しませんが、 Google I/Oアプリ、Plaidアプリ、android-topekaアプリなどを参考にしながらカンファレンスアプリを実装し、カンファレンスアプリの実装を例にしながら、 Theme, Typography, Support Library, ConstraintLayout, Motion, Notificationなど、さまざまな観点からマテリアルデザインに必要となる実装を総合的に見ていきます。 ■大まかな目次 ・Themeの設計 ・Styleの設計 ・Typographyを実現する ・ConstraintLayoutを活用してマテリアルデザインのレイアウトを作る ・Motionを取り入れる ・マテリアルデザインに対応する10のTips
MVP? MVVM? MVI? Clean Architecture? In a world with so many different ways to build something how do we keep up, let alone know what one we should use. With all these choices, it can be easy to start off on the wrong foot or be put off of from exploring other options from what we are used to working with. In this talk, I want to explore the different options we have when building the foundations of our android projects. I’m not looking to make you a software architect, but having an understanding of each of these, along with the benefits each can bring, can help you and your team to make the right decisions for the project you are creating to ensure a smoother project lifecycle.
■背景 Downloadable FontやEmoji Compatibility Libraryなどの便利な便利な機能が存在します。 しかしこれを活用する知見がまだ少ないのではないでしょうか? ■内容 どういう仕組で動いているのか。 実際にCalligraphyをDownloadable fontに置き換える方法。 Emoji Compatibility LibraryのMinimum SDK Version 19にどう対応するか。 どうやってテストするか。 など実践的なところを紹介していきます。
■背景 Android Oへの対応ができていないアプリはとても多いのではないでしょうか? モダンな機能に対応していくことによりユーザーの体験を最大化させることができます。 ■このセクションでどう解決するか? それぞれの対応方法を具体的にまとめて、紹介します。 ■大まかな目次 ・Adaptive Icon ・Notification Channel ・Target SDK Oにするときの変更点 ・...
Droid Kaigi 2017 で How to apply DDD to Android Application Development という講演を行いました。本セッションはその続きです。 前回ドメイン駆動設計とは何か、何をするのか、を解説し、戦略的設計について話しました。今回は戦術的設計について踏み込みます。 様々な手法があるなかで、ドメインを隔離することをテーマに、Androidアプリ開発で取り入れやすいエッセンスを紹介します。 前回同様ドメイン駆動設計の内容については「エリック・エヴァンスのドメイン駆動設計」及び「実践ドメイン駆動設計」に準拠します。 本セッションはドメイン駆動設計の前提知識がない方にもわかるようお話ししますが、前回の動画 https://academy.realm.io/jp/posts/droidkaigi17-how-to-apply-ddd-to-android-application-development/ を見ていただくか、内容をまとめたブログ http://y-anz-m.blogspot.jp/2017/03/droidkaigi-2017_9.html を読んでいただくことをおすすめします。
■対象 Daggerの基本的なところしか理解していない人 ■背景 Dagger2、皆さん理解していますか? Scopeなどの基本的なところはなんとなく分かっても、 実際にArchitecture Componentのサンプルで使われているDispatchingAndroidInjector、AndroidInjector、Providerと言ったクラスや ActivityやFragmentのインスタンスの管理のされ方をご存知でしょうか? Dagger2を雰囲気で使っている問題があります。 ■内容 Dagger2の機能の詳細な説明と、実際のプロジェクト(Architecture Componentのサンプル,カンファレンスアプリ)で使われているDaggerを使った設計(及びDagger2とArchitecture Componentの関わり)、アノテーションプロセッサによって生成されたソースコードを分かりやすく図解などを行い、説明を行います。 ■大まかな目次 ・Dagger2の基本的な機能 ・Dagger2の実際に設計で使われている機能 ・AndroidのコンポーネントとDagger2 ・Architecture ComponentとDagger2
■背景 手動によるテストのときにサーバーの環境を切り替えたり、ABテストのAとBを切り替えたいということはありませんか?その時にあなたはどのように対応していますか? プロダクションのコードに手を入れたapkを渡したり、またはデバッグ用のコードをプロダクションのコードに埋め込みダイアログなどで変更できるようにしているのではないでしょうか? 変更できるようにすることはバグが発生しやすい実装となります。その部分でバグが発生してしまっては本質的な部分に集中できません。 ■内容 この問題に対してAOP(アスペクト指向プログラミング)を用いて、解決しているので、実際に利用している仕組みをオープンソースにし、紹介していきます。
Performant applications are one of the key drivers of success in the mobile world. Users may abandon an app if it runs slowly. Learning how to build applications that balance speed and performance with functionality and UX can be a challenge; however, it’s now more important than ever to get that balance right. This session will show you how to wring the most from any hardware your app is installed on, so you can increase your reach and engagement. An introduction to state-of-the-art Android techniques and the importance of performance in an Android application will be introduced, and later we will slowly walk through the Android SDK tools regularly used to debug and profile Android applications, learn about some advanced topics such as building layouts, multithreading, networking, security and battery life (one of the biggest bottleneck in applications).
As Android developers we are aware of fragmentation in the Android OS, but what about fragmentation in Continuous Integration for Android? There are many different platforms out there that we can use in our CI process. Each of them offers many different possibilities and set ups. In this session, we will have a walk around all the different possibilities we can have. You will discover new platforms, see new things you can do in your platform of choice and be a little bit wiser after attending.
They say a perfect marriage is all about communication - that is why Firebase and Cloud Functions are such a perfect couple. Firebase is what we have convened into calling a Serverless Framework. You do not need to set up any infrastructure behind your app, you can connect it easily with Firebase and have access to a lot of functionality. In this session, we will showcase different examples of how the Cloud Functions can be used in conjunction with Firebase, and how this can improve the functionality of our sample app.
■ 対象 - デザイナーの頭の中身を知りたいエンジニア - エンジニアの頭の中身を知りたいデザイナー - 他のチームの開発フローや開発環境、開発体制を知りたい人 ■ 概要 例えば、プロフィール画面のデザインリニューアルが必要になったとき、 デザイナー:『ボタンやチュートリアルが出るパターンがあるなぁ…共存したときの見た目考慮しよう』『写真が設定されてないときもユーザーを不快に感じない見せ方はないだろうか?』 エンジニア:『通信エラーの時の表示はどうなる?』『ローディング中の画像と写真未設定時の画像は一緒?』 あれ????考えてること全然違くない・・・!??? この考えの差を埋めて爆速開発するために、お互いの頭の中身やお互いが求めてることを実際の例を交えてお話しします。また、Androidアプリ開発に役立つデザイン周りのお話をします。 ■ アジェンダ - 開発フロー - 開発速度が上がるツール - お互いやりとりする上で気をつけてること - お互いやりとりする上で気をつけてくれたら嬉しいこと - iOSファーストなビジネス陣…Android意識を上げるための取り組み
弊社アプリ、GANMA!はAndroidもほぼフルScalaで開発しています。 このセッションでは、どのようにScalaを使って開発を進めているのか、環境構築の方法やScalaでAndroidのコードをどのように書いているのか、JavaやKotlinと比較しながら解説したいと思います。 - 開発環境の構築 - Scalaのコード紹介(Java, Kotlinとの比較) - Scalaでの便利な書き方(implicitやTryなどの活用方法) - Scala -> Java -> Kotlinでコンバートしたらどうなるの? などなど
■ 対象 既存アプリのコンポーネント化を考えてるエンジニア及びデザイナー ■ 概要 現在担当サービスにおいて、UIのコンポーネント化を進行中です。(11月完了予定) コンポーネント化を進める上で必要だったノウハウや、そこで得た反省、ハマった箇所、またやり終えての効果等についてお話します。 ■ アジェンダ - 経営陣への説得方法 - 前準備に必要なこと - 段階的な進め方 - 使用したツール、環境 - AndroidとiOSの差異の吸収(名前の付け方、UIの差異) - Androidのコンポーネント化のノウハウやハマったところ - やり終えての効果
AndroidのNotificationはバージョンアップを重ねるごとに進化を遂げています。そのため、OSバージョンごとに機能や見た目が全く異なります。バージョン互換性を保ちながら、各バージョンごとに相応しい通知表現を実現するにはどのように実装するべきなのでしょう。このセッションではNotificationのベストプラクティスを目指します。 - Notificationのアンチパターン - Notification進化の歴史 - 通知チャンネル(New!)について - ベストプラクティスな実装とは? などを予定
ビックカメラのキャンペーンに釣られてまんまとGoogle Homeを買ってしまった話者がベッドか一歩も動くことなく部屋の様々な家電をコントロールできる怠惰な生活を目指したドキュメンタリ。Raspberry PiにAndroid Thingsを入れて実現します。 - Google Homeのいいところを語ります - 必要なハードウェアを揃えます - Android Thingsでセンサーを読んだりLED光らせたり、要するにリモコンを作ります - みんな一緒でみんないい
プルリク駆動勉強のススメ 勉強行き詰まっていませんか?プルリク駆動勉強をしてみませんか? Androidでは多くのOSSを利用して開発を行います。使うだけではなく、コントリビュートすることによって勉強資料としてみませんか? 想定している聴講者 * 息をするようにpull requestを投げられない * プログラミングの基礎は勉強したけど、今度どうすればいいのわからない 話さないこと * AOSPのコントリビュート方法(私が知りたい) * コードの書き方 * git/GitHubの使い方 アウトライン * プルリク駆動勉強とは * プルリク駆動勉強の条件 * 必要なスキル * 注意点
We launched Santa Tracker app for Android several years ago, that became a huge success with millions of users and now it is considered as an annual event that tells everyone that holiday season is coming. But at the same time, we have worked on the same codebase since we started that resulted in the increased complexity to the extent of not being able to adding a new feature or fixing bugs easily. Also adding tests to the existing code was also hard because much of the business logic was glued to Activities or Fragments. To address the issue, we tried to convert the code into using Architecture Components and Kotlin to achieve - Maintainable code by decoupling the responsibility of each class. - Testable code In this talk, I'm going to explain how we made that happen and what worked good or what could be improved more.
ObjectBox is a relatively new NoSQL database for Android. It offers tempting features, such as outstanding performance, an object API and automatic schema migration. In this talk we will make a comparison to existing solutions, such as Realm and Room. We will take a look at the different features and get our hands on code, diving into the pros and cons of the library.
# 概要 (50分としていますが、30分も多分可能です) Androidアプリに限らず、昨今のウェブサービス・アプリの通信周りでは専らRESTとJSONが使われていることと思います。 そんな中、現在私達が開発しているアプリではREST + JSONではなくgRPC + Protocol Buffersを使うという選択肢を取りました。 gRPC, Protocol Buffers共にGoogleが開発した新しい通信フレームワークおよびシリアライズフォーマットです。様々な魅力的な特徴がある一方で、まだまだ採用例が少なく情報も充実していないのが実情です。 そんなgRPC + Protocol BuffersをどのようにAndroidアプリ開発で用いるのか、メリットやデメリットは何なのか、開発の上で工夫した点などをお話できればと思います。 # 内容(予定) - gRPCとは何か - Protocol Buffersとは何か - Androidアプリにおけるメリット・デメリット - gRPC + Protocol BuffersをAndroidアプリ開発に導入する - 実際の開発の際の工夫、苦労する点、etc # 主な対象者 - REST + JSON以外の選択肢を検討したことがなかった人 - アプリ開発でRPCを使いたい人 - サーバ・アプリエンジニア間でJSONレスポンスの仕様共有に苦労している人 - 新しい技術に積極的に挑戦してみたい人
■ 対象 - チームビルディングに興味のある人 - 他のチームの開発フローや開発体制を知りたい人 ■ 概要 自分の所属するAndroidチームはチームビルディングに力を入れています。具体的にどのような方法を取り入れてるのか、それによってどのような効果を生み出しているのか、チームの1メンバーの視点からお話しします。 また組織全体としても様々なチームビルディング方法を試みていますので併せてご紹介します。 ■ アジェンダ 自走するAndroidチーム - 開発フロー、開発環境 - チームビジョン・ミッションステートメントの設定 - メンバーの強み・特性を知る方法と活かし方 - モブプログラミング etc マネジメント3.0に取り組む組織 - 権限移譲 - 1 on 1 - 目標設定(個人、組織) - 360度評価 - 役割マップ - チーム内懇親 etc
スクロールやタップなどのユーザー操作に対し、適切な反応を返したりアニメーションを効果的に用いることはユーザー体験を高め、アプリの品質向上に繋がります。 しかし、こういった「インタラクション実装」は要件が多様であり、工夫しなければならない点が多々あったりします。 そこで、本セッションでは様々なユースケースに応じたインタラクションとその実装方法を紹介します。 ユースケース例 - アイテムタップ時のRippleエフェクト - スクロールに応じたパララックスエフェクト - ブラー背景でのコンテンツ表示 - 長押しメニュー表示 - スクロール位置に応じたアイテムサイズ変更 - 画面遷移アニメーション etc
AndroidTVデバイス向けのOreo対応進んでいますか? AndroidOから新たに追加されるRecommendations Channelsの話を中心とした、AbemaTVでの開発のTipsを紹介します。 またテレビデバイス向けのUI改善についての小話も紹介します。
調査検証の目的でサービス運用中のアプリに検証用コードを仕込み、Google Playのアルファ版にアップロード。 調査完了後、調査用アプリを無効にする為、アルファ版にアプリをアップロードし直すと、エラーが発生し、元に戻せない。。 何と、手違いにより調査用アプリのtargetSDKVersionが引き上げられており、Google のダウングレード禁止ポリシーに抵触していた事が判明。 アプリとしての機能を満たす為にはどうしても、元のtargetSDKVersionに戻す必要がありますが、 Googleのサポートにも「元に戻す事は出来ません」とサジを投げられてしまいました。 この絶体絶命のピンチをどのように切り抜けたのか?問題が発生した経緯と、どのようにこの問題を解決したかのお話をさせていただければと思います。
Lollipop以降、非推奨となったActivityManagerクラスのgetRunningTasks。 このAPIの置き換えに頭を悩ませた人も多い事でしょう。 getRunningProcesses/getAppTasks/UsageStatsManager/AccessibilityService/ActivityLifecycleCallbacks… それぞれにクセがあり、確実な方法ではないかもしれませんが、APIの特性を把握すればgetRunningTasksの代替となり得ます。 そもそもgetRunningTasksをどのような目的で使用していたかによって、どのAPIに置き換えるべきなのかの最適解も異なりますので、私が思う、それぞれの用途に合わせた代替の最適解を解説させていただきます。
アプリケーションをリリースしたあとに切って離せないのが、ユーザーのサポートです。 このセッションでは、Androidアプリを作るにあたって、ユーザーのサポートをどうするべきなのかについてお話したいと思います。 【対象】 ・これからAndroidアプリを作ろうとしているがサポート周りどうしようと思っている方 ・サポート担当者からからいい感じに作ってと言われたがどうしようかと悩んでる方 【アジェンダ(予定)】 ・Androidアプリにおけるカスタマーサポートの考え方 ・よくある課題 ・サポートを円滑にするためのログ戦略 ・サポート部門との接し方 ・アプリのクラッシュ、エラー監視の仕方 ・カスタマーサポートを円滑にするための体制作り また実際に開発中のアプリを例にしながら、具体的な話をしたいと思います。
Android管理の高度化・標準化を実現するために企業でのAndroid端末の使用をサポートするためのプログラム「Android Enterprise」 会社から支給するデバイス向けに、利用端末を企業の監視下において管理できる「DeviceOwnerMode」とBYODでの利用に最適な、端末内のデータを個人領域と仕事領域に分け、仕事領域のみ企業の監視下で管理できる「ProfileOwnerMode」等があり、端末のセキュリティをより強固にする事が可能です。 このセッションではAndroid Enterpriseプログラムについての詳細や、ProfileOwnerMode/DeviceOwnerModeにおいて、どのような端末の制御が可能なのか? 等のお話をさせていただきたいと思います。
昨今のAndroid開発において、Gradleはビルドを司る重要なシステムです。その動作を司るbuild.gradleには、アプリ開発における効率を高める無限の可能性がありますが、気がついたらいつも同じスクリプトをコピー&ペーストしていたりしませんか?その改善をプラグインとして作り、公開することができれば、自分だけではなく世界の開発を改善することができます! このセッションでは、Androidのビルド改善に取り組もうとしている&既に取り組まれている方を対象として、Gradleプラグインの作成を最小の構成から始め、そのデバッグ方法や、単独のプロジェクトへの切り出し、公開方法までを手順を追って紹介します。 プラグインというと難しそうに感じますが、その実態はただのJavaクラスです。新しいファイルを作ることさえなしに、まずはbuild.gradleの中で定義することから始めましょう。
■対象者 ・Espressoで自動テストを書いてみたものの、不安定なテストが多くて困っている方 ・Espressoでテストを自動化する範囲をより広げて行きたい方 ■概要 AndroidのUIテストツールであるEspressoの特徴の1つに、 「UI操作に関する同期(待ち合わせ)処理を自動的にやってくれる」 というものがあります。 公式ドキュメントによると、この自動同期機能の恩恵により、 テストコードで明示的にwait/sleep/pollingを書く必要がなくなる、とも書かれています。 ところが、RxJavaなどの非同期処理を主体としたフレームワークが広く採用されるようになってから、Espressoの自動同期機能がうまくいかず、UIが更新される前に次の操作が実行されてしまい、テストが失敗するケースに直面することが多くなってきました。 皆さんの中にも、UI更新の待ち合わせがうまく行かず、その場しのぎにsleepを挿入した経験の有る方がいらっしゃるのではないでしょうか? このセッションでは、Espressoの自動同期処理が何をしてくれるものなのか? Espressoの自動同期処理でうまく行かないときにどうすれば良いのか? という疑問を解決すべく、最新のEspresso 3.xの実装にもとづいて、以下の内容について解説します。 ・Espressoが提供する自動同期機能が保証してくれること・くれないこと ・Espressoの同期処理をカスタマイズするIdlingResource APIの概要 ・Espressoが提供しているIdlingResource実装の紹介と、その使い道 (一例として、RxJavaの非同期処理を待ち合わせる方法も紹介します) ・最後の手段: IdlingResourceを使わずに、簡単に同期を取る方法 このセッションを聴いた方が、 タイミングによって失敗してしまうような、 不安定なEspressoテストを自力で修正できるようになることを目指したいと思います。
Pretty much every web developer seems to know at least something about Google Analytics and how to use it in a web context. Within the app development landscape, it seems that Google’s “equivalent”, Google Analytics for Firebase, is rather under-utilised by app developers. Firebase Analytics has been around since mid-2016 and allows fine-granular analysis on user behaviour by segmentation and audience management. This talk will provide an introduction in how to use Firebase Analytics in the context of app development. The focus will be on Android with code samples in Kotlin and Java but will also contain a couple of very brief side-steps into what’d be different for iOS- and Unity-developers. Topics covered: - Library setup and basic integration - Google Analytics events vs. custom events - Managing and tracking user properties - Firebase Analytics projects and reporting on them - Integration with Google Tag Manager and other Firebase products
How many times have you heard this or similar: “Hey, can’t we just build a ‘wrapper’ app around our mobile web site or web app? We just need to be present in the Play Store with anything, really”? Then you start to explain to people why that is a good or bad idea and how their mobile web app might be completely wrongly architected for such an endeavour. At this point the topic of Phonegap usually pops up and “that it should just take a couple of minutes to get that all done, right”. The story goes on and on from here. But in all seriousness, Android’s WebView has its place. It’s a reasonably versatile and more or less well designed component Android developers can use to embed browser-based elements into their app. And yes - it can also be used to drive a complete mobile web app inside of your actual Android app. But it is clearly its own beast and it can create a lot of havoc in the heart of your app, too. Starting with having to deal with performance problems, having to implement support for older implementations of the Android WebView in your Markup, CSS and JS code, up to inadvertently opening up potential security holes. This talk comprises multiple parts. After an introduction of the WebView as a concept and the current fragmented WebView implementation landscape we’re going to have a look at the APIs involved. From there we’ll talk about how to get a basic implementation of a properly secured and well-working WebView component setup in your App. That alone can contain a variety of rather unexpected challenges. If you haven’t had enough at this stage, it’s gonna get really interesting. How can you deal with what we’ve coined lovingly “OAS” - short for Old Android Support - in your WebView? And how to find out which of all the modern web API stuff you’d probably happily use in a modern version of Chrome? Can it actually be used in your WebView-based Android-App and at what cost?
Since the release of Kotlin 1.1 there is now the new language feature of Kotlin Coroutines available for use in Java and Android projects. Coroutines are a new way to write asynchronous and non-blocking code. They can be thought of as light-weight threads without having to deal with all the problems that threads bring to the table. A lot of developers think that Kotlin Coroutines are mainly or only useful for Kotlin on the JVM, but that’s not true. There are a variety of use cases in which the application of Coroutines can make a lot of sense on Android. This talk is introducing the ideas behind Kotlin Coroutines, showing how to use them in Kotlin code for both the JVM and Android via the kotlinx-coroutines APIs and then exploring specific applications in Android. Part of this is a deeper look into the use of Coroutines in higher-level frameworks such as AsyncAwait and Anko.
Let's talk about code quality. We all agree that our code needs to be functional so that it meets business requirements. We also should aim for code that is well written and maintainable for future changes. There are a lot of elements playing into that. A well thought through system architecture is an important foundation. The selection of an appropriate framework could be the next step. In the end you might look at how to format and write your code on a line-by-line basis. This talk will provide an introduction into Android code quality. We will briefly look at various aspects around this term first. From there we can investigate different ways how you can perform code analysis. This will help you measure and understand code quality. There is a range of categories of tools available for the Android ecosystem.
Androidアプリ開発における難しさの1つは、不連続性です。たとえば、通信中に画面回転をした場合、その結果を受け取るにはどうしたらよいでしょうか。あるいは、商品詳細画面で商品をお気に入りに追加したあとに商品一覧に戻ったときに、一覧画面でもお気に入りマークを正しく表示するにはどうしたらよいでしょうか。 このトークでは、画面回転や画面遷移における代表的な不連続性を取り上げ、それぞれにどのような対応が選択肢としてあるかを紹介します。 前半では典型的なユースケースを例にどのような不連続性があるか紹介します。たとえば、画面回転ではアクティビティが再生成される一方で、setRetainInstance(true)にしたFragmentやLoaderは生き残ります。それを利用することで画面回転をまたがったデータの保持が可能です。しかし、画面遷移においてアクティビティが破棄されていた場合は、onSaveInstanceStateでデータを保存してやる必要があります。さらに、Low Memory Killerでアプリのプロセスが殺された場合は、Applicationクラスで保持していた情報も失われてしまいます。 このように、Androidアプリにおける不連続性の種類と特徴を理解することが、適切な対応への第一歩となります。 後半では、不連続性を克服するための手段として、つぎのような手段を紹介します。それぞれについてメリット・デメリット、向いている用途について解説することで、トークを聞いた開発者が、それぞれの不連続性に対して適切な対応を取れるようになることを目指します。 1. AsyncTask 2. Loader 3. Architecture Component 4. RxJava 5. Kotlin Coroutine
iOSエンジニアは必要に迫られてATS対応というものを実施しているようですが、Androidエンジニアは何もしなくていいのでしょうか? 本セッションでは、HTTPS通信の役割と仕組み、Android MのusesCleartextTrafficの設定、Android NからのNetwork Security Configurationの設定について解説したいと思います。 また、HTTP Public Key Pinningについても触れます。 本セッションを通して、ユーザーがより安全にアプリを利用できるようにするために、Androidエンジニアとして何ができるかを考えるきっかけにできると幸いです。
2008年にリリースされて以来、Androidは猛烈なスピードで進化し、多くの開発者に愛されて発展してきました。 本セッションではこの9年間の(そしてAndroidが生まれる前にどのような設計思想を持って作られたかという点も踏まえて)アーキテクチャの進歩を振り返り、アプリケーション設計のトレンドを予測します。 通常のセッションではなく、聴講者と発表者が対話し、ディスカッションしていく(TEDのような)スタイルにて講演を実施します。これまでやったことがないチャレンジングな手法です。 講演を通じて、Androidの根底を支えるライフサイクル、ActivityやView、XMLによるUIの分離という設計思想からMV-Whateverなどのアプリケーションのデザインパターンに至るまで、そして今後どのような未来に向かっていくか、Architecture Componentsなどが登場した経緯を紹介します。 ディスカッションしながらすすめることで、これらのライブラリ、デザインパターンが解決したかった問題に触れられます。参加者がAndroidの歴史を追体験でき、単純に学ぶよりも楽しく学べ、初学者から中級者の理解を助けます。 "2017年の東京、新宿に住むエンジニア、マーティ・マクフライはAndroid歴史学者であるドロイド博士(通称ドク)を手伝って、タイムマシンの実験を行う。タイムマシンに改造されたデロリアンDMC-12が到着した先にはガラケーしか存在しない時代だった。デロリアンに乗った2人は現代のAndroidまで帰ってこれるのか?!"
With large developer teams on an Android project the your builds on the CI have to wait a lot of time before you find out if you broke it. In this session, I'll show and teach you how to leverage Docker to run your builds in containers. I'll also teach you how to setup Gitlab Pipelines for your builds.
# 概要 サービス提供者間のデータ連携が活発になるにあたり、認証・認可の重要性が一層増しています。そのような背景に応じてか、Google Identity Platform上のAndroidの機能が続々と登場しています。また、OAuth2.0などの技術標準がより一般的になってきました。これらを上手く利用し、ユーザー体験の利便性を損なわない、セキュアなAndroidアプリを作る方法についてお話します。 # 扱う技術(予定) - Firebase Authentication - SMS Retriever - Smart Lock - OpenID Connect(+ OAuth2.0) - FIDO # 詳細 "スマートフォン(スマホ)を使った金融サービスを生みやすくする。(中略) 同じサービスに同じ規制をかけ、銀行とフィンテック業者が連携しやすくする" と金融庁は宣言しました。Fintechに限らずサービスプロバイダは、ユーザーのデータをAPIなどを介して提供・利用し、新しい体験を創造していく流れが加速するでしょう。 その際に鍵となる概念が、"認証"と"認可"です。サービス提供者は、別のサービスのAPIを叩いてデータを提供してもらうには、ユーザーに**認可**をもらう必要があります。そして、認可の操作の前に、正しいユーザーを**認証**しなければなりません。 この認証と認可には、一般的にOAuth2.0、それを取り込んだOpenID Connect, FIDOといった技術仕様があります。また、Googleが提供しているFirebase AuthenticationやSMS Retriever APIなどもあります。 では、そのような技術・標準・APIをAndroidでどのように適用すればいいのでしょうか? 本セッションでは、上述した技術や標準をAndroidアプリで使う場合の実装方法・気にすべきポイントといった部分についてお話させて頂きます。
For many, OkHttp is just a http-client library. People just plug it into the project, often without even tuning it. Some Retrofit itself will create an http-client instance with default settings. In fact, OkHttp is a powerful combine that covers most of your needs when using Http. Many of which work out of the box or after a minimal adjustment. In the report I will tell you about the internal architecture of the library, about the difference between network interceptors and application-level interceptors, about gzip support and autorets, authenticators and pinning of certificates. At the end, I will share practical advice on using various library tools and fine-tuning the client by squeezing the maximum out of it
- 対象者 バージョンアップの対応につらみを感じている方々 - 内容 Androidアプリを開発する際にはライブラリやビルドツール等の様々なツールのバージョンを意識しながら開発する必要があります。 更にはそのアプリは作ったら終わり、ではなく、利用しているライブラリやビルドツールのアップデートに対応せざる得ない場面が出てきます。 こういったバージョンアップデートに対して社内の対応コストを全体的に軽減するためのサービスを作りましたので、そのサービスのご紹介をします。 - 目次案 - なぜ必要だったのか? - 何を作ったのか? - システム構成 - フロー - 導入してから
Android アプリの開発で役に立つ RxJava にはたくさんのプラグインがあります。このセッションではRx~~と名の付くプラグインにどんなものがあって、どういう場面で役立つのかを紹介していきます。 - RxLifecycle - RxJavaString - RxBinding - RxJavaAsyncUtil and so on...
■対象者 Instant Appsの概要を知りたい方 既存アプリをInstant Apps対応しようと考えている方 これから作るアプリのInstant Apps対応を見据えた設計にしたい方 ■概要 Google I/O 2016にて発表された1年後、Google I/O 2017でようやく一般開発者も可能になりました。Instant Appsは、アプリをインストールすること無く、直ぐにネイティブアプリと同等の動作をすることが出来るため、ユーザ体験が著しく向上します。 既にアプリの数が溢れているこれからの時代、対応は必須なのではないでしょうか? しかしながら、Instant Appsはapkのサイズが4MBという制限が設けられていて、既存アプリをInstant Apps対応するには一手間加える必要があります。 このセッションでは、Instant Apps対応の基礎知識と共にモジュール設計から、DIを含む既存アプリの移行にフォーカスを当てて解説していきます。
ここでははじめてAndroidでUnit Testを書く人、これからUnit Testを増やしていきたい人を対象としたハンズオンを行います。 ・基本的なアサーション ・Mockitoを使ったモックやスパイ ・SQLiteを使った部分のUnit Test ・Robolectricを使ってAndroidフレームワークのコードを利用した部分のUnit Test ・非同期処理のテスト 等をカバーします。 対象とするコードはDroidKaigi公式アプリ等の実践的なものとし、より現場に近い状況でどのようにUnit Testを書いていくかにフォーカスしたいと思います。
ご存知の方も多いと思うが、 class ファイルからコンパイル前の Java 文に逆コンパイルすることはある程度可能である。これは DEX ファイルでも同じであり、 DEX ファイルから元の Java プログラムに逆コンパイルすることも同じである。 場合によっては、 DEX ファイルからの逆コンパイルを防ぎたいこともあるだろうし、 DEX ファイルに改変、改造を加えられるのを防ぎたいこともあると思う。このセッションでは、 DEX ファイルを暗号化するための基礎となる技術である、 DEX ファイルの動的ロードについて話す。なお、このセッションでは、 DEX ファイルの具体的な暗号化方法や鍵の保管方法については触れない。
UI tests are useful not just for catching regession issues in your app but can also help speed up your development at the same time. But it can be difficult to get started: UI tests can be intimidating, and they seem to take lots of time and effort to write. At Simple we've architected our app and test code so that it's easy to do most development even while offline, including writing UI tests. Why not make your life easier by writing your UI tests while you develop? In this talk, I'll show you how you can do it too.
■対象 ・脳みそが筋肉でできているAndroidエンジニアからある種の勇気をもらいたい方 ・個人でAndroidアプリを完成させて記念すべき1作目をリリースしてみたい方 ・個人Androidアプリで10万ダウンロードいってみたい方 ・Androidアプリエンジニアだけど微妙に職に困ってる・今の待遇に不満がある方 ■お話する内容 個人アプリ開発において 「そこそこダウンロードしてもらえるアプリ」を 「作る・完成させる・リリースする」ために 実践してること、してないこと ■お話しないこと AndroidStudioの使い方とか プログラミングのこととか ■本邦初公開 ・どっきどき!スクレイピング怒られ事情 ・どっきどき!GooglePlay(AppStore)怒られ事情 ・一生内緒にするつもりだった!書き込みゼロのアプリ内掲示板をアクティブにした裏技
■対象者 やむおえず1Activityの必要に迫られた方 Bottom Navigationを用いたアプリを作ろうと思っている方 (選択肢の一つとして) ■概要 2016年3月頃にMaterial Designガイドライン上にBottom Navigationが追加され、最近ではAndroidでもBottom Navigationのアプリが増加しています。 しかしながら、Bottom Navigationのベストプラクティスは未だに確立されておらず、設計に悩む方もいるのではないでしょうか? 現在開発に携わっているFRESH!というアプリでは、YouTubeの動画プレーヤーの様に画面遷移でも動画のインスタンスを保持する為、 1Activity複数Fragmentで実装されていますが、CrashFree率は99.95%以上を保てています。 このセッションでは、どのような設計を用いて複雑になりがちなActivityやFragmenの管理をしているのか、どのようにして各インスタンスを管理しているのか、Fragmentを複数使う場合は何に注意をすれば良いのかを解説していきます。 Bottom Navigationを用いたアプリの設計の一つの選択肢として、参考になれば幸いです。 ■セッション内に登場予定の主な技術キーワード - DI - RxJava - Flux - Kotlin
モバイルアプリに開発において、端末(デバイス)の管理は重要です。そこで、デバイスファームを利用することでデバイス管理のコストを抑えることができます。 今日ではデバイスファームも様々なOSSやサービスが展開されています。 このセッションでは、デバイスファームの紹介とメリット・デメリットについて紹介します。
[内容] 大切なデータを守るために、暗号化は有効な手段ですが、同時に鍵を安全に扱う方法を考える必要があります。 Androidでは、バージョン4.3以降で「Android Keystore プロバイダ」が提供され、アプリだけが使える鍵を管理出来るようになりました。 ただし、この鍵はユーザーの操作によって消えることがある仕様になっています。 本セッションでは、「Android Keystore プロバイダ」の基本的な使い方と鍵が消える条件を解説すると共に、鍵が消えることを想定した使い方について考察します。 [セッション構成] -Android Keystore Providerとは -アプリの鍵が消える時 -消える条件について -バージョンによる違い -消えることを見越して
■対象 ・Widgetに関心がある方 ・Widgetをこれからつくりたい方 ・Widgetをつくられたことのある方 ■概要 Widgetはメインのアプリにバンドルして提供されるミニアプリです。Widgetにより、アプリの機能やコンテンツに、ホーム画面からスムーズにアクセスできるようになります。アプリを開かずとも、ユーザーが必要な情報に触れることができるため、コンテンツへのエンゲージメントを高めることができます。 今までWidgetは、アプリインストール後にホーム画面から別途追加する必要があり、登録フローがユーザーに分かりにくい状態でした。しかし、Android O からWidget機能が強化され、アプリの中からWidgetの追加を行えるAPIが提供されるようになりました。 本セッションでは、この新APIを踏まえて、Widgetの実装についてお話致します。Widget特有の実装方法や重要な内部APIの挙動、開発における注意点などについてもご紹介するつもりです。
In this talk, you will learn about getting started with Flutter - a framework that helps you build modern 60 fps cross platform apps for iOS and Android. Flutter uses Dart for its development but prior knowledge or use of Dart is not required to attend this talk. We will look at the various features Flutter provides including topics like building layouts with material design, testing, debugging and more.
■対象 初心者以上 ■概要 ユーザーはデバイスに多くのアプリをインストールしていますが、その多くはインストールされたまま使われず、ホーム画面の隅に埋もれてしまっています。どんなに頑張って最高のアプリを作ったとしても、使ってもらえないのであれば、こんなに悲しいことはありません。 アプリに再訪して欲しい!! 魅力的なアプリであることを体験して欲しい。そのためにも、なんとかしてユーザーに再びアプリを開いてもらう必要があります。如何にしてアプリの外からアプリを再度起動してもらい、エンゲージメントを高めることができるでしょうか。 このセッションでは、アプリをインストールしたけど使わなくなってしまったユーザーにre-engageするための施策を紹介致します。具体的にはFirebase App IndexingやTwitter App Card、Facebook App Linksなどの対応方法や実装時・確認作業における注意点、施策効果などを中心にお話できればと思います。
数々のアプリの有名なアプリがある中、教育というカテゴリにおいて、評価していただきGoogle Playストアにて1週間ほどTOPに掲載していただきました。 その時に取り組んできたことを共有することでアプリ開発のヒントになれば幸いです。 内容はこれから開発しようとしている方、アプリをもっとダウンロード伸ばしたい方他少し初心者向けの内容です。 話すこと ・開発体制 ・マテリアルデザインの適用 ・Googleのデザインライブラリの適用 ・アプリ内課金 ・取り組んで来たことの考察など
非同期通信処理、画像キャッシュ、HTMLパース、画像の加工… 「アプリ」でこれらを導入するのは簡単な世の中になりました。それには、個々のライブラリがそれぞれに依存関係を持たないように作られているAndroidコミュニティの賜物です。さて、自分がそのように使われるライブラリを作るときはどうでしょう。自作したライブラリで多くの「面倒なこと」を自前実装したときの話をします。特にView系のライブラリは開発に置ける「面倒なこと」を多く含み、それらを乗り越えるためのtipsを紹介します。
AndroidのVRプラットフォームであるDaydreamのコントローラーと空間オーディオの機能を駆使して、遥か彼方の銀河系で繰り広げられるあの物語の世界の騎士が操る剣の修行をVRの中でできるようにあれこれ実験した記録です。3DoF(3軸回転)の動きしか取れないコントローラーでArm Modelの仕組みを使って如何にして剣を振るような動きを実現するか、そしてSpatial Audio(空間オーディオ)の機能を使うことでその動きに合わせて効果音が自分の周囲で回るように実装する話は、Daydreamで没入感の高いVRコンテンツを作るためのノウハウとなるはずです。 (あくまでそのような世界観を参考にしてDaydreamの機能を実験する内容で、映画等の著作物を模倣するものではありません)
私が実際にアプリの画像読み込みを行うライブラリの置き換えを行った経験を基に、どういうところに気を付けて置き換えを行っていったか、それぞれのライブラリの挙動の違いなどを紹介しながら、注意すべき点を説明していきます。 概要: - Picassoから別のライブラリに乗り換えを決意した理由 - どうして乗り換え先にGlideを選んだか - メジャーな画像ライブラリの選択肢とそれらの比較 - Picasso/Glideの似ているけど違うややこしいところ - 最近のGlide 4.0系について - Generated APIについて
多くのアプリではネットワーク経由でアプリ内のコンテンツで利用する画像を配信すると思いますが、最適なサイズで画像を配信することは、通信量と通信時間を減らしユーザ体験の向上に寄与します。またAndroid 4.0以降ではWebP形式の画像に対応しているので、WebP形式で配信することで画質を損なうことなく容量を減らせます。 このセッションではAWS(Amazon Web Service)を利用して、WebP形式への変換に対応したAndroidアプリ向けの画像配信環境を構築する方法を紹介します。 利用するAWSコンポーネント: CloudFront、API Gateway、Lambda(with Node.js)、S3 実現できる配信機能: WebP形式への変換、動的リサイズ、回転、ぼかし、Exif操作、HTTP/2での配信、CDNによる端末に近いエッジロケーションからの配信 またAndroid側でのコード例(要求する画像横幅の決定、OkHttpでのヘッダ設定、Picassoでの画像読み込み)についても説明します。 サーバレスでの構築なので運用コストは低く抑えられます。また変換対象の元画像はAWSのS3に置くパターンの他に、任意のWebサーバ/クラウドに置くパターンも紹介しますので、利用しているインフラがAWSでない場合でも役にたつと思います。
Androidの設計における、ライフサイクルとの付き合い方について発表したいと思っています。 Androidのアプリ開発では、ライフサイクルは大きな意味を持ちます。 昔は、ActivityやView、Fragmentのライフサイクルを考える際に、それに合わせたメソッドを用意して呼び出すなどしていました。 ですが、今ではArchitectureComponentのLiveDataやViewModelなどを始めライフサイクルを意識したデータや、そのハンドリング方法が多くあります。 また、それらをRxと組み合わせてハンドリングしたりすることも多いでしょう。 この発表では、ライフサイクルのハンドリングをどのようにしたらスマートに行うことができるかという話を実践的に話したいと思っています。
2017年も、GooglePlayStoreに多くの機能が追加されました。 この発表では、それらの機能を実際に使用して、どのように業務が変化したかや、自社開発だけでなく外部の開発会社への発注にどのような変化があったかを話したいと思っています。 また、エンジニア兼プロダクトオーナーで、発注をしつつ、別に個人で受けもするという立場でのトークとなります。
Kotlinを使ってAndroidなどのアプリを書く際の、実際のコーディングの変化について書きたいと思っています。 内容としては、以下のリンクの記事のようなファクトリの再考や、ViewやDialogなどのコールバック、関数型プログラミング的なコーディングなど、Kotlinを入れたからこそできるコードの変化について話たいと思っています。 https://qiita.com/Reyurnible/items/c1cafbf84fd719b94be3
Androidアプリケーション対応案件で、アプリの実装をみて愕然としました。2014年に開発が行われていたのにも関わらず、Fragmentも使わずに6画面分の機能を1Activityに突っ込んだ、見事なまでのFat Activityをダイエットした話です。
As Kotlin evolves, it keeps including some other supported platforms, and in the future it will be virtually anywhere: JVM, Kotlin JS, Kotlin native… In the case of Android, we were required to be able to use different languages for different parts of our App. But know with Kotlin, we can use this language to practically anything: - Write the source code of the App, instead of using Java - Write the views thanks to Anko library, instead of using XMLs - Write Gradle files using it instead of Groovy In this talk, I'll show this and how you can easily share your code to also build a web App and a server
Now that Kotlin is an officially supported language for Android, you might have already studied many of the great resources for learning Kotlin syntax and language features. But you may still wonder how exactly Kotlin can improve your day-to-day Android work and solve your Android problems. In this session we will discuss examples of some of our favorite ways of leveraging Kotlin to make our Android code more concise, readable, and less error-prone. We will show specific ways to remove boilerplate from common Android tasks, create new and efficient utilities, and share some resources for other great examples of simplifying your Android development with Kotlin.
So you’ve heard that a new guy is in the town. Kotlin is here to stay, and it’s revolutionizing the way Android Apps are developed. But starting learning a new language is always scary and challenging. So in this workshop I’ll lead you through the first steps so that you can the continue on your own when you get back home. After writing a book about the topic, recording an online course and giving live workshops, this learning method has been proved by thousands of Android developers, and now it’s your time to try it yourself. During this workshop, we’ll create a small sample App that will servers us as an excuse to learn the main basic concepts of the language. You will learn by example and go home with a working App written in Kotlin! These are some of the topics we’ll cover: - How to create your first project in Android using Kotlin as the main language - Some basic concepts such as variables, classes or properties - Extension functions, on of the greatest powers of the language - Lambdas and some amazing examples of what you can do with them - Some uses of Anko
■対象者 ・ログ解析によりアプリグロースさせたい方 ・Google Tag Managerの概要と強みを学びたい方 ■概要 ほとんどの場合、アプリ開発はリリースしたら終わりではなくリリース後の数値分析とそれに基づく改修を行うことが求められます。 このセッションでは、Google Tag Managerを活用することにより、効率良く安全にAndroidアプリのログ解析を行う方法について解説します。 導入の概要や機能の説明のみでなく、マーケターや分析担当者とのやり取りの効率化や住み分け、実際に弊社プロダクトでの活用事例と導入成果について報告します。 ■セッション内に登場予定の主な技術キーワード - Google Tag Manager - Firebase Analytics - Google Analytics
セッションでははKotlinを使ってより簡潔で読み易いテストコードを書く方法について話します。 Kotlinがオフィシャル言語として採用され、Javaとの相互運用性の高さからテストコードからKotlinを導入し始めたという人もいるのではないでしょうか。 Kotlinの思想の一つに"Concise"があります。Kotlinを使うことでより簡潔でわかりやすいテストコードを記述できるようになる 一方で、Java時代の資産をそのままKotlinに変換しただけでは"Concise"なテストコードにはなりません。 セッションではKotlinならではのテスト時の注意点を押さえつつ、Kotlinの能力を発揮したテストの書き方を説明します。またkotlintestやSpek FrameworkなどKotlin派生のテストライブラリを紹介し、"Concise"なテストコードを書くための戦略を提示します。
機械学習がいろいろな場面で活用されるようになり、モバイル上での活用も話題になってきました。 隣のiOSエンジニアがCoreMLの話をしているけどAndroidではどうなんだろうと気になる方もいるでしょう。 このトークではAndroidエンジニアが機械学習を始める取っ掛かりとして、TensorFlowを使ったAndroidアプリの実装方法について話します。 Androidで何ができるのかを整理しつつ、学習モデルの作成方法やAndroidへの組み込み方といった開発の流れを紹介します。 本セッションでは、機械学習の細かい知識には踏み込まず、Androidエンジニアの視点からこれからどう機械学習に入っていけばいいかを説明します。
このセッションでは、Server-SideエンジニアがAndroidエンジニアにキャリアチェンジをした際に感じた事と今後、同じようにチャレンジしたい人に向けて話そうと思います。 (エンジニア35才定年説があるなかで直前でチャレンジした内容) - Android開発する際の戸惑い - どのようにしてAndroid開発へ順応したか - Android開発してみて感じたServer-Sideとの違い - 1人での新規開発で複数あるアーキテクチャーの中で選定と苦悩 - 今回応募した経緯など
For Android Oreo, Trello added launcher shortcuts to our existing widget shortcuts, as well as added adaptive icons versions for both our existing icons and our new shortcuts. While this was simple for API level 26, ensuring that both the behavior and design were consistent on lower APIs was a challenge, as we had three types of shortcuts (app, launcher, and widget) and three different types of resources (raster, vector, and adaptive icon). Furthermore, while launcher shortcuts are incredibly easy to implement, we did run into complications when trying to make existing widget shortcuts consistent with the new launcher ones, as well as handling dynamic shortcuts based on user data. In this session, I'll discuss these issues that we encountered, what we learned, how we solved issues, and general tips for minimizing effort and maximizing compatibility when introducing new shortcuts and adaptive icons.
KotlinはJavaよりもシンプルで安全なコードを書くことができます。また、同じ処理を書く場合も、いくつかのやり方があります。文法に関する説明は、公式ドキュメントを見れば分かりますが、使いどころ、特にAndroidアプリ開発における使いどころについては、まだそれぞれ模索している段階といってよいのではないでしょうか。 このセッションでは、私がフルKotlinのアプリをチームで開発した経験の中で分かった、Kotlinの各種文法の適切な使いどころや、バグを生みやすいコードのパターンなどを紹介してみたいと思います。 例えば、lateinitとnull初期化の使い分け、interfaceのデフォルト実装とabstractクラスの使い分け、引数なしの関数とcustom getterの使い分け、定数とlazyとcustom getterの使い分けなどがあります。また、property delegationの使いどころ、スコープ関数の使いどころ、レシーバー付き関数型の使いどころなど、Kotlinの基本文法を紹介しつつ、Androidアプリ開発をした経験からActivityライフサイクルやFragmentライフサイクルに合わせた使いどころ・注意点などについて解説してみたいと思います。
昨今のアプリ開発は大規模になってきており、モバイルアプリのエンジニアとサーバサイドのエンジニアが分担し開発することも多いと思います。 その際、仕様を含めたAPI定義のすり合わせ、変更についての情報共有などの円滑なコミュニケーションが必要になります。 また、API定義の変更に関してはモバイルアプリは漏れがないように迅速に追従していく必要があります。 本セッションでは、API定義を管理するSwaggerに焦点を当てます。 また、Swaggerを用いてAPI定義からJSONのマッピングオブジェクトを自動生成することにより工数削減と品質向上を図り、生産性を高める方法を紹介します。 - Swaggerとは - Swaggerを用いたAPI定義 - AndroidにおけるSwagger Code Generatorを用いたコード自動生成 - (時間があれば)mustache記法について
■対象者 ・新しくなった「Play Console」の概要を理解したい方 ・アプリの品質向上に興味がある方 ・より安全にアプリをリリースしたい方 ■概要 Androidの分析やリリースを行うためのツール「Play Developer Console」がマテリアルデザイン対応され「Play Console」としてリニューアルしました。 このセッションでは、下記3分野における機能追加及び機能強化について解説します。 ・アプリ品質の向上 ・Android vitals ・安全なリリースの補助 ・Release Dashboard ・App Signing ・Device Catalog ・ビジネスグロース ・Subscription Dashboard ・Statistics ・Review Analytics ■セッション内に登場予定の主なキーワード - Play Console - Android Vitals - Release Dashboard - Subscription Dashboard
■概要 プロジェクトは規模が大きくなるほど、事前の準備が後々に効いてくるようになります。 ボイラープレートを省く手段を準備し、見えている地雷を警告し、クィックフィックスを与える。 送信するログも、必要なテストも増えるでしょうから、楽に書く方法も用意しましょう。 このセッションでは、チームビルディングや開発フローの話は一切しません。 そのかわりに、開発のための開発の世界についてお話します。 ■対象 - 大規模なプロジェクトに参画することが多い人 - 開発のための開発に興味のある人 - 休日もコードを触っていたい人 ■トピック - Android Gradle Plugin 3.0とLint - IntelliJ Plugin - apt - Transform API - Kotlin pluginに手を入れる
皆さん、Material Designやってますか? Material Designのガイドラインは英語で読みにくいし、どこからどう読んだらいいかわからないし、量もいっぱいあるし...と思っているそこのあなた!このセッションはそんなお悩みを解決します。 濃密な30分間のセッションでMaterial Designのガイドラインを全部読んだような気持ちになっちゃいましょう! Material Designの基礎となる概念を紹介し、どのような背景で考えられているか・どのようにユーザー体験に生かされているかを説明します。 またMaterial Designの特徴的なViewについては、ガイドラインに書かれているルールや禁止事項など、適切に利用するための要点を説明します。 実装についてはセッション内であまり説明せず、参考資料の紹介程度にとどめるつもりです。 このセッションさえ聞けばMaterial Designのビギナーを卒業でき、Material Designを知らない人に知識をちょっと自慢したくなる、そんなセッションを目指しています。 ■対象者 ・Material Designの基礎をまだ理解できていない方 ・Material Designの勉強の一歩を踏み出したいと思っている方 ・Material Designを深く知るつもりはないが、勘所だけは押さえておきたい方
この1年、web開発に携わることが多く、webではこれどうやるのって思うことが多くありました。 ここでの体験を踏まえて、Androidアプリとwebの開発のやり方がどう違うのか、また、今後アプリ開発者がwebをする際に、どういったことを意識すればいいのかを中心にお話しようと思います。 ちなみに、最近のweb開発では、Angular, React, Vueなどのフレームワークやnpm, webpackといったツールを使うことが多くなってきており、この辺の辛さなども話そうと思います。 また、PWAという概念もでてきており、アプリと大差がなくりつつあります。こちらも軽く触れようと思います。 さらに以下のこともwebとアプリを比較しながら、話そうと思います。 ・この機能、webでやるとどうなる? ・ライブラリ ・Lint系 ・アーキテクチャ(Vue.js中心) ・テスト系 ・CI・CD系 ・公開方法
Android Wear2.0を作ったときにハマった事や意味不明な現象をどういうふうに解決したかを中心に話します。 Wearアプリの1系や2系を作っていました。いろいろハマったり、意味不明な現象に遭遇したので、 この辺をどう解決したのかや、どういった現象が起きたのか。 また、1系と2系でのUIの違いなど。 具体的には、以下のことを話そうと思います。 ・1系から2系にしたときのdeprecatedの対処 ・高速通信(Wi-Fiなど)周り ・Wi-Fiつながらない ・位置情報をずっと取得し続けたら、いきなり取得できなくなる ・iPhoneとの通信 ・WearアプリをGoogle Playにだす ・これからWearアプリ
対象者: 新規サービスを開発し始めたい人 Lean、 Scrum 方法などに興味あるエンジニア 概要: PAY ID アプリの iOS 版がリリースした直後、 Android エンジニアまだいないアプリチームに Android 版がほしいという声がきていました。 このセッションはそのごろを振り返ってみて、僕たちはどうやって乗り越るのか、良かったところ、悪かったところについて話したいと思います。 セッション内容(予定): - みんな要望に答えるため活用していた方法 - 開発現場で活用していた方法
【対象者】 - Rx 関する仕組みに認識がある人 - RxJava, RxAndroid, RxKotlin と友達になりたい人 - Rx のデザインパターンについて困っている人 【概要】 世の中には Rx の設計方法についていろんなパターンがあって、Rx をし始めた頃、それにすごく困っていました。 このセッションは、いろんな困難を乗り越えできて、今のところ現場で活用できる方法を話したいと思います。 【セッション内容(予定)】 - 要件から流れを設計するとき考えること - エラーハンドリングのコツ
●概要 AndroidアプリのアーキテクチャパターンとしてMVVMが採用されることが多くなりました。Androidではデータバインディングがサポートされており、効率的にMVVMで実装を行うことができます。しかし、実際にMVVMで開発をしようとすると様々な問題に遭遇します。また、MVVM以外のパターンも存在するため、それらと比較してあえてMVVMを採用する理由は何か、という点も気になります。 私は2010年頃から様々なプラットフォームでの開発においてMVVMを採用しており、現在担当しているAndroidアプリもMVVMで開発しています。その経験をもとに、Android以外のプラットフォームでの実装パターンを参考にしながら、MVVMのメリットを活かしてAndroidアプリを効率的に実装するためのポイントを紹介します。また、Fluxなど他のパターンとの比較を行い、アーキテクチャ選定の観点からも考察します。 (プログラミング言語はKotlinを想定します) ●アジェンダ(予定) ・MVVMの歴史と概要 ・AndroidアプリにおけるMVVMの基本的な実装パターン ・他のプラットフォーム(WPF, Javascript等)におけるMVVMとの比較 ・AndroidアプリをMVVMで実装する際のポイント ・画像のバインディング ・RecyclerViewへのバインディング ・ViewModel間の連携 ・アニメーションとの連携 ・Contextの扱い ・ユニットテスト ・効率的なA/Bテストの実施方法 ・アンチパターン ...etc ・Flux等の他のアーキテクチャパターンとの比較 ・MVVMを採用する上での基準を考える
API Level 16をサポートする場合、PDFを生成するAPIが存在しません。そこで、NDKによりC/C++ライブラリを使うことでPDFを生成しました。また、ゼロからアプリを作るにあたりフルKotlinでアプリを実装してみたり、アーキテクチャにMVVM、Data Bindingを利用したりと個人的に新しい試みを色々試したので、その時の知見を共有できればと思います。 # 内容 - NDKでC/C++のライブラリを利用する方法について - MVVM、Data Bindingについて - Dagger2を利用したDIについて - RxJava,Realmについて
Google announced that Google shifts from mobile-first to AI-first at Google I/O 2017. What does it mean? In this talk, I will talk about 3 things. First, we will see environment changes around us. You may think "AI is not my business" but it happens. I will talk how our life has been changed and what will happen in the future. Then, I will introduce the basics of machine learning and how to run machine learning models on Android devices. I will also refer to machine learning frameworks and JNI. Finally, I will share knowledge of continuous improvement of machine learning products. When you want to deploy your model to production, you have to think about more things such as APK size, CPU usage, memory usage, versioning, monitoring, ... We will see how to address these challenges. You will learn what I've learnt in 30 min. This is what I wanted to know when I started machine learning.
Android開発者を長年苦しめている画面回転をFlux+Dagger2+ViewModelでシンプルに解決する話をします。 これまでの画面回転対応と言えば、AndroidManifestのconfigChangesやscreenOrientationの設定で難を逃れたり、地道にonSaveInstanceStateで頑張ったり、Icepick、Pikkel等のライブラリでデータの復元をしていた方が多かったと思います。 このセッションでは以下3点を中心に、これまでのデータ復元方法とは違ったやり方で、取得したデータが再利用されていることをサンプルを交えて紹介します。 - Fluxにおけるデータの扱い(Store) - Daggerのスコープ、Componentのライフサイクル - ViewModelの内部実装
Animationは、ユーザに楽しさや使いやすさを届けられる反面、使い所を間違うとユーザ体験を損なう可能性を持つ諸刃の剣です。 このセッションでは、アプリにAnimationを導入する目的を整理し、Androidアプリにおける実装の選択肢と実際のユースケースを交えながら「ユーザに価値を提供するためのAnimation戦略」を考えてみたいと思います。 - アプリにAnimationを導入する目的と効果 - AndroidアプリにAnimationを実装する方法 - ユースケース毎に最適なAnimationの選び方
■対象者 ・これからネイティブアプリ開発が始まりそうな企業の開発担当者 ・ディレクター ・ネイティブアプリ開発に興味があるサーバサイドエンジニア ・Android開発初心者 ・チーム作りに興味がある人 ■概要 「アプリ作りたいんだけど」 このワードからネイティブアプリ開発に着手する企業(特にスタートアップ等)は多いと思います。またそれに伴い、今までサーバサイド担当だった開発者がネイティブアプリ開発を開始するという事例も多々あるかと思います。 私も業務としてはサーバサイド・AWSやGCPを用いたインフラ運用がメインでしたが、新サービスの立ち上げにより、Android/iOSアプリを開発を担当するようになりました。 本セッションでは会社に全くネイティブアプリ開発の知見がない状態からのチーム作り、インプット、ビジネスサイドとの折衝、AndroidとiOSの違いに苦労した話やこうすれば良かった的な話を出来ればと思います。 成功談だけでなく失敗談を多く盛り込もうと思います。 似たような境遇の方の参考になれば幸いです。 ■内容(予定) ・現在のチーム体制 ・ビジネスサイドとの折衝 ・インプット方法 ・ナレッジの蓄積、伝達 ・社内でのネイティブアプリエンジニア育成 ・Android/iOS間で苦労した話 ・アーキテクチャの選定 ・失敗談
■概要 以前までプロトタイプは捨てるコード前提で書き、最速で作れるように心がけていました。それでもプロトタイプは実際のコードを書くため、多くの時間を費やすことが多かったです。(リリースまでの期間が与えられたとしたら半分ほどプロトタイプだったこともあります。) 本セッションではよりプロトタイプの期間を濃縮させるために、デザインツールの Sketch を使うことでコードを書かずプロトタイプを作っていく事例を紹介します。 ■詳細 アプリを開発するときにプロトタイプをつくった方が結果的にアプリのクオリティも開発速度も早くなると思っています。 - コンセプトやUIを変えたものを複数作ることでクオリティを磨ける - チームや関係各所への認識がそろい、結果的に無駄なものを作らない - あいまいになっていた仕様が明確になっていく。見積りの見直しが早期にできる - 新しい技術へのチャレンジ(言語/ライブラリetc) - 使用感を試す ケースや機能にもよると思いますが、多くは Sketch で作った Mock アプリを InVision で動かすことで工数を短縮できるのではないかと思っています。 (適用できない例としてお絵かきできるアプリの使用感は Sketch では再現できないのでコードを書くプロトタイプが必要かと思います) 本セッションでは実際にどのようなフローでプロトタイプをつくっていったか、プロジェクトの走り出しを交えながらお話します。 また時間があればツールの使用方法なども軽く紹介したいと思います。
ここ数年でいくつかの、他のAndroidアプリをエミュレートするAndroidアプリが登場しています。その多くがLINEやゲームを2アカウント同時使用できることを謳っており、多くのユーザーに使われていると思われます。 本セッションではこれらのアプリがどのようにして他のアプリをエミュレートしているのか調査した結果と、これらのアプリを使用することによる危険性の分析について発表を行います。
■対象者 ・新規アプリ開発におけるアーキテクチャ選定に悩んでいる方 ・Android開発初心者 ■概要 私は業務としてはサーバサイド・AWSやGCPを用いたインフラ運用がメインでしたが、新サービスの立ち上げにより、Android/iOSアプリを開発を担当するようになりました。 その際にどのアーキテクチャを採用するか悩んだ記憶があります。結果としてクリーンアーキテクチャを採用することに決めたのですが、自身のインプットやチームメンバーへの浸透、リリース日の調整等多くの苦労がありました。 本セッションでは、そのようなAndroid開発の知見がない会社がクリーンアーキテクチャを採用した理由、メリットや運用後の状況等をお話できればと思います。 ■内容(予定) ・クリーンアーキテクチャ概要 ・クリーンアーキテクチャを採用した理由 ・社内メンバーへの浸透 ・見えてきた課題 ・上記課題を解決した方法 ・運用後の状況
多くのアプリがMaterial Designを取り入れて提供していますがガイドラインに載っているものが全て簡単に実現できるものではありません。 このセッションでは、Material Designのアニメーションを実現するためにMaterial motionについて概要から導入について、導入時の注意点を紹介します。
ConstraintLayout 1.0 made building flexible UI easy, with a deep integration in the Android Studio layout editor. The recently introduced 1.1 version is bringing even more flexibility, with new capabilities like barriers or groups. This talk will take a deeper look at the current state of the library, why you should use it and when: architecture, performance behavior, examples of complex UI, animation capabilities, extending the library in your project via subclassing, and discussing some upcoming features.
多くの開発者に注目され、今やAndroidアプリの開発に無くてはならない存在となりつつあるRxJava。その実装例は、APIリクエストや各種イベントのハンドリング処理等が圧倒的な割合を占め、Callback地獄やライフサイクル管理の処理が次々とRxJavaによって置き換えられています。 一方、USB・Bluetooth・Wi-Fiを介したAndroid端末と外部機器との連携、すなわちIoTの分野では、未だEclipse時代の古い実装例の情報が多く、可読性・保守性に劣るコードが残ってしまいがちです。 RxJavaは、こうしたIoTの分野でも我々に大きな恩恵を与えてくれます。本セッションでは、業務での開発経験を元に作成した、ArduinoとAndroid端末上で動作するデモアプリを紹介し、IoT領域でのRxJavaの具体的な活用事例を共有したいと思います。
Android wear2.0が今年2月にリリースされました。 しかし、日本ではまだまだ認知度が低くなかなか日本語での開発情報も少ないのが現状です。 私が1.xと2.0両方でストアにアプリをリリースして得た知見や、2.0での新しい機能の実装方法、皆さんがWearで開発したくなるような情報を共有したいと思います。
React Nativeが出てきてしばらく経ちましたが、処理系が特殊なこともあり、黒魔術的なイメージを持っている人も多いように思います。 しかし、実際には素直な読みやすいJavaで実装されている部分も多く、Androidエンジニアが読めば充分読めてしまうレベルです。 本セッションでは、React NativeのAndroid向け実装を様々な面から紹介することで、React Nativeへの心理的障壁を下げてもらうことを目的とします。 次のようなトピックを想定しています。 * JavaScriptCoreはどこで・いつ動くのか * ネイティブブリッジの仕組みから見る「Androidらしさ」 * ビルドの仕組みから見る「Androidらしさ」
事前にインストールすることなくアプリを実行できる「Instant Apps」。Gooogle I/O 2017にて全ての開発者に向けて公開されました。 しかし「インストール不要でアプリを実行」とは言ったものの、それがどういうことなのか?どういう仕組みで動いているのか?使うとしたらどのようなユースケースが想定されるのか?実際どうやって実装するの?といった疑問がたくさん出てきます。 本セッションでは、Instant Appsを実装するコツはもちろんのこと、それをアプリで有効に使う上でどういったシーンを考えればよいのかといった点においても紹介します。 また、予定ではありますが、実際にプロダクトにInstant Appsを導入してどのような効果があったのかも紹介できればと考えています。 発表内容(予定) ・Instant Apps とは ・Instant Apps を使う有効な場面とは? ・Instant Apps を実装するために必要なもの ・実際に Instant Apps を実装してみる ・テストはどうやるのか? ・プロダクトにinstant Appsを導入してみた結果 ・などなど…
ネイティブアプリにおいて、アーキテクチャをどうするかの話はつきません。 私が今までに使用したことのあるアーキテクチャについて、その特徴と導入コストやどのような性質のアプリに向いているかなどを話します。 主にアーキテクチャなしの状態、MVVM、Reduxについてとなります。 また、現職でのアプリにArchitecture Componentを導入しはじめたので、既存アプリへ導入するメリットなどについても話したいと思います。
RecyclerView is now a de facto standard for representing a large data set into a limited window as a scrollable view. One of the advantages of using it compared to ListView is that RecyclerView can change how the data set is presented in addition to a simple linear list (such as Grid, StaggeredGrid) by changing the LayoutManager attached to it. But it's not well known that you can provide your own LayoutManager to achieve even more flexibility in addition to the three (Linear, Grid, StaggeredGrid) default LayoutManagers provided by the library. In this talk I'm going to explain how you can create your own LayoutManager in details based on the experience that the presenter created a Flexbox implementation as a LayoutManager.
Accessibility is one of the most well documented and at the same time underused tools when developing both web and native app. So, how can we make sure we build apps that everyone can use? The first step is to not start with code, but to begin with, your company culture and design process. In this talk, we will start with how to think about Accessibility in your company culture. How to think critically about accessibility in your design processes. Finally, some high impact changes you can make to ensure that your app is usable by everyone.
RxJava2が登場して1年ほど経ちましたが、RxJava1から大きく変更がありました。具体的には、Reactive Streamsに準拠したインタフェースになり、nullをストリームに流すことができなくなったり、バックプレッシャーを意識した実装ができるようになったりしました。その結果、NonNull関連ではMaybeやCompletableが追加され、バックプレッシャー関連ではFlowableやProcessorが追加されました。 このセッションでは、今やAndroidアプリ開発には欠かせない存在であるRxJavaについて基本的な概念を改めて紹介しつつ、RxJava1からRxJava2への変更点、特にAndroidアプリ開発の上で重要なクラスやオペレータに絞って説明したいと思います。また、RxJavaを用いて、FluxアーキテクチャでAndroidアプリを開発する方法について簡単に説明します。 最後に、同じくNullable/NonNullの考え方を持つKotlinとの相性や、実際の開発で得た知見を共有したいと思います。(この部分については、以下のスライドを発展させたものを発表する予定です) https://www.slideshare.net/RecruitLifestyle/kotlin-rxjava2
これまで res > values > string.xml に日本語の文字列を書いてきたエンジニアが、全世界対応のアプリ開発において、アプリをローカライズしていくために行ってきたことや躓いたことなど、開発・運用の中で得られた知見やTipsを共有します。 ※ 2017年10月現在、対応言語 : 18言語 / Google Play のローカライズ : 20カ国(さらに拡大予定) ■内容 ・アプリローカライゼーションの基本 ・アプリローカライゼーション Tips ・Google Play ローカライゼーション Tips ■対象者 ・これからアプリのローカライズを頑張っていこうと思っている人 ・自分のアプリを世界中のユーザーに届けたい人
AndroidOでは様々な新機能が追加された中、あまり取り上げられませんが、Media関係の機能が多く改善されています。例えばVolumeShaperでVolumeControlをより自然に行うことができるようになりましたし、ストレージ アクセス フレームワーク(SAF)を使用することでセキュアに独自のメディアファイルを共有することができます。 またDRMでの再生機能やTSファイルの録音などストリーミングのための機能が追加されています。 AOSPのソースコードを交えながらメディア周りの最新の動きを追い、モダンなメディアコントロールを実現するためのノウハウを共有します。
鳴り物入りで登場したAndroid Thingsですが、まだまだデバイスドライバが豊富とは言えず 使用したいデバイスによっては自分でドライバを書いてあげる必要があります。 デバイスドライバと言うと身構えてしまう方もいらっしゃるかも知れませんが、 基礎を抑えればなんとかなるものです。 本セッションでは個人でも入手性の良いセンサーを対象に、 実際にUser-Space Driverを作っていく過程をご紹介していきます。
Android O で追加されたPictureInPictureの機能。 基本的な使い方に加えて、AOSPのソースコードを追いながら内部でどのような動きになっているかご紹介します。 動画を流しておくだけに使用するのは勿体無い!!色々な使い方例を交えながらベストプラクティスを考えます。
Android O で追加されたPictureInPictureの機能。 基本的な使い方に加えて、AOSPのソースコードを追いながら内部でどのような動きになっているかご紹介します。 動画を流しておくだけに使用するのは勿体無い!!色々な使い方例を交えながらベストプラクティスを考えます。
React NativeはAndroidから見てシングルページアプリケーションとして実装されます。つまり、startActivityによるネイティブな画面遷移を利用できず、画面遷移を自分で実装することになります。 デファクトスタンダードとなるべくReact Navigationが登場しましたが、これもまだ一長一短です。 本セッションでは、React Native Androidにおける画面遷移の基本をおさらいし、2018年2月時点におけるライブラリ選びについて紹介します。 下記のようなトピックを想定しています。 * React Nativeにおける画面遷移とは * 画面遷移とToolbarの切っても切れない意外な関係 * サードパーティライブラリを使わない画面遷移 * React Native画面遷移ライブラリ2018
Compile-time code generation through annotations has always been a striking characteristic of the Java programming language, ever since its inception back in Java 5. Being a sort of metadata for arbitrary source code, it allows for both the introspection of additional properties at runtime, and also as an entry point for a certain kind of software known as Annotation Processors. Traditionally, the output of these processors has been served to consumers through Java code. Android developers are no exception to this rule, exemplified through handy libraries like Dagger, Butterknife and Parceler. However, with the recent adoption of Kotlin as a new development language for Android development officially backed by Google, the scope of and requirements for generated files have widened. In this live demonstration, you will learn how to generate useful Kotlin code for your consumers from an annotation processor using KotlinPoet. This is done with the notion of language interoperability in mind, by which a sane Java API can be exposed as well. Finally, we will explore some underlying intricacies of Kotlin when viewed through the low-level lens of the design of an annotation processor. How do you know if an annotated class was written in Kotlin? Do you even need to know?
Annotation Processingとは一体何者なのか、 DataBindingやDagger等で見かけるあのアットマーク、「なんとなく」の知識に留まっている開発者は多いのでないでしょうか? 本セッションでは、Annotation Processingをゼロから説明し、 実際にプロダクションに導入した自作ライブラリをベースに、その使い道を探っていきます。 本セッションの狙いは大きく2つです。 * Annotation Processingの概要と書き方を学び、普段使用している技術の裏側を正しく理解する * 実際の問題を通じて、選択肢としてのAnnotation Processingを理解し、明日使えるレベルに持っていく # 目次 * Annotation Processingとは * 実際に書いてみよう * 実例紹介 * プロダクトが抱えていた問題 * リフレクション等、関連技術との比較 * 実装 / tips * 導入により得られた知見・課題
Go言語を用いて Android 向けゲームを作る手法について紹介します。Go言語で Android 向けゲームを作る方法はいくつかありますが、ここでは特に gomobile という Go言語公式のツールを使った手法について取り上げます。gomobile を使うことで、Go言語のみを用いて Android アプリを作ることができます。ゲームでない通常のアプリを作ることも出来ますが、gomobile は非常に限られた機能しか提供しないため、gomobile で何が出来て何が出来ないのか、あらかじめ考慮が必要です。gomobile で出来ること、ないし使用上の留意点、ハマリどころ等を、実際に使い込んだユーザーの観点から解説します。
Material designで実装するアプリケーションにはSharedElementTransitionを始めとする、脳に優しい、美しいアニメーションが必要不可欠です。ですが、いざ実装を開始すると、様々な細かな仕様で躓くことも少なくありません。 このセッションでは、そんなアニメーションの実装を実例とともにコードベースで解説をしていきたいと思っています。 サンプル的な意味合いの強いプロジェクトではなく、実際にリリースされているアプリのコードをもとに解説していきます。 また実装する際には、アニメーションを実際に考えるデザイナーの人とどのようにコミュニケーションを取る必要があります。その際のこつや、どのようにコミュニケーションを取っているか、についても同時に紹介したいと思っています。 - アニメーションの紹介 - 実装手法の説明 - どんなトリックが存在するのか - 効率的なアニメーションデバッグの方法 - デザイナーとのアニメーションに関するコミュニケーション方法 - どこまで頑張るかの線引き などについてお話しします。 対象者:Animation実装に苦手意識のある人/初級者
Android 8.0で新たに実装されたガベージコレクションに関して、何が、なぜ、どう変わるのか。 メモリ管理に詳しくない人でもわかるように丁寧に紹介していきます。
Material Design を利用して、Android のアプリをデザインすると「似たようなアプリになってしまうのでは無いか?」という声を良く聞きます。本セッションでは、Material Design を利用しつつ、いかにアプリの個性を最大限表現するのか? そして、デザインのフェーズから実際のアプリを開発する際にデザイナーとエンジニア間のワークフローをGoogleが提供している Color Pallette, Gallery や デザイナーが普段使っているSketch等のツールを利用する事で、効率よくブランドに沿ったアプリのデザインを実装できるかについてお話します。
アプリ自体を素早く作ることで、その後の検証や別のことを考えられる時間が増えて良いことが多いです。 半年で3つ程度の新規アプリを開発している私が、Androidアプリを素早く作る知見(主にUI周り)を紹介していきます。 ■対象 ・仕様が決まっていたり、APIができているアプリを素早く作る必要がある人 ・iOS版が先行で作られているなど ■内容 ・一覧系も詳細系のUIも大体同じ ・RecyclerViewやViewPagerのAdapterを二度と書かない ・Rxを便利に使えるパターン集 ・何も考えずに作ってハマったポイント ・アーキテクチャの話 ・など
Kotlinの文法はそんなに難しくありません。なぜならKotlinは他の言語での機能を、いわば良いとこ取りした言語なので、それらの機能や文法は見慣れたものが多いからです。 そして、それがゆえに書き方は無限に存在し、知らぬうちに落とし穴にハマることあります。 本セッションではKotlinの文法の解説はしませんが、Kotlinの言語設計者の意図、そしてKotlinコンパイラによって隠されている最適化や落とし穴などについてできるだけ説明する予定です。 さらにKotlinをAndroidに実戦投入した約2年間の経験を交えながら、より実践的な部分を選択して説明し、より深く理解した上でKotlinを書けることを目指します。 以下のような内容を予定しています。 - ラムダのコンパイル後の姿は、シングルトンか匿名クラスかインライン化か - 読み取り専用コレクション、ミュータブルコレクション、そして、イミュータブルコレクション - Kotlinのコンパイラによる最適化(プリミティブ型のNull許容型、非Null許容型など) - 非null表明(!!)の意味、使用の注意点 - プラットフォーム型の意味 - リストかシーケンスか
■ 概要 「OpenGL ES」と聞いてよくわからないけど難しそうと感じていませんか? 難しいと感じる原因は2つあります。一つはOpenGL ESが何をやっているのかわからないということ、もう一つはOpenGL ESを使って実現したい機能の高度さです。 前者は、Androidエンジニアが「iOSやSwiftよくわからない」と言うのと同じようなものです。理解さえしてしまえばどんな高度な機能の開発にも応用できます。 本セッションでは、OpenGL ESが何をやっているのかを理解するために、基礎となるGPUの仕組みから、OpenGL ESを使って描画するまでを紹介します。 また、AndroidでOpenGL ESプログラミングをする際にハマりやすいポイントについても紹介します。 ■ 発表内容(予定) - GPUの仕組み - GPUとCPUの違い - GPUとOpenGL ESの関係 - OpenGL ESプログラミングの基礎 - 画面を描画するまで - シェーダープログラミング - Android OpenGL ESプログラミング - GLThreadの話 - UIコンポーネントとの連携 - デバッグ方法
2017年7月にピックアップ株式会社の技術顧問に就任し、現在では新規Androidアプリの開発を進めています。 その中でもスピード感を持ちつつ、同じサービスのiOS、Androidアプリを作るにあたって苦労した点や、工夫した点など、 他のアプリ開発でも十分に役立てるような内容をお話できればと思います。 【アジェンダ(予定)】 ・技術顧問とは ・普段の仕事 ・プロジェクトの概要 ・現在のチーム体制 ・iOS、AndroidエンジニアがAPIを書く ・コードレビューの観点や仕組み ・CIやツール周り ・ライブラリやアーキテクチャの選定 ・社内全体でスキルをあげていく仕組み
大規模もしくは複雑なアプリケーション開発を行う場合、何らかのアプリケーションアーキテクチャを発明したり採用する必要が出てきます。それはReact Nativeを用いた開発においても例外ではありません。ただし、React Nativeでは少し特殊な事情が絡んできます。 Webアプリケーション開発におけるReactでは、親元であるFacebookがFluxアーキテクチャを提唱・推奨したこともあり、基本的にFluxアーキテクチャが採用されています。実装方法は様々ですが、Reduxというライブラリを用いるのがデファクトスタンダードになっています。 そんな事情から、同じくReactの名を冠するReact Nativeでも、当然のようにReduxを採用するべきという見えない圧力のようなものがあります。 ですが、アーキテクチャは、プラットフォームが変わったら、解決すべき課題が変わったら、同じものを採用しづらくなるはずのものです。 本セッションでは、本当にReact Nativeによるモバイルアプリ開発の文脈でもReduxを採用してもいいのか?という疑問の元、モバイルアプリ開発者と親和性の高いアーキテクチャについて考えていきます。
会社もモチベーションもバラバラ、ビジネス側とも(長年の)壁があり、あまり良い状態とは言えなかったアプリ開発チーム。ガチスクラムを導入してみて変わったことをAndroidエンジニア目線で話します。 ■対象者 - チームビルディング・開発プロセスの方法に興味がある方 - 業務形態多様なメンバーを持つチームの方 - 大企業、色々あるけど頑張ってる開発チームの方 ■アジェンダ - スクラム導入前のアプリチームの状態 - スクラム開発導入のきっかけ - ガチスクラムを導入して変わったプロセス - 1週間スプリント - 見積もりの仕方 - 開発チームが目指す目標の合意 - 導入してみて変わったこと - 問題の可視化 - 見積もりするのが難しい(ほど複雑な)箇所の可視化 - POと開発チームの関係性の改善 - 開発チーム内のモチベーションの向上 - 役割関係なくプロダクトに向き合う時間ができたこと - できなかったけど本当はやりたかったこと - クロスファンクショナル化 - レガシーコードの改善 - ユニットテストの拡充・運用 - 企画への踏み込み - 現在別チームにjoinしてから思う・実践していること - ガチスクラムの導入コストについて - ビジネスサイドとの線引について
半年間、Firebase Realtime Databaseを用いてアプリのプロダクト開発を行ってきました。 その中で得たFirebase Realtime Databaseを用いて良かったこと面や良くなかった面など様々なことが分かってきましたので知見を共有できればと思います。 ・Realtime Databaseのデータ構造の設計について ・アプリからのデータの取得方法 ・アプリでのデータのJOINで工夫したこと ・Realtime Databaseのバックアップからの復旧時に判明した問題など ・アプリがGrowthしたときのRealtime Databaseの料金面での悩みについて 上記の発表予定内容についてはまだ仮ですが現在もFirebase Realtime Databaseで開発を進めています。 先日Cloud Firestoreのβが公開されたりと日々情報がアップデートされるFirebaseプロダクトでまだまだ手探りでの開発となっている部分が多いですが皆様の参考になることがあれば幸いです。
Recently, it has become common to quickly reflect user feedback and repeat frequent releases for the high quality of service. To do this, it is essential that you perform the test, build, and release efficiently during the release process. There are cases where you automate using a common CI tool like Jenkins but it takes a lot of resources to manage it. In this section, we will show you how to integrate release processes such as acquisition test automation, in-house beta deployment, and market launch through bitrise to deliver applications quickly and consistently in small groups. We also will talk about behavior driven development for android, which can help improve stability and eliminate bugs in this deployment pipeline.
受託だから、オフショアだからという理由でテストコードを諦めない。 限られた時間と、言語や文化の違いの中でもテストコードを書くための土台作りをし、テストコードを書いていくことを前提とした開発を進めていくための諸事項をお話したいと思います。 お話すること - なぜオフショアは品質が低くなりがちなのか - テストコードに求める課題解決 - 座組とチームワーク - どこからテストを始めれば良いのか - テストのためのアーキテクチャ選別 - TDD/BDDへの羨望と期待
一般的なアプリを開発している際には、ほぼお目にかかることはなく、日本語での情報も少ない Android の機能「Accessibility Service」。 許可にはユーザーに設定画面から許可をしてもらう事が必要になっており、デバイス全体を握ることも可能な権限をも付加させることができます。 通常であれば視覚障がい者の方などへの読み上げサービスとして使用するなどが正しい使い方ですが、一方でその権限の高さを悪用したウイルスアプリなども存在しています。 このセッションでは、正しく Accessibility Serviceを使用するとこんな機能が作れるというのを紹介しながら、逆に Accessibility Service を使用するとここまでできてしまうという紹介をしていきたいと考えています。 セッション予定 - Accessibility Service 概要 - Accessibility Service を使用したデモ/実装紹介 ① - Accessibility Service を使用したデモ/実装紹介 ② - Accessibility Service を使用したデモ/実装紹介 ③
The session will cover development methodology and design patten for apps (e.g. Hong Kong Movie, Eigaland and Parknshop) he had developed and maintained in past few years. The above apps used various traditional design patten like Model View Presenter, view-reuse. it will certainly cover more during the talk. Last but not least, it will also cover the usage of famous libraries and how to tune a good performance for a business app.
テストを書くことは大事!だけど、じゃぁどこまでテストかけばいいの...全部書いてる時間もうねえよ。的な人に是非お送りしたい内容です。 特にスタートアップなどでテストの実装まで手がまわらないけど、品質を担保したい人等にもおすすめです。 ■セッション内容 - なぜテストコードを書くのか - 最低限のテストコードとはなんなのか - ユーザーの体験を損なわないためのAndroidテストコードとは - グロース戦略を最大化するAndroidテストコードとは - 事例紹介
FlutterはAndroid、iOS両方のアプリをDartで書けるフレームワークです。Firebaseとの連携やMaterialデザインに沿ったUIコンポーネントが標準で用意されています。 公式ドキュメントやcodelabを見れば一通りの実装はできるのですが、国際化やキャッシュ、CIといった細かい部分の実装をどうすればいいのかはまだ実例が少ない印象です。 本セッションでは、少し複雑なサンプルアプリを例に、Flutterのここどうすればいいの?という部分を説明していきます。
◾️概要 RasberryPiにAndroidThingsをインストールして簡易なホームセキュリティを構築する手順、Tips、苦労話を話します。 センサーの取り扱い方やFirebaseを使う事でサーバーを用意せずにAndrodアプリから監視する方法も紹介します。 ◾️アジェンダ(仮) ・AndroidThingsとは ・AndroidThingsでセンサーを取り扱う ・Firebaseを使ってAndroid端末とやり取りを行う ・AndroidThingsの辛い話 ◾️対象者 Androidアプリ開発の経験者 AndroidThingsで何か作ってみたい人 電子工作してみたい人
GraphQLはFacebookが開発したWeb API用のクエリ言語の仕様で、RESTful APIを置きかえるAPIアーキテクチャと考えられています。GitHubのWe API v4がGraphQLで提供されたことにより注目が集まっており、発表者(`@__gfx__`) も仕事でGraphQL APIの開発を行っています。いまやサーバーサイドエンジニアにとって、RESTful APIを置きかえるものとして検討に値する技術といえるでしょう。 さて、Web APIがGraphQLで提供されるようになるのであれば、Androidエンジニアにとっても無縁ではありません。GraphQLとは何なのか、RESTful APIと比べてどういう利点・欠点があるのか。Java/Kotlinから使うにはどのようにするのか。 本セッションでは、これらの疑問に対して回答を試みます。GraphQLは一見とっつきにくい技術ですが、本セッション後は魅力的な技術に見えていることでしょう。オフィスに帰ったらAPI設計者にこう提案してみてください: 「DroidKaigiでGraphQLを知ったんですが、サーバーサイドもクライアントサイドも楽に開発できるようになると聞きました。うちもGraphQLにしましょう!」 ## ToC(予定) * GraphQLとは何か * GraphQLとは何か * なぜGraphQLを学ばねばならないか * GraphiQL: The GraphQL IDE の使い方 * GraphQLとの付き合い方はいくつか * 単にRESTful APIの置き換えとして * GraphQLからWeb API clientを生成する * e.g. https://github.com/apollographql/apollo-android * Viewに必要なデータをまるっと取ってくるための自動化されたWeb APIとして * The Relay Framework * Relay on React Native * Relay on Android Java/Kotlin のPoC * GraphQLに関するFAQ
文系卒で異業種転職を繰り返し、一つの会社で2年働いたことが未だ無い自分が、どうしてAndroidアプリ開発者を志したか、そしてどのようにして、Androidアプリ開発者としての日々を送ってき、今も楽しく開発者として働いているのかをお話したいと思っています。 参考になるかもしれない対象者: - 今エンジニアの道に進もうと思っているか悩んでいる人 - 趣味でやっているけど、仕事にしたいと思っている人 - Androidアプリの開発をし始めたばかりでどのように情報をキャッチアップして行くのか悩んでいる人 話すこと: - 自己紹介 - なぜ開発者になろうと思ったか - Androidを独学するにあたって大変だったこと - 情報のキャッチアップ方法(Android/Java/Kotlin) - 疲れた時どうしたか - 今はどうしているか
DroidKaigiに出席するAndroid開発者の皆様には馴染みがないかもしれませんが、 近年ディレクターやデザイナーが主体となってお知らせダイアローグやプッシュ通知その他のマーケティング施策を実行できるようにするマーケティングオートメーションツール(以下MAツール)というものが開発されています。 自分はMAツール界隈ではアプリ内メッセージと呼ばれているお知らせダイアローグを見た時、 これはなんだか面白そうだと開発に参加してそろそろ一年経ち、それなりに色々面白かったので その様子をご紹介したいと思います。 こんな世界があるのかーと物珍しく眺めていただければ幸いです。 以下は内容一部変わる可能性がありますがお品書きです。 ■ MAツールとは - プッシュ通知やお知らせダイアローグの表示、各種ユーザー行動のトラッキング、その結果の再利用までをWeb上でディレクターだけでできるようにしていくもの - ディレクターやデザイナーはより自律してユーザとの接点を作る施策を行うことができる - エンジニアはその分、各画面のUIのアニメーションや性能改善、アプリならではの機能の開発に専念できる ■ 技術的に携わっている要素について - プッシュ通知 - 複数バージョンのGMSとFCSへの対応 - iOS/Android両方で使えるようにするための機能の取捨選択 - 他の同様のツールとの共存について - お知らせダイアローグ - 途中でバックグラウンドを挟んだ場合やViweGroupのAPI Levelによる挙動の違いへの対応 - ChromeBookなど特殊な画面サイズの端末への対応 - AndroidとiOSで標準的なUIが違うため、AndroidのカスタムViewを書いたり - クロスプラットフォーム対応 - 各種ビルドツールをつなぐために環境変数や動的・静的ライブラリのリンクといったコンピュータ要素に詳しくなっていく話 - 代表的なクロスプラットフォームに対するライブラリ提供方法の例 - テスト自動化 - 検証項目が加速度的に増えていくので自動化がマストになっていく - AppiumやXCUITest, Espressoを検討した時の話
Android Data Bindingが正式版になってから大分たちますが、公式ドキュメントでは基本的なバインディングの使い方くらいしか触れられていないこともあり、Android Data Bindingをどう活用してアプリケーションを設計すべきかという知見はそれほど共有されてはいないのではないでしょうか。 本発表ではAndroid Data Bindingを使って、Fluxのような単方向データフローのアプリケーションを設計する活用例をご紹介します。 ## 目次(予定) + 基本はMVVM + イベントバインディング(Dispatcher)とデータバインディング(ViewModel)に分ける + DispatcherとViewModelをStore(データ更新)でつなぐ + Componentでラップする + Dagger2のコンストラクタインジェクションを活用する + Dispatcherにイベントを渡す方法 - Componentから渡す - Android Architecture Componentsを活用する + 困ったらBindingAdapterを使えば何とかなる ## 対象者 + Android Data BindingをButterknife+のような使い方にとどめており、更なる活用例を知りたい人 + Fluxのような単方向データフローのアプリケーションをAndroidで手軽に実現する方法を知りたい人
Google I/O 2017でKotlinが公式にAndroidアプリの開発言語としてサポートされるようになったことを受けて、はてなでも即日Kotlinの採用を決め、はてなブックマークアプリへと組み込んでいます。 このセッションでは実際に導入時に検討したこと、導入時に行ったこと、Kotlinの言語機能の活用事例や、利用して起きた問題やその解決策を紹介し、皆さんのKotlin導入を後押ししたいと思います。
MaterialDesignが発表されてから3年がたち、ドキュメントやSupportLibraryが充実してアプリのMaterialDesign対応は当たり前になりつつあります。 本トークでは2016年に発表されて今も活発に更新されているConstraintLayoutを利用したMaterialDesign対応について次のような内容を紹介します。 * MaterialDesignに対応するためのConstraintLayoutとレイアウトエディタのツール面での工夫についての解説 * チーム開発をスムーズにするConstraintLayoutの使い方 * ConstraintLayoutと他のViewGroupの使い分け * iOSとMaterialDesignのちょっといい関係 * アプリ・サービス全体でデザインを統一するためのTips 5年以上続くECサービスにMaterialDesignを導入し、ConstraintLayoutを導入し、変化させ続けた経験からよりよいConstraintLayoutとMaterialDesignの利用方法を提案できればと思います。
Fragment内にFragmentを実装する「Fragment in Fragment」を考えるとき、本当に必要なのかと一度立ち止まりますが、やはり熟考した上で採用することになったときに、 どういうったことを考慮にいれるべきなのか、挙動はどのようになるのか、などパターン例を示しながら解説をしたいと思います。 対象 - Fragmentの実装・挙動は一通り理解している方 - Fragment in Fragmentなアプリケーションの実装経験のある方 内容 - FragmentManager and ChildFragmentManager - onActivityResult - BackStack
Androidのレイアウトシステムは標準で多彩なレイアウト方法が用意されており、その内部的な挙動を意識することは多くないでしょう。 ですが時折その仕組みを理解しなければ解決ができない問題に直面することがあります。 このセッションでは、Androidにおけるレイアウトの仕組みがどうなっているのかを詳細に解説し、各種レイアウトへの理解を深めます。
設定するだけで、知っているだけでちょっと開発効率があがる。 そんな、今日から使える Android Studio のお得情報を、実際の導入事例を元に紹介したいと思います。 ほとんどがAndroidStudioの話になる予定です。 基本的にはデフォルトの状態でできることを紹介する予定ですが、特に有用なものであれば外部ツールを利用したものについても紹介する予定です。 アジェンダ(予定) - フォーマッタの設定共有 - インスペクション設定共有 - 辞書設定の共有 - tools属性の利用 - 正規表現の簡易チェック方法 - Language Injection の利用方法 - 等
【概要】 最近のSNSアプリには当たり前のようにマルチログイン機能が実装されるようになっていますが、いざ自分でこのマルチログインを実装しようとすると様々な壁にぶつかります。具体的には、シングルトンの扱いや、実行中の非同期処理のキャンセル、永続化されたデータの扱いなどです。本発表では、マルチログイン機能を開発するための手法を解説します。 【対象者】 ・マルチログイン機能の実装に悩んでいる方 ・マルチログインによってコードが複雑化してしまって困っている方 【目次】 ・マルチログインの定義 ・マルチログインの実装において障壁となるもの ・シングルトン ・実行されている非同期処理 ・永続化されたデータ ・障壁を回避するための方法論 ・シングルトンで定義して良いもの、ダメなもの ・非同期処理の管理方法 ・Daggerを使った永続化データのコンテナ化
【概要】 クライアントアプリは年々複雑化しており、それに伴ってクライアントアプリが扱わなければいけない状態も加速度的に増加しています。ここ最近ではこのような状態管理にまつわる課題を解決するためにFluxを採用する事例がいくつか出てきており、私が業務で開発しているアプリでもFluxを採用しています。本発表では、Fluxが登場した背景と解決しようとしている課題を整理し、Androidアプリへの導入方法をコードレベルで解説します。また、Fluxを使う場合のテストコードにも言及します。 【対象者】 ・アプリの状態管理に苦労している方 ・画面を跨いだ情報共有に苦労している方 ・Fluxのメリット・デメリットや実装方法を知りたい方 【目次】 ・Fluxが登場した背景 ・Fluxが解決しようとしている課題 ・Fluxの概要 ・単方向データフローについて ・View, Action, Dispatcher, Storeそれぞれの役割を解説 ・Fluxでは非同期処理をどのように扱うか ・Reduxとの関係性 ・FluxをAndroidで実装する ・View, Action, Dispatcher, Storeをどのように実装するかを解説 ・Fluxを使う場合のテストについて ・まとめ ・Fluxのメリット、デメリット ・Fluxの採用基準
FlutterはDartで開発するAndroidとiOSの両方に対応したハイブリット開発ツールです。Flutterの概要、特徴、仕組み、機能のデモ、開発手順、各プラットフォーム向けプラグイン開発等々の紹介を致します。
【概要】 ここ数年でAndroidアプリ開発においてはMVPやMVVM、Fluxなどのアーキテクチャが採用されることが多くなってきています。本発表では、様々あるアーキテクチャの概要を解説し、それぞれのアーキテクチャが解決しようとしている課題を整理した上で、アーキテクチャの選定基準を解説します。 【対象者】 ・MVP, MVVM, Fluxなどについて知りたい方 ・アーキテクチャ選定に悩んでいる方 【目次】 ・様々なアーキテクチャが登場した背景 ・代表的なアーキテクチャの概要 ・MVC, MVP, MVVM, Flux, etc… ・それぞれのアーキテクチャが主に解決しようとしている課題 ・MVP:MVCにおけるFat Controllerとそれによるテスタビリティの悪さ ・MVVM:データ変更通知の煩雑さ ・Flux:クライアントにおける複雑な状態管理 ・Google製のライブラリ、サンプル実装 ・Data Bindingの立ち位置 ・Android Architecture Componentsの立ち位置 ・Android Architecture Blueprintsの紹介 ・アーキテクチャの選定基準
gRPCを利用した、ServerとClientの双方向通信に関して話します。 サーバー側で持っている情報の変化をリアルタイムでクライアント側で検知したい!そんな要件と出くわしたことは無いでしょうか。それを実現するために今までポーリングやコメット(ロングポーリング)、WebSocket等、様々なといった技術が登場しました。このセッションでは新たな選択肢としてgRPCの紹介をします。 # gRPCとは? GoogleがOSSとして開発しているHTTP/2ベースのRPCフレームワークです。HTTP/2ベースなので双方向ストリーミングやフロー制御、ヘッダー圧縮などが可能になっています。 # 話そうと思っていること - gRPCの紹介 - gRPCの扱い方 - gRPCの嬉しいこと/辛いこと - 需要があればプロダクト(FRESH!)での利用例紹介
■対象者 ・アプリエンジニアとしてのキャリアに不安がある人 ・iOSアプリ開発に興味があるAndroidエンジニア ■概要 DroidKaigi、iOSDCに代表される国内アプリエンジニアカンファレンスの規模や来場者数の推移からも分かるように、近年のアプリエンジニアの需要は更に高まっている。このような背景において、トレンドを把握し正しい技術力を身に着け生存するためには、各OSやプラットフォームへの専門知識のみに固執することなく横断的な知識を身につけることが必要である。 本セッションは、株式会社サイバーエージェントに入社してから5年の間に、バックエンド、Android、iOSの3分野における開発を担当した私が学んだこと、各フィールドでのコミュニティの違い、アプリ両OSの根本の考え方の違いなどを発表すると共に、今後のアプリエンジニアのキャリアの方向性を示すものである。 ■セッション内に登場予定の主なキーワード ・Android / iOS 二刀流 ・Androidエンジニアが作るiOSアプリ
テストを自動化するには実装段階で様々な考慮が必要になってくる。dagger2を使ったDIについてと、Espresso + mockitoによるテスト自動化について発表する。 # 概要 - dagger2を使ったDIについて - Espresso + mockitoについて
Recently, Tumblr released Graywater, a RecyclerView library for decomposing large list items to improve scroll performance. This talk walks through how to build an advanced, flexible list implementation backed by Graywater and utilizing Dagger 2 multibinding to configure Graywater for different screens. Although Graywater has greatly reduced OutOfMemory errors at Tumblr, the library is not for all apps. The talk cover the benefits and limitations of Graywater in comparison to other recently-released RecyclerView frameworks, such as Litho and Epoxy, as well as implementation decisions and details.
デザインスプリントは短期間でプロトタイピングと検証を繰り返しアイデアを洗練させるGoogleの提唱するスタートアップ向けプログラムです。 本トークではデザインスプリントの紹介からワークショップの体験記、現場への導入まで、デザインスプリントをやってみてよかったこと難しかったことなどをお話します。 プログラミングに入る前からがアプリ開発です。 アプリ開発のための選択肢をより広げるために、デザインスプリントという手法のご紹介をできればと思います。
Androidアプリをリリースすると、その瞬間からユーザーからの評価を受けることとなります。リリース直後は高い評価を受けていても、開発環境やOSの変化についていけないと、クラッシュが増加してユーザーの評価の下落につながります。 弊社のアプリも一時期この流れに乗ってレビュー評価が落ち続ける流れに乗ってしまっていました。 この流れを止めるために我々はどうすればよいのか?! 本セッションでは、弊社のアプリレビューが如何にしてV字回復を果たして上昇気流に乗ろうとしているのか、対策とチーム体制についてその軌跡をご紹介します。
■対象者 ・海外カンファレンスに行きたい人 ・海外カンファレンスにどうやって行けばいいのか分からない人 ■概要 Androidエンジニアとして年に一度開催されるGoogle I/Oに一度は参加したいと思います。その他にもDroidConを代表するデベロッパーカンファレンスが世界各地で開催されています。 本セッションでは、去年のDroidCon London 2016、今年のGoogle I/O 2017 に会社の経費で参加した私が、海外カンファレンスの準備や参加するにあたっての注意事項、社内経費の申請、社内選抜の勝ち抜くための準備についてお話します。 ■セッション内に登場予定の主なキーワード ・Google I/O ・DroidCon
■概要 ConstraintLayoutは、フラットなビュー階層を使用して複雑なレイアウトを作成できます。RelativeLayoutと似ていますが、RelativeLayoutよりも柔軟に表現することができ、xmlを編集するのではなく、レイアウトエディタによりレイアウトを作成できます。 このセッションでは、ConstraintLayoutについての基本的な使い方や各機能についての解説を行います。 ■対象者 - Androidアプリ開発をある程度やったことのある人 - ConstraintLayoutに興味がある人 ■目次案 - ConstraintLayoutとは? - ConstraintLayoutとRelativeLayoutの違い - ConstraintLayoutの制約について - 制約を追加する - 自動的に制約を作成する - biasについて - チェーンについて - 配置 - 相対的 - 中央揃え - 円形 など…
画面遷移やボタンをタップした際のアニメーションはアプリとユーザのインタラクションを考える上で重要な要素となります。結果としてアプリを操作するユーザーに対しての補助や体験を向上させます。本発表ではそんなチップスをいくつか紹介していく予定です。
■対象者 ・マテリアルアニメーションの詳細を知りたい方 ・これからアニメーションを実装したい方 ■概要 近年、UIなどの静的な画面のみならずアニメーションなど動きを取り入れたアプリが国内外で評価されており、非常に素晴らしいユーザー体験を提供している。 本セッションはアニメーションを今まで導入したことがなかったエンジニアを対象として、Lottieライブラリを用いて簡単に最初の一歩を踏み出すための説明を行います。 ■セッション内に登場予定の主なキーワード ・マテリアルデザイン ・アニメーション ・Lottie
■概要: アプリの品質の担保やオペレーションコストを減らすためにCIサービスを利用しているところは多いと思います。 CIサービスの中には、Androidの動作環境が備えられているものが多いですが、Dockerを使うことで自分にとって最適なAndroidの動作環境を用意することができます。 自前のDockerイメージを作ることで、環境を選ばずにテストなどを実行できるようになります。 本セッションでは、自前のDockerイメージをさまざまなCIサービスで運用することと、自前のDockerイメージを利用するメリット・デメリットについて話します。 ■目次案: - Dockerとは - 自前のDockerイメージ - CIサービスで利用 - エミュレータテスト - 並列テスト - 自前イメージを利用しない方がいい時
# 内容 これまで私は6年間サーバサイドエンジニアとしてキャリアを積んできましたが、1年程前からAndroidアプリも担当することになりました。 この発表では、サーバサイドエンジニアからAndroidアプリエンジニアに転向するにあたってぶつかった4つの壁とその乗り越え方についてお話ししたいと思います。 発表の前半では以下の4つの壁について重要なポイントに絞って解説を行い、後半では前半で学んだ知識を元にKotlinでサンプルアプリを作る例を示しながらより理解を深めます。 - 言語の壁 - Kotlinの特徴と他の言語との違い - Kotlinの基本的な文法 - Androidの基礎知識の壁 - Activity, Fragment, ライフサイクル - ビューとレイアウト - RecyclerView etc. - 設計の壁 - MVP, MVVM, Clean Architecture - API通信と非同期処理の壁 - RxJava, Retrofit # 対象者 - Androidアプリ開発を始めて半年以内の人 - これからAndroidアプリを開発することになった人 - KotlinやRxJavaなどを使ってAndroidアプリを開発したい人
限られたエンジニアリソースかつ複数組織にまたがる開発チームにおいて、数十のAndroidアプリをリリース・運用するのに、必要なAndroidアプリおよびサーバレスクラウドネイティブアプリケーションのCI/CDを4年にわたり構築運用してきた様子をお伝えします。
340件の投稿