techium

このブログは何かに追われないと頑張れない人たちが週一更新をノルマに技術情報を発信するブログです。もし何か調査して欲しい内容がありましたら、@kobashinG or @muchiki0226 までいただけますと気が向いたら調査するかもしれません。

Android

一晩でAndroidアプリ公開

TL;DR Android Studio など必要なファイルのダウンロードは済ませておく(ここは"一晩"の中に含まない) 作るアプリはシンプルに デザインは頑張れないので絵文字を多用 アイコンは Android Asset Studio - Launcher icon generator を使わせてもらったらすご…

Google Maps APIを使ってみる

Google Maps API マップを Android アプリに追加しましょう。ベースマップ、3D の建物、屋内のフロア図、ストリート ビューや衛星画像、カスタムのマーカーなどを統合できます。 Google Maps API 準備 APIを有効にする AndroidManifest.xmlの設定 Mapを表示…

RecyclerViewのフォーカス位置をトグルする

Android TVや業務用のシステムにAndroidが利用されるケースが増えてきていることでDPADを利用したアプリケーションの開発が再度行われるようになってきました。 そうした中でRecyclerViewで表示した画面の一番上のアイテムにフォーカスが当たっている状態で…

Google Places API を使ってみる

Google Places APIとは 引用 Google Places API を使えば、Google マップや Google+ と同じデータベースから取得される約 1 億か所の多彩なプレイスの詳細情報にアプリでアクセスできるようになります。

独自Annotationのコード生成をjavapoetを使ってやってみる

独自Annotationを使ってコードの自動生成(Annotation Processor)をこちらの記事で行いました。 自動生成を行うにあたって文字列をStringBuilderを使って生成するとインデントや似たコードの生成などを作る際にコードを生成してみないとわからないためかなり…

Androidで独自Annotationを使ってコードの自動生成したコードを使う

独自のAnnotationを定義したものを利用してコードの自動生成を行う方法について説明します。 独自のAnnotationの作り方はこちらを参照して下さい。 コードの自動生成をするにはAnnotation Processorという機能を利用して行います。 最近まではandroid-aptと…

Chuckを使ってRetrofitの通信を確認する

AndroidでHTTPの通信する際に利用されるOkHttp3用に作られたデバッグ用のツールChuckというのがあります。 Chuckの特徴はログとしてアウトプットするのではなく通信があった時に通知領域に表示され、通知を選択するとアプリが立ち上がり通信内容を閲覧するこ…

ConstraintLayoutをXMLでレイアウト定義を行う

AndroidのConstraintLayoutは新しく追加されたレイアウトです。 ConstraintLayoutはLinearLayoutやRelaytiveLayoutでは実現できなかったフラットなビュー階層を使用して、大規模で複雑なレイアウトを作成できるようになりました。 そしてAndroid StudioのLay…

StreamAPIをAndroidで使いたい時にRxJavaとLightweight-Stream-APIどちらを選べばいいのか調べるため計測してみました

Androidのアプリ開発をする際にJava8のStreamAPIを使いたいと考えることがあると思います。 2016/11/12時点では次の2つのライブラリでSteramAPIを使うことを可能とします。 Lightweight-Stream-API RxJava StreamAPIを外部のライブラリで実現した際に遅いと…

AndroidのライブラリプロジェクトでHugoのログを表示する

Androidのメソッドの呼び出しなどでログを表示をアノテーションが付与されているメソッドの呼び出し時に呼び出し時の引数の表示とをログに表示するライブラリです。 ただしAndroidのライブラリプロジェクトではビルドの設定の関係でログが表示されません。 …

Annotationを自作する

普段Androidアプリの開発を行っている際に、何の気なしにAnnotationを使用していましたが、ふとその仕組みが気になりました。 Annotationを利用することで二重化を防いだりコード量を減らせたりといった利点もありますが、個人的には使いすぎると可読性が下…

AndroidのPercelデータを自動生成するAutoValueを使ってみる

Googleがautoというライブラリ群の中にあるAutoValueというデータクラスを自動生成するライブラリがあります。 このAutoValueではJavaの一般的なデータクラスの生成しかできないためAndroidのインターフェースのParcelableを実装したものを自動生成すること…

Android 7.0 Nougatのマルチロケールについて

Android 7.0 Nougatから、マルチロケールが採用され、それに合わせてシステムのロケール選択のロジックが変更になったようです。 developer.android.com 今回は、以下の公式ドキュメントを参考に、マルチロケールを選択できるようになることで何が変わるのか…

QuantumFluxを使ってContentProviderを作成する

AndroidのContentProviderを作るときにsqliteを使っているケースがほとんどだと思います。 しかし昨今のORMではsqliteを作るのは簡単ですが、ContentProviderでの適応が難しいケースが多々あります。 そこでContentProvider用のORMとしてQuantumFluxというの…

Android 7.0 Nougatでクイック設定(Quick Setting)を追加する

Android 7.0 Nougatで新しく追加されたTile APIを利用することで、クイック設定(下図)を自作することができます。 developer.android.com developer.android.com 今回は上記リンクを参考に、クイック設定の追加方法について見ていきます。 TileServiceを作…

AndroidのWindowManagerでViewを表示するときのIMEの制約

Androidのアプリを作っている時にどの画面よりも手前にViewを表示したい時にWindowManagerを使って特定の指定レイヤーに対してaddViewを行うケースがあります。 しかし、このaddView時に発生するIMEの表示の制約があるのでそれをご説明します。

Android 7.0 Nougatの新しい外部ストレージアクセスを試してみた。

Android 7.0 Nougatでは新しい外部ストレージへのアクセス方法が提供されました。 developer.android.com developer.android.com これまでAndroidで外部ストレージにアクセスするには、ManifestファイルにPermissionを定義し、さらに6.0からはパーミッション…

Spinnerのデータとしてenumの配列を使用する場合のTIPS

Spinnerの表示データとしてenumを使用したときに引っかかった罠があったので共有したいと思います。 Spinnerとは Spinnerは複数の選択肢から一つの要素を選択するためのUIを提供するWidgetです。 詳しいことはDeveloperサイトを御覧ください。 developer.and…

Android Studioにコードジャンプするログを作る

Androidのstacktraceなどでコードジャンプするログが表示されています。 コードジャンプ自体はAndroidStudioの機能になるのですが、ログの作り方を工夫することでコードジャンプすることができるログを作ることができます。 そこで今回はコードジャンプする…

RxJava Mathを使って最大・最小・平均・合計を計算する

RxJavaを最近使うことが多くなってきてストリームに流れているデータ内の最小値と最大値を取ることができないか調べておりました。 そうするとRxJavaのMathというのがありそれで実現できたのでそのやり方とMathの機能についてごしょうかいします。

AndroidライブラリからアプリケーションプロジェクトのBuildConfigの値を参照する

Androidアプリ開発の際にオープンソースのライブラリを組み込むことが多いと思います。 そういった中でアプリのデバッグの時にはライブラリのログを出したいとかデバッグの時だけこういった挙動をしたライブラリがほしいことかがあります。 そこで今回はaar…

FirebaseのRealtime Databaseを利用してみる 〜その2〜

前回に引き続き、FirebaseのRealtime Databaseについてです。 今回は、前回保存したデータをクライアント上から参照してみます。 Realtime Databaseはその名の通り、データベースに変更があった場合に、それをリアルタイムにクライアントに反映させることが…

Retrofit2のレスポンスをmockに置き換える Retrofit-Mock編

前回の記事では、MockWebServerを使用してサーバ自体をMockに置き換えた。 blog.techium.jp 今回はRetrofitMockにてResponseの内容をMock化する方法を使う。 build.gradleの修正 // レスポンスのパースにgsonを使用 compile 'com.squareup.retrofit2:convert…

ContentProviderアクセステスト用ライブラリPantomimeを公開しました

Androidの開発を行うにあたってContentProviderへアクセスする場合にContentProviderの中身が動的に変化する場合にテストを書く場合に同じ環境にならなくてユニットテストが失敗したりすることがあります。 そこで今回作ったPantomimeを紹介します。

FirebaseのRealtime Databaseを利用してみる 〜その1〜

FirebaseのRealtime Databaseを利用してみました。と言っても、まだデータを登録しただけなので、導入編といった感じです。 Realtime DatabaseはFirebaseがクラウド上に提供するNoSQL型のデータベースです。 今回はこのRealtime Databaseを利用して、データ…

Retrofit2のレスポンスをmockに置き換えるMockWebServer編

ユーザー登録画面など、ネットワーク通信を伴う画面のUIテストするとき、実際のサーバへアクセスしては、テストが意図した結果にならないことがあるだろう。 MockWebServerを使用することで、サーバへのアクセスを回避し、かつ、必要なレスポンスを返すよう…

Realm JavaのRealmQueryをループで使ったらヒドい目に遭ったという話

先日からAndroidアプリの開発でRealmを使っていますが、今回はRealmの仕様なのかバグなのかよくわからない挙動にハマってヒドい目に遭ったというお話。 歴戦のRealmerには既知の問題かもしれないので何か情報をお持ちの方は適宜突っ込んでもらえると助かりま…

Realm.writeCopyTo(File f)で.realmファイルの確認を簡略化する

前回の記事ではRealm BrowserでRealmのデータをGUIで確認する方法を紹介しました。 今回はRealm Browserでデータを確認する際の手順を簡略化する方法を紹介します。

Realm Browserで.realmファイルの中身を確認する(Android編)

Realmを使用する時に、実際に作成したDBの情報を確認する方法としてRealm Browserを使う方法とStetho-Realmを使う方法があります。 今回はAndroidでRealmのデータを作成後、Realm Browserで.realmファイルの中身を確認する方法を紹介します。

「Dribbbleのぬるぬる動くメニューUIのアイデア10選」からDelivery Card(FoldingCell)を試してみる

Dribbbleのぬるぬる動くメニューUIのアイデア10選という記事を見たので、実際に試してみました。 今回はこの記事の中で紹介されている「Delivery Card」を実現するためのFoldingCellを実装します。 www.youtube.com

Google Nearby Messages APIを使ってみる〜実際使ってみた編〜

前回の記事でNearby Messages APIのセットアップまでを紹介した。 blog.techium.jp 今回は実際にAndroid端末でメッセージの送受信を確認する。 動作確認に使用した端末はNexus 5 、Nexus 5x、全てのコードはActivityに実装した。

ETC1を使ってデータ量を少なくする

Androidで画像リソースを利用する場合はPNGが多いと思いますが、PNGは可逆圧縮のフォーマットのためどうしても一定サイズ以下にデータを小さくできません。 そこでよく行われるのPNGを最適化して使ったり、WebP、JPGなどが良くあります。 最近ではVectorDraw…

AndroidStudioをビルドする

Motivation AndroidStudioの機能デバッグしたいんだけど、と前々から思ってたので時間とれたついでに試してみた。 ソース読んだりするのもIDEに食わせると楽できるのでオススメ。 Motivation repo sync Java6とJava8のインストール Intellij CEのインストー…

JackでDagger2が使えるようになった

先日、JackでDagger2が使えないという記事を書きましたが、なんとJackでもDagger2が使えるようになりました! Dagger2だけじゃなくannotation processingが使えるようになりましたので、他のツールも動くようになりました。 なぜ動くようになったかというとG…

RxJava:Error Handling Operatorを使ったエラーハンドリング方法を理解する

RxJavaではObservableでExceptionが発生した場合、デフォルトではそのObservableを監視しているObserverのonErrorメソッドが実行され、出力元のObservableが終了します。 想定外のエラーが発生して処理を続行することが困難な場合はonErrorで適切な後処理を…

The experts' guide to Android development toolsで紹介されてたASショートカット(気になったのメモ

Motivation Google I/O 2016のセッションを少しずつ消化しているのだけれど、「The experts' guide to Android development tools」のセッションで紹介されていたAndroidStudioのショートカットが有用っぽいので備忘録がてらまとめておく。 とりあえず「ctrl…

AppLaunchCheckerを使って初回起動を判断する

Androidアプリを作るにあたって初回起動を判断する必要があると思います。 よくあるケースとしてははじめて起動した時にチュートリアルを表示して、2回目以降はチュートリアルを出さないようにするなどの処理を考えたりするときに判断が必要になります。 一…

RxJava:doOnEach系メソッドでObservableのライフサイクルを理解してデバッグに役立てる

今回はRxJavaのdo〜系メソッドを使ってObservableのデバッグに役立てる方法を紹介します。

MaterialDesignのLoading中のProgressを作る

Motivation Material Designのガイドラインのコレが気に入ったので、汎用的に使えるようにFragmentで書いてみた。 Progress & activity - Components - Google design guidelines Motivation Progress Barを実装する FadeIn/FadeOutを実装する Activityから…

昼/夜のテーマを切り替える

AndroidではUiModeManagerを用いると端末自体のモードを切り替えることができましたが、アプリ内のテーマやリソースを切り替えることができませんでした。 最近になってAndroidのSupport Libraryに端末モードの切替に応じてUIのテーマやリソースを切り替える…

RxJavaのFiltering Operatorの使い方をまとめてみた

ReactiveExtenstionの根本的な概念としてObservableとOperatorがあります。前回はRxJavaをより深く理解するためにObservableの生成メソッドをまとめてみました。 今回は前回に続いて、Observableから流れてきた値をフィルタするFiltering Operatorの使い方を…

Cloud Test Labを使ってテストしてみる

Androidのアプリを開発するうえで様々な端末やバージョンに対応する必要があります。 しかし、端末とバージョンを網羅的にテストするには費用がかかってしまうため基本的に個人の力で網羅するのは現実的ではありません。 そこでGoogleが提供しているCloud Te…

RxJavaのObservable生成メソッドを一通り試してみた

RxJavaを使いこなすためにはObservableを理解することが欠かせません。今回はより深くRxJavaを理解するためにObservable生成メソッドの挙動を調べてみました。 RxJava(というかReactivePrograming)については、以前も紹介した以下の記事が大変分かりやすかっ…

AndroidでFlexboxLayoutを使ってViewを並べる

FlexboxLayoutなるものが出たというのをチラッと見たので、どんなものなのか試してみました。 github.com FlexboxLayoutは、CSS Flexible Box Layout Module をAndroidに持ち込んだものらしい。 しかしまだバージョンが0.1.2(昨日は0.1.1だった)ということで…

ViewPagerにIndicatorをつける

Motivation Indicatorつけたいやん!!と思い立ち、これでイケる! と思った後に「あ、ライブラリありそう」とググったら見つけて 「あっ。。。」ってなりました。 実装は参考程度に、下記ライブラリを使うのが良いのではないでしょうか。 github.com Motivati…

Android-ObservableScrollViewでパララックスなスクロールを実装する

Android-ObservableScrollViewはScrollViewやListViewなどのスクロール可能なウィジェットのスクロール状態を取得して、スクロールに関するイベントをハンドリングできるようにするためのライブラリです。 このAndroid-ObservableScrollViewを使用することで…

Stethoのdumpappを使ってアプリの情報を取り出す

Androidアプリを開発する際にアプリ内のデータにアクセスして何が保存されているかを取得してデバッグを効率的にできるようにすることは多々あると思います。 そこで今回紹介するのはStethoというFacebookが開発したライブラリのコマンドラインツールの作り…

Android で Local 通知するライブラリ

Android で Local 通知するライブラリ Android で Local 通知するライブラリ 作りたいもの リポジトリ 構成など 実装

RxAndroid x Retrolambdaでモダンな実装を試す

前回はRxAndroidでリアクティブプログラミングに入門するために、ダブルクリックイベントを検出するサンプルを作成しました。 実際にやってみた感想として、リアクティブプログラミングのコンセプトは非常に便利だと感じましたが、単純にJava単体で実装する…

Retrofit2でDigest認証の鯖とやりとりする

Motivation 対Digest認証を持つサーバーとお話することがあったので。 AndroidだとApacheのHttpClientがお亡くなりになったことで情報が色々入り交じってる。 今時だとOkHttp+Retrofit(2系からはokHttpを持ってる)を利用することが多そうなので、この環境で…