画竜点睛を衝く@mapyo

日々やった事をつらつらと書くブログです

kotlinをやっていく上でAndroidアプリのOSSを集めてみた

kotlinやっていこうという気持ちになったので、OSSで参考になりそうなAndroidアプリとして動いているサンプルを探してみました。まだ全部深くソースまでは見ていません。なんか他に良さげなやつがあったら教えてくだせー。

なお、最新のkotlinのバージョンは

blog.jetbrains.com

1.0.5が最近リリースされたばかりです。

  android-mixed-java-kotlin-project

JetBrails社が管理しているのkotlinサンプル集の中の一つ。

github.com

Bandhook-Kotlin

Last.fmという音楽を共有出来るサービスのクライアントアプリ

github.com

MaterialAudiobookPlayer

音楽再生アプリ

github.com

tachiyomi

フリーでオープンソースな漫画リーダー

github.com

monotweety

シンプルなTwitterクライアント

github.com

サンプル的なやつ

github.com

所感

https://github.com/trending/kotlin?since=monthly

木曜日の夜のテンションで雑にGitHubを検索して探しました。この辺のサンプルを見ながら勉強していこうかなぁという気持ち。たぶん。。。

RecyclerViewでドラッグ&ドロップして入れ替えるサンプル作ってみる

RecyclerViewで、GridLayoutManagerを使って、画像をドラッグ&ドロップして入れ替えるサンプルを作ってみた。こんな感じ。

https://cloud.githubusercontent.com/assets/1322515/19758879/60cca048-9c65-11e6-9e64-4a9135425100.gif

ソースはこちら。

github.com

ItemTouchHelperを使ってる。また、細かいところだけど、長押しした時に画像がちょっと大きくなるアニメーションを入れたり、RecyclerViewからはみ出た時にもちゃんとそのViewが表示されるようにしたりしている。 地味にRecyclerViewの下に表示されているTextViewの上側に表示されている事がわかるだろうか。

clipChildren, clipToPadding, bringToFrontなどが主なキーワード。

これからもちょこちょこサンプルを作っていきたい。

参考にしたサイト

qiita.com

qiita.com

qiita.com

Androidアプリが存在しないサービスのAndroidアプリを作ってみるという試み

こういうの作ってみた。 f:id:mapyo:20161024012907g:plain

ソースはこちらにアップしてある

github.com

タップしても何も起きなくて、単純に一覧を表示するだけ。

いろいろ考えた事

データをどう用意するか?

存在しないアプリを作るので当然、APIなども存在していない。 最初はアプリ側でwebページにアクセスしてスクレイピングしてそれを表示させよう。と考えていた。

mk.hatenablog.com

こんな感じで書くとテストも書けるしめっちゃいいじゃんと思ってた。 けども、冷静に考えると結構だるいなーという気持ちになり、やらなかった。

アプリからスクレイピングをしないとなると、手作業でJSON作るか。という気持ちになってたけど、結構だるいなーという気持ちになり、やめた。

次に、

nelog.jp

URLを入力してくれるだけでデータを作ってくれるやつを見つけて、よさそう。と思ってちょっと使ってみたのだが、JSONの形式が自由に決められなそうだったので、結構だるいなーという気持ちになり、やめた。ちゃんとは調べてない。

次に、

data.gunosy.io

Scrapyというスクレイピング用のフレームワークを発見して、若干使おうとしてみたけど、結構だるいなーという気持ちになり、やめた。しっかりスクレイピングするんだったらこういうのを使った方がよさそう。Rubyでやるんだったら、nokogiriとmechanizeなのかな?

いろいろやろうとして、最終的にだるいなー。という気持ちが高まりつつあったのだけど、以前Node.jsのcheerio-httpcliというやつを使った事を思い出して、使ってみた

mapyo.hatenablog.com

jQueryっぽい感じでデータ取得出来るので結構楽じゃんという事を思い出して、無事JSONを何パターンか作る事が出来た。

スクレイピングする時に作ったソースはこの辺。

https://github.com/mapyo/FindTravel/tree/master/scraping

どういう見た目にするか?

iOSアプリは存在していたので、それを参考にしてAndroidっぽい感じにした。あとは、なるべく実装しやすそうなUIを選んで作ってみた。2パターン作っただけだけど。

期間

GitHubのコミットログを見てると、大体1週間かからないくらいで作ってた。

この後

スクレイピングの部分をAPI作って動くようにして、アプリでそれを受け取るようにして、タップするとChrome Custom Tabsとか使って開くようにすれば動くものが出来そうな気がしなくもない。気分が高まればやってみたい。

出来れば作ったからにはGoogle Playに公開したいなぁという気持ちがあったんだけど、いろいろとまずそうなので、一旦保留。Androidユーザでアプリでとりあえず使いたいという人には需要があるかもしれないけども。。

まとめ

  • 作る時はAPIが公開されていなければスクレイピングが一番だるい
  • iOSアプリが存在しているとそれを参考に出来るのでちょっとはやりやすそう
  • Google Playに公開は出来なさそう
  • いろいろ作る事自体はおもしろい!!
  • アプリのデモの動画をとるのがかなりめんどくさかった

次何かを作るときは、Kotlinを使って作ってみたい気持ち。

Androidアプリが存在しないサービスのAndroidアプリを作ってみる試みとは別に、既にAndroidアプリが存在しているサービスのUIの部分を作ってみる試みもやってみたい。

LOGICOOL ワイヤレストラックボール M570tを買った

今までマウスなくてもMacについてあるトラックパッドでやっていけるやろと思ってた。

Android Studioを使ってるとマウスカーソルでぽちぽちする必要が出てきたり、Androidエミュレータをさわってるとそもそもトラックパッド使わないと操作出来なかったりでトラックパッドを使う機会が増えてきた。

トラックパッドも十分使いやすいんだけど、ぽちぽちぽちぽちやってるとどうしても指が痛くなってきてしまう。なので、マウスを買った。

マウスと一口に言っていろいろあって、どれ買おうかなぁというのでいろいろ悩んだ。今まで使ったことのないタイプを買ってみようということで思い切って買った。

LOGICOOL ワイヤレストラックボール M570t

LOGICOOL ワイヤレストラックボール M570t

よかった事

  • ボールをぐりぐりするだけでマウスよりも楽に移動できる
  • 指が痛くならない
  • ボールは思ったより使いやすかった

所感

レシーバでMacの2つしかないUSBポートが1つ埋まってしまって、スマホをケーブルで繋げなくなってしまったのでUSBハブを買った

電源ついてるやつでいい感じ

そんな今日この頃

Androidのビルド高速化の為にやったこと

ビルド遅い遅い言うだけで特に何も調べてなかったので調べてやってみた。

参考にしたのは

qiita.com

konifarさんのqiita。他に調べてみたけど、だいたいこんな感じだった。

org.gradle.jvmargsの値が結構低かったので上げてみた。これだけで10〜20秒くらいは早くなったので驚き。(僕のMac環境調べ)

gradleをオフラインモードにするのは前々からやっていて、何か新しいライブラリとか追加した時は、

./gradlew preBuild

これを実行すると毎回Android Studioの設定を変更する必要がないので便利。

これについてはこの辺に書いた。

mapyo.hatenablog.com

その他やった事

developer.android.com

この辺を眺めてたら、Instant Runの部分で、

Crashlytics を利用してビルド時間を短縮する
Fabric Gradle プラグインのバージョンが 1.21.6 以前だと、Crashlytics によってビルド時間が長くなる可能性があります。

こんな事が書かれていてびっくりした。調べたら以前のバージョンだったので最新バージョンに上げた。

所感

これでもうちょっと早くなるといいなぁ。なってくれ〜。

ビルドしてる最中はMacが完全に重くなって実質作業出来ない状態になるので、いっその事諦めて別PCで作業するというのもありなのかもしれない。

重くなるだけならいいんだけど、いやよくはないんだけど、その状態でキー入力すると途中の文字が飛んで入力されてしまう事があるからたちが悪い。せめて遅くてもキー入力した内容は出てきて欲しいと感じる今日この頃。

他に早くなりそうなネタがあったらどなたか教えてください〜

gradle-deploygate-pluginでアップする時に自動的にブランチ名とハッシュ値をメッセージに入れる

問題点

gradle-deploygate-pluginを使うと、コマンド一発でDeployGateにアップ出来て非常に便利。

しかし、DeployGateにapkをアップした時に、あれ、これmasterでビルドしたっけか?master最新にしてたっけか?という不安に駆られる事があると思う。

解決方法

コマンド実行する時にmessageにブランチ名、ハッシュ値を含めるようにする。以下のような感じ、そしてちょっと一工夫して、releaseビルドのときには[production]という文字が入るようにしている。

deploygate {
    userName = "XXXX"

    apks {
        def branch = 'git rev-parse --abbrev-ref HEAD'.execute([], project.rootDir).in.text.trim()
        def hash = 'git rev-parse --short HEAD'.execute([], project.rootDir).in.text.trim()
        def commonMessage = System.getenv('MESSAGE') + " ${branch} ${hash}"
        debug {
            message = commonMessage
        }
        release {
            message = "[production]" + commonMessage
        }
    }
}

これで以下のように実行すると、

MESSAGE="ほげほげ" ./gradlew uploadDeployGateDebug

DeployGateのメッセージのところには、

ほげほげ master 1856bca

という感じに入ってくれる。地味に便利。