visible true

技術的なメモを書く

Android

Androidのアーキテクチャ本をクラウドファンディングで執筆します - 共著者3人の紹介 #peaks_cc

peaks.cc Android アプリ設計パターン入門 ある日 こんなこと書きます 個人的な思想としてアーキテクチャはチームのためにあると思っています。なのでそういう感じの章を書きます。章の紹介文を引用しておきます。 アーキテクチャはチームのために存在してい…

Clean Architectureを理解するための補助的なコンポーネント図のようなもの

Clean Architectureを雰囲気でしか理解していなかったんだけど、なんでだろうな〜って考えるとあの図とか説明文がややこしいからだな〜と思った。 抽象的なやつはええねん、具体をくれ具体を〜、と思ったので、Android-CleanArchitectureのサンプルコードを…

もうAndroidの非同期処理はasync/awaitでいいんじゃないかなぁと思った

Rx Ja Night Vol.2 - connpassで「 Androidの非同期処理をKotlinコルーチンで行う」という話をしてきました。 スライドで使っているコードは次のリポジトリに置いています。 github.com 今回取り扱った非同期処理の範囲 スライドやリポジトリのREADME.mdに大…

KotlinでViewDataBindingをシュッとinflateするやつ

RecyclerViewなどでViewDataBindingを使う時に次のように書くのめんどくさくて。 class ViewHolder(val binding:ListItemCommentBinding) : RecyclerView.ViewHolder(binding.root) override fun onCreateViewHolder(parent: ViewGroup, type: Int) = ViewHo…

DataBindingが原因のビルドエラー時にエラーを抽出するスクリプト

AndroidでDataBinding周りミスるとめっちゃエラー出て辛いですね。辛いのでDataBindingのエラーを抽出するスクリプトを書きました。スクリプトはかなり雑なので適宜いい感じにしてください。 extract_data_binding_error.rb #! /bin/sh exec ruby -S -x "$0"…

DroidKaigi 2017で「解剖Kotlin ~バイトコードを読み解く~」を発表してきました

DroidKaigi 2017 3/9 15:10~ Room4で発表しました。 発表の内容 KotlinはJavaという話です。 感想 それなりに練習したけどわりと噛んだりつっかえたりしたのでもっと練習が必要だな〜と感じた。内容については前日までかなり色々迷って紆余曲折あったけど結…

Androidアプリケーションのビルド体験を改善するリモートビルドサービス Cyborg-Build を作りました

はじめに これはAndroid Advent Calendar 2016の20日目のエントリです。 本エントリではAndroidアプリケーションのビルド体験を改善するリモートビルドサービス Cyborg Build を紹介します。 背景 以前AndroidアプリケーションをGoogle Compute Engineのイン…

Kotlin 1.1 async/awaitの仕組みと使い方の概要 for Android

これはKotlin Advent Calendar2016の19日目のエントリです。 本エントリではKotlinの次期バージョン(1.1)で導入されるコルーチンと、その実装のひとつであるasync/awaitについて解説します。 今回書いているコードはGitHub - sys1yagi/kotlin-async-await-sa…

AndroidアプリケーションをGoogle Compute Engineのインスタンスでビルドする

AndroidのBuildを別マシンで行うスクリプト書いたった - Qiitaがとても興味深かったので、Google Compute Engineのインスタンスでビルドする環境の構築を試してみました。体験としては最高だったので、環境構築の手順を簡単にまとめます。 解決したいこと 前…

Circle CIでAndroid SDK周りのライセンス許諾をローカル環境に合わせる

Circle CIの公式ドキュメントのTest Android Applications - CircleCIにある通りAndroid SDKをCircle CIでダウンロードするには次のようにcircle.ymlに記述する必要がある。 dependencies: pre: - echo y | android update sdk --no-ui --all --filter "pack…

WEB+DB PRESS vol.94で特集「はじめてのKotlin」を書きました

2016年8月24日発売のWEB+DB PRESS vol.94(¥1,598)で特集「はじめてのKotlin」を書きました。 Amazon: https://www.amazon.co.jp/dp/4774182869 WEB+DB PRESS: http://gihyo.jp/magazine/wdpress WEB+DB PRESS vol.94: http://gihyo.jp/magazine/wdpress/arch…

Kotlin学習の知見のかたまり「Kotlinスタートブック」はサイコーのKotlin入門本です

Kotlinスタートブックを献本頂いたので感想を書きます。 Kotlinスタートブック-新しいAndroidプログラミング 概要 KotlinスタートブックはJavaエンジニアおよびAndroidアプリケーションエンジニア向けにKotlinの基本を解説する本です。Kotlinの文法や機能を…

AndroidでJava8環境 2016

RxAndroidとRetrolambdaで大体Java8をAndroidに持ち込む - visible trueから1年以上経過して界隈も色々更新されていってます。ということでイマドキのJava8環境構築をメモします。 バックポートライブラリとJava8の機能 バックポートライブラリとそのライブ…

Kotlin Tips: Reified Type Parametersで型チェックを汎用化する

問題 Kotlin Tips : Intentに必要な値が入っていない場合例外をスローしたい - visible trueではgetLongOrThrow()をIntentに追加しlazyを使う事で可読性を高めた。 Intent.getIntOrThrow(key: String)のおさらい fun Intent.getIntOrThrow(key: String): Int…

Kotlin Tips: 可読性のために拡張関数で別名をつける

問題 次のコードはRxJavaのCompletableを利用している例である。 repository.deleteEntry(entry) .subscribe( { e -> view.hideProgress() view.showError(e) }, { view.hideProgress() } ) このコードには次の問題がある。 repository.deleteEntry()がCompl…

Kotlin Tips : Intentに必要な値が入っていない場合例外をスローしたい

実際にKotlinを使っているなかで思いついたことなどをこまめにメモると良い気がしたのでなるべく書いていく Before : デフォルト値を使ってチェックする 以下のようにActivityでintなどのプリミティブな値を受け取るとする。値はrequiredでセットされなかっ…

Fundamentals Of The Data BindingをGitBookで公開しました。

丁度自分でもData Binding Libraryの細かい所を忘れていて自分の原稿読んでわーいって感じだったのでついでにGitBookに公開していつでも読めるようにしました。2015年夏に書いたものなので一部古い内容が含まれているかもしれません。適宜修正します。(セッ…

rxbinding-recyclerview-v7とPublishSubjectを使ってRecyclerViewでスクロールが一番下まで行ったらロードする実装

すでにある気がするけど見当たらなかったのでメモ。 ソース こちらにあります。 GitHub - sys1yagi/rxrecyclerview-load-more 準備 rxbinding-recyclerview-v7をdependenciesに追加する。 dependencies { compile 'com.jakewharton.rxbinding:rxbinding-recy…

kaptで発生するエラーを回避するworkaround (JSR 269ライブラリ作者向け)

KotlinでJSR 269のライブラリを使う場合以下の様にkaptを使って設定するわけですが不安定な動きをする場合があります。 kapt { generateStubs = true } dependencies { compile 'com.github.sys1yagi.fragment-creator:library:0.6.0' kapt 'com.github.sys1…

Androidでスクロールを含む画面全体のスクリーンショットを撮る

Android端末でスクリーンショットが撮れるようになって久しいですが、スクロールを含む画面全体のスクリーンショットについてはサポートされていません。デザインの全体を俯瞰してレビューする際などにはスクロールを含む画面全体のスクリーンショットがある…

fragment-creator 0.6.0 released

前回の記事(JSR 269の勉強がてらFragment生成と引数周りを楽にするfragment-creatorというライブラリを作った - visible true)は0.4.0を基にしており、その後いくつか書き方が変わったので差分を書いておきます。 本ライブラリはJitPackで配布しています。Ji…

JSR 269の勉強がてらFragment生成と引数周りを楽にするfragment-creatorというライブラリを作った

aptしてますか。 正確にはPluggable Annotation Processing API(JSR 269)なので以降はJSR 269と書きます。 Dagger2やRealmなどJSR 269でコード生成を行っているライブラリ群の理解を深め、あわよくばcontributionするためJSR 269を勉強しつつチョットしたラ…

robolectric3でShadowクラスを作るメモ

robolectric3のドキュメント通りにShadowクラスを書いてもうまく動かず、結局robolectric自身のソースを読んで理解してめんどくさかったのでメモしておきます。 Shadowクラスを定義する Shadowクラスは以下の手順で宣言します。 クラス宣言に@Implementsアノ…

Charles & Android Emulator 2015

Android EmulatorでCharles使う情報がだんだん古くなって現代に即してないので適当にメモする。 イマドキのAndroid Emulatorは-http-proxy 以前はAccess Point Namesでproxy設定していたけど5.0辺りからこの設定が利かなくなっている。emulator起動時の引数…

Android 6.0 の Runtime Permissions (M Permissions) に対応するためのアクティビティ図

M Permissionsをやっつけようという事でAPIやドキュメントを眺めたらそれなりにシンプルだなと思っていたけど実際手を出してみるとすごくややこしかったのでアクティビティ図にした。気をつけるべき点を後述する。 targetSdkVersionの違いによる挙動 アプリ…

TextViewが省略されたかどうかを確認する

ググってもだいたいEllipsizeの設定で自動省略の話しか出てこないのでメモる。 やりたい事 TextViewが省略表示になっているかを確認して処理したい、というモノ。 isTextTruncated()を作る TextViewUtilsとか適当に作る。おおむねgetLatyout()とかgetLineCou…

画面を開いた時にEditTextにフォーカスさせたくないのでBlockEditTextDefaultFocusLinearLayoutというViewを作った

画面を開いた時にEditTextにフォーカスさせたくない(キーボードを開かせたくない)という事で以下のアプローチを考えたがどれも上手くいかなかった。 EditTextを最初focusable=falseにしておく focusable=trueにするタイミングが難しい EditTextをfocusable=f…

kvs-schemaとdagger2を同時につかう

kvs-schemaというSharedPreferenceをいい感じにクラス化出来るライブラリがあるんですが、このライブラリはJSR 269(Pluggable Annotation Processing API)を使ってコンパイル時にコード生成をしています。dagger2も同様にJSR269によってコード生成をしていま…

ここがつらいよ realm-android 0.81.1

Realmわりといいんですが「簡単!便利!スナック!」というイメージだったのでスナックボリボリする感じで適当に書いてたらガンガンクラッシュ*1して「スナックじゃないな?ぬか漬けかな?」みたいな気持ちになりました。とりあえず一旦ぬか漬け*2部分をまと…

Data Binding Libraryが吐くコードがLintに怒られる時がある

問題 booleanを使ってandroid:backgroundの値を制御するようなレイアウトを書いたとします。 <data> <variable name="focused" type="boolean" /> </data> <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@{focused? @drawable/shape_focused : null}" > この時Data Binding Libraryが以下のようなコード…</framelayout>

Gradleで相対パスでライブラリプロジェクトを参照する

パッと出てこなかったのでメモっとく こんな構成の時、appからlibraryを参照したいとする。 myProject - app targetLibrary - library myProject/settings.gradle include 'app', ':..:targetLibrary:library' myProject/app/build.gradle dependencies { co…

minSdkVersion 17未満でもleanbackを使う方法

leanbackってminSdkVersion 17なので10*1とか14*2とか16*3とかしてると怒られるんですよね。 AndroidManifest.xml <uses-sdk tools:overrideLibrary="android.support.v17.leanback"/> OK。TV対応待ったなし。 *1:死 *2:おお *3:よしよし</uses-sdk>

Data BindingのテストはAndroid5.0以上の環境じゃないと動かない

※ 2015/06/28 20:31追記 ART環境だったら動きました。4.4系でもRuntimeをARTにしておけばテスト動きます 問題 Data Binding + Multidex倒したら「クックック奴と倒すとはな...さあやろうか」って感じで新たな問題が出てきました。テストコード側でBindingクラスに…

Data BindingとMultidexの兼ね合いの問題を大体倒したので実用段階待ったなし

Data Bindingを導入したかったけどmultidexの兼ね合いで躓いたので問題をまとめます。 - visible trueで死んでましたが、設定でなんとか頑張れる事がわかったのでメモします。 結論 これらを加えるだけ。 build.gradle android { defaultConfig { multiDexEn…

Data Bindingを導入したかったけどmultidexの兼ね合いで躓いたので問題をまとめます。

※解決しました http://sys1yagi.hatenablog.com/entry/2015/06/17/190547 個人アプリにフォイフォイ導入して上手く行ったので仕事の方でも、と思ってたら思わぬ罠で挫折したので記録しておきます。 環境 com.android.tools.build :gradle:1.3.0-beta3 com.an…

Android Data Binding LibraryのProguard設定

個人アプリに導入してリリースした。Proguardで怒られたので以下の設定を追加した。 -dontwarn android.databinding.** Release CIでコケるので心臓に悪いよね。

Android Data Binding Library 雑感

Google I/O 2015!! Data Bindingのサポート出ましたね。とりあえずアレコレ触ってみた雑感を書きます。Data Bindingの使い方や機能全般に関する説明はData Binding Guide | Android Developersを参照してください。 ※Android Data Binding LibraryはまだPrev…

Android StudioのUpdateで誤って"ignore This Update"を選択してしまった場合の対処法

I/O 2015! AS 1.3 Previewが出た!わいわい! でもまぁちょっと一旦待つか。破壊的変更入ってると怖いしね。とかいってダイアログを閉じたつもりが「ignore This Update」を押してしまった!! 無慈悲なignore This Update その後何度Update Checkしてもこれ…

avd-peco作りました

sys1yagi/genymotion-peco · GitHubに続いてavd-pecoというのも作りました。 sys1yagi/avd-pecogithub.com こちらはavd名を一覧して起動するやつです。最近のAndroid Emulatorはx86を使えば結構速いのと、バージョンの品揃えはサイコーなので使う機会が増えてい…

Retrolambda+Robolectricでテストを動かす為にtask.name ==~ /compileTest.*Java/をフックしているのにcom.sun.tools.javac.code.Symbol$CompletionFailure: java.lang.invoke.MethodTypeが見つからずエラーになる問題

タイトル長いな。 問題 Retrolambda+Robolectricでテストを動かす為に以下の様なコードをbuild.gradleに書く必要があります。正規表現で一致するタスクの時にビルドパスをretrolambdaに向けたり、コンパイラをJava8に変更するコードです。 参考 : Android - …

Gradle Plugin 1.1.0-rc1でJVMでテストを実行出来るようになったらしい

New Build System - Android Tools Project Siteの1.1.0-rc1のRelease Noteに以下の文が Unit testing support. Unit testing code is run on the local JVM, against a special version of android.jar that is compatible with popular mocking frameworks…

BintrayにAndroidのライブラリをアップする

Maven Centralは拝承しないといけなくて面倒だ、Bintrayは何か適当にアップ出来るらしいという事でBintrayに飛びついたのですがリポジトリにライブラリをアップする手順が難解で挫折し続けていました。途方に暮れていた所社内で以下のBintrayのページとリポ…

RxJavaをコレクション操作ライブラリとして捉えれば学習コストと導入リスクを低減できるのではないか

とりあえずRxJavaをプロダクトで使いたい、しかしチームに気軽に持ち込むには学習コストが高すぎたり習熟度が低い状態ではメンテナンスでリスクになったりするので導入できない。しかし導入したい。導入するにはどうしたらいいんだろうということで、RxJava…

RxJavaのObservable<T>でOptional<T>を代行する

RxAndroidとRetrolambdaで大体Java8をAndroidに持ち込むでOptionalは使えず、良さ気なライブラリは見当たらないと書いたのだけど、そもそもRxJavaのObservable<T>はOptional<T>と同等の機能を持ってるっぽくない?という事に気がついて試してみたらOptional<T>でした</t></t></t>…

Java 8: No more loopsをRxJavaでやる(Androidの環境で)

Java 8: No more loops Java 8: No more loops Java8のStream APIを使ってforループを無くすという記事。面白そうだったのでRxJava化しました。AndroidだとJava8 Stream API使えないですからね (´・ω・`)。Java8世界ではRxJavaってどういう位置づけなんでしょ…

RxAndroidを使ってEditTextで初期の高さを指定しつつ入力に従って動的に高さを調整する

※追記 これでいけました!minLinesというのがあったとは。RxAndroidなんかいらんかったんや! @sys1yagi これって、 android:inputType="textMultiLine" android:layout_height="wrap_content" android:minLines="5" でできるような気がします、が、違います…

RecyclerViewはListViewの代替ではないよねという話

※2016/07/16 追記: これもう大分古いのでこれからAndroidやるなら最初からRecyclerViewからやったらいいんじゃないでしょーか Lollipop周りについてあんまり興味が湧かないと思いつつも触らないわけにもいかないしな、という感じでボチボチRecyclerViewやCar…

RxAndroidとRetrolambdaで大体Java8をAndroidに持ち込む

※これもう大分古いので AndroidでJava8環境 2016 - visible true も御覧ください。 はじめに RxAndroid(というかRxJava)とRetrolambdaでそろそろ大体Java8な環境でAndroidアプリケーションが開発出来るのではないかと考えて試してみた。 2014年4月頃のRetrol…

MockWebServerRuleを使ってOkHttpClientのリクエストをmockする

Mockito1.9.5+OkHttp2.1.0でリクエストをmockするを書いた後、mockwebserverを使った場合についても考えた方がいいかもなーと思って試してみた。結果的にはmockwebserver使った方がいいなーという感想。OkHttpClientを直接mockしたかったのは、リクエストURL…

Mockito1.9.5+OkHttp2.1.0でリクエストをmockする

OkHttpのリクエスト周りのmockingが結構面倒くさかったのでメモ。 やりたい事 ベタ書きすると以下の様な事がしたい。単純にレスポンスをmockして返却したいデータをセットしたい。 OkHttpClient okHttpClient = mock(OkHttpClient.class); String body = "ho…