はじめに
昨今、リアクティブプログラミングが注目されています。GUIにおけるインタラクションや、時間経過と共に変化するアニメーションなどに適したパラダイムであると言われており、もちろんAndroidアプリケーション開発にも取り入れていくことが可能です。
本記事では、2018年1月時点における最新のAndroid開発環境であるAndroid Studio 3.0.1とAndroid SDK Build Tool 26.0.2(Android 8.0)と、Reactive Extensions(RxJava2)を使ったアプリ開発方法について、チャットアプリケーションを題材として紹介します。
対象読者
- Androidアプリケーション開発に携わるエンジニア
- Androidでリアクティブプログラミング未経験者
- Android 8.0、Android Studio 3.0未経験者
チャットの相手は、インターメディアプランニング株式会社が提供する「Repl-AI」に担当してもらいました。Repl-AIは、Web上のツールでシナリオを作成し、REST APIでメッセージを送信するとシナリオに従って自動応答をしてくれるBOT作成サービスです。下図は、今回のアプリケーション用に作成したシナリオの画面です。
Android Studio 3.0.1
ベースとなるIntelliJのバージョンが2016.2から2017.1.2に更新されました。 また、本稿ではJava言語を利用しますが、デフォルトでKotlinプラグインがインストール済みなので、すぐにKotlin言語を利用したAndroid開発を始めることもできます。
Android Studio 3.0ではJava 7およびJava 8の一部仕様をサポートしています。今まではRetroLambdaやJackの設定が必要でしたが、それらを行わずともJava 8の仕様でAndroid開発を行うことができるようになりました。このJava 8サポートは、desugarと呼ばれるバイトコード変換プロセスによって実現しているそうです。
desugarな環境であれば、Java 8で書かれたサードパーティ製ライブラリが利用できるといったメリットもあります(RetroLambdaではサポートしていませんでしたし、Jackは2017年3月14日に廃止がアナウンスされてしまいました)。
プロジェクトの作成とサポートするAndroidのバージョン
それではチャットアプリケーションの開発を始めましょう。プロジェクトを新規に作成するには[File]メニューから[New]-[New Project]と選択して、必要事項を入力します。プロジェクトを作成したら、生成されたプロジェクトのbuild.gradleを確認しましょう。
Android Pluginのバージョンが3.0.1(執筆時点)となっていることが確認できます。既存プロジェクトを利用する場合には、手動でバージョンをアップデートしてください。
buildscript { ...略... dependencies { classpath 'com.android.tools.build:gradle:3.0.1' } }
また、リポジトリ定義にGoogle Mavenリポジトリを追加しておきましょう。今後、support libraryなどはGoogle Mavenリポジトリで配布されます(※Android Studio 3.0.0以降で作成したプロジェクトならデフォルトで設定されています)。
allprojects { repositories { jcenter() google() // Gradle 4.0未満を利用する場合には、このように書けばOKです。 // maven { url 'https://maven.google.com' } } }
appモジュールのbuild.gradleも確認しておきましょう。今回は、サポートするAndroidのバージョンを5.0以上(API Level 21)としました。
2014年にAndroid 5.0がリリースされて3年以上が経過し、シェアが拡大しています。もしマテリアルデザインを取り入れるのであれば、UI/UXのメンテナンスが楽になるといった点からも、古いOSバージョンを切り捨てる選択も良いのではないでしょうか。
android { compileSdkVersion 26 buildToolsVersion "26.0.2" defaultConfig { ...略... minSdkVersion 21 targetSdkVersion 26 } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
仮にAndroid7.0(API Level 24)以上をサポート対象としたい場合は、以下の点に留意する必要があります。
- 残りのJava 8仕様(Optional、Stream API、java.util.functionパッケージなど)が利用可能
- ただし、上記はサードパーティー製のライブラリで代用可能
- 2017年10月時点で、Android 7.0以上のシェアは18%程度