読者です 読者をやめる 読者になる 読者になる

メモ2ブログ

メモtoウェブログ。旧ブログはこちら。 http://sakebook.blogspot.jp/

Bottom Navigationをガイドラインぽく実装する

Bottom Navigationはサポートライブラリが提供されています。 しかし、単純に使うだけではガイドラインぽくなりません。 ガイドラインぽく実装してみました。 ガイドラインぽさ Navigation Barを含んでBottom Navigationにする 下にスクロールすると隠れる …

Link Stackをメジャーアップデートしました

リンクをちょっとだけ後で読むアプリ、Link Stackをメジャーアップデートしました。 play.google.com このアプリを作った経緯はこちらです。 sakebook.hatenablog.com メジャーアップデートの機能紹介と、なぜその機能を付けたかについて書きます。 2つの新…

ニッチなアプリ「Screen Scanner」を作った

スマホに表示されているバーコードを読み取るアプリを作りました。画像を渡して読み取ることもできます。カメラで読み取る機能は現状つけていません。 play.google.com 動機(1年半前) 今から1年半ほど前の話です。 スマホのサイト上に表示されたQRコードを読…

GenymotionにGooglePlayを入れるのが簡単になってた

以前もGenymotionでGooglePlayを動かせるようにする記事を書いたのですが、それよりも簡単な方法が、公式のQAで紹介されていました。 sakebook.hatenablog.com 次のサイトから、zipファイルを落として起動しているGenymotionのEmulatorに入れるだけです。フ…

Shinjuku.aar第1回に参加した

Shinjuku.aarとは Shinjuku.aarは、新宿界隈のAndroid技術者たちが 技術ネタで気軽にワイガヤできる コミュニティです。 発表ごとにディスカッションタイムを設けており、発表中の質問やツッコミも随時ウェルカム! さらに、ディスカッションが盛り上がるよ…

MashwmallowでqueryIntentActivitiesの挙動が変わってた

Chrome Custom Tabsを使っていて、公式のサンプルにあるCustomTabsHelperを流用していたのですが、Mashwmallowでうまく動かないことがありました。 CustomTabsHelper内で、PackageManager#queryIntentActivitiesを使っているのですが、その挙動がMashwmallow…

スプラッシュにはActivityはいらない

スプラッシュ iOSだとLaunchScreenとか言われる、起動時に出てくる画面です。 Androidだと、ユーザに無駄な待ち時間を与えるということで不要だと言われてたのですが、最近はGoogle製のアプリが、軒並みスプラッシュを入れてきています。 Bottom Navigation…

GenymotionにGooglePlayを入れようとするとAn error occured while deploying the fileが発生する

Genymotionについては以前触れたのでこちらで。 sakebook.hatenablog.com An error occured while deploying the file. GooglePlayを入れるための準備をしていると次のエラーが発生しました。 Genymotionのバージョンは2.6.0でした。 エミュレータを作り直し…

Androidエンジニアが企画展に作品を出した話

2016/4/30~2016/5/15、2週間と1日、「CreativeAdventure」という、企画展がARTnSHELTERで開催されました。 そこで「Indoor Street」という作品を展示しました。企画展に作品を出すという経験での学びや感想をつらつらと書きます。 きっかけ 大学時代にU-moa…

AndroidでKuromojiを使う

Kuromoji KuromojiはJavaで書かれているオープンソースの日本語形態素解析エンジンです。 Androidでオフラインでも即座に形態素解析ができるように組み込んでみました。 LuceneのJapaneseTokenizerではなく、AtilikaのKuromojiを組み込みました。 はじめに言…

忘れてしまったAndroidの署名情報は見つかるかもしれない

Androidのアプリの署名に使う情報を忘れてしまうことが、稀にあります。 やってはいけないことですが、稀にあります。 別PCで作業してていつもMaster Passwordに任せっきりだったりとか、久しぶりに更新をかけようとしたアプリで起きたりします。 同じ署名の…

jsoupのデフォルトのUser-Agentはなんなのか。

jsoup JavaでHTMLをいい感じにParseできる便利なライブラリです。 WebページにアクセスしてHTMLを取得し、それを加工することでWebページ内のコンテンツを簡単に取得することができます。 スクレイピング先が、User-Agent(UA)によって表示を変えている場合、…

Instagramのユーザページと詳細ページへ暗黙的Intentで遷移する。

普段アプリで表示しているであろうページに、ブラウザで表示する場合があります。 ブラウザアプリを作っていて、何もしないままだとWebページが表示してしまうので、普段表示している方であるアプリへ遷移させます。 Instagram ユーザページと詳細ページを表…

続・Androidアプリ開発を学生に教えた話

再び 以前と同じく、TrunkでAndroid開発のトレーニングを請け負いました。 sakebook.hatenablog.com 今回は、1ヶ月でカメラアプリを作成してストアへ申請するというものでした。 1ヶ月と言っても、1回3時間の講義を4回行うという形式です。 前回の反省を踏ま…

都道府県の情報を簡単に扱うためのライブラリをKotlinで作った。

都道府県コードと都道府県名を変換するようなことをJavaで書いたのが非常に辛かった。 もう同じことをしないでいいように、使いまわせる形にした。 Javaでリスト操作ができなかったのでKotlinでさっと操作したいと思ったのがモチベーションです。 実際Kotlin…

Android Support Library 23.2で追加されたChrome Custom TabsのBottom barを試してみた。

Chrome Custom Tabs Webページを自分のアプリ内ブラウザで開くかのごとく、Chromeを使って開くことができる機能です。 利用するにはChromeのバージョンが45以上であることが必要です。 Chrome Custom Tabs自体は23.1.0から提供されていた機能ですが、新たにB…

potatotips第26回に参加した

potatotipsとは potatotipsはiOS/Android開発のTipsを出し合う勉強会です。 参加者はTips持参必須です! なお、ポテトチップスは必要に応じて各自で持参しなければなりません。 今回は株式会社Supershipで行われました。オフィスに行ってみたかったので、久…

Realmのマイグレーションで Configurations cannot be different if used to open the same file. が発生する

スキーマに変更があったので、マイグレーションを行ったら上記のエラーが発生した。 先に言っておくとマイグレーション自体は本質的な問題ではなかった。Realmのインスタンスの生成方法に問題があった。 Realmのバージョンは 0.87.4を使用。 マイグレーショ…

Parallaxでリッチなチュートリアルを作成する

時々見かける、手が込んでる感じがするチュートリアルを作成するためのチュートリアルです。 6つのパターンを紹介します。GitHubに上がっているコードを元に説明します。 github.com 背景をグラデーションさせる インジケーターを表示する インジケーターを…

動きに合わせて色をグラデーションさせる

2色間の色の変化を、時間指定ではなく値の変化で動的に行います。 ArgbEvaluator アニメーションで使いますが、単独でも利用できます。 どこかでインスタンスを生成します。 private ArgbEvaluator mArgbEvaluator = new ArgbEvaluator(); 次のメソッドを呼…

暗黙的Intentを絞り込んで明示的Intentのように連携する

よく使われている便利なアプリと連携がしたいときがあります。 LINEやTwitterなどのように、スキーマが定義されているものならば、特定できるのですが、そうではないアプリだと、暗黙的Intentを発行し、大量のアプリが候補で表示されます。 したい処理自体は…

ビルド時にいろんな値を生成する

ビルドに応じて値を動的に制御したい欲はあると思います。いくつか方法をまとめました。 BuildConfigに追加する build.gradleに定義することで、自動生成されるBuildConfig.javaに値を定義できます。 build.gradleに、直接値を書くのではなくて、gradle.prop…

RecyclerViewで区切り線を引いてアニメーションさせる

RecyclerViewで区切り線 ListViewでデフォルトで表示されるあれです。 RecyclerViewだと、デフォルトでは表示されないので、表示されるように実装が必要です。RecyclerViewのバージョンは23.1.0です。 RecyclerViewで行間に区切り線を表示するにあるようにす…

Link Bubbleの代わりに使うアプリ「Link Stack」を作った

Link Bubbleを使っていて Link Bubbleというアプリがあるのですが、便利です。 TwitterなどのTLを一覧してる時に、いくつも開きたいLinkがあるときに、いちいちブラウザを開いては閉じて開いて、とするところを、開きたいLinkをフローティングアイコンに貯め…

Androidアプリ開発を学生に教えた話

縁あって、学生に様々なスキルを教えるサービスで、Android開発の講義を開きました。その際流れと知見、及び思ったことをまとめます。 経緯 前職の同期が、起業して件のサービス(Trunk)を始めた。エンジニアとしてのスキルなども知っていたため、Androidアプ…

potatotips第13回に参加した

potatotipsとは potatotipsはiOS/Android開発のTipsを出し合う勉強会です。 参加者はTips持参必須です! なお、ポテトチップスは必要に応じて各自で持参しなければなりません。 iOSのtipsはこちらでまとめられているので、Androidのまとめを書きます。 全然…

GradleビルドでPropertyを渡してBuildConfigに追加する

いくつかGradleスクリプトからビルド対象を変更する方法があります。 productFlavorsでソース切り分け Flavor別に、ソースファイルごとに分けられる機能です。 OEMや、有料版などでソースを一部分載せ替えたりするときなどに有効です。 buildConfigFieldで値…

Go mobileでサンプルアプリを動かした

go1.4 Androidに対応したのが1.4からなので、そうでない場合は最新版にします。 homebrewで入れたので、以下のコマンドを入力します。 $ brew upgrade go $ go version go version go1.4 darwin/amd64 合わせてGOPATHも確認します。 GOPATHの説明はこの記事…

誰得アプリ「さよならを言おう」を作った

アプリのインストールの検知をすることが何回かあったのですが、 ふとアンインストールの検知もできないのかなと試したところ、 できたので、そのアプリがアンインストールされた時に断末魔を残すアプリを作りました。 さよならを言おう アンインストールの…

アプリのインストール・更新・アンインストールの検知

Broadcast アプリの情報の変化に関するものは、BroadcastがOSから投げられるので、それを受け取るように作れば、検知できます。 引っかかったところ アンインストール時には、android.intent.action.PACKAGE_REMOVED が、投げられるので、それで良いと思って…

第5回 開発コンテスト24に応募した(入賞せず)。

開発コンテストとは クックパッド株式会社が毎年開催している あなたの考える「生活をより便利にするサービス」を24時間以内に開発をするものづくりコンテスト です。テーマが設けられており、今年は 「誰かと話すキッカケを作るサービス」 でした。 当日飲…

エミュレータのAndroid LでGoogleIOアプリを動かす

GoogleIOアプリ GoogleIOのために作られたアプリです。ソースはこちらからクローンします。 Lに対応しているアプリは現状マーケットには存在しない、かつGoogle謹製ということで、マテリアルデザインを理解するための良いサンプルです。 ちょっと動かすまで…

Logcatがおかしくなった!を一発で解決する

Android開発で良くある場面 さっきまで出力されてたLogがでない! あれ?おかしいなぁ。ここは通ってないのか。こっちにもLogを仕込んでみよう。 あれ?それでもでない。この分岐でどちらにもLogを仕込もう。 これで必ず出るよね。 でない! いやいやおかし…

ReachabilityをAndroidで実現するライブラリを作った

Reachabilityとは? iPhone 6 & 6 PLUSで導入される仕組みです。デモ動画を見たときに便利だなーと思うと同時に、Androidでも似たようなことができるんじゃないかと思いました。 Reachability on Android 作りました。Reachability Activityに、以下のように…

GradleスクリプトからShellを実行

ビルド終了時に通知を飛ばしたい。 apkをビルドして、deploygateに挙げ終わったら、Slackなどに自動で通知をしたいと思いました。 Slackにテスト投稿がかさむので、PushBulletで試しに検証しました。 execute //build.gradle // 指定したデバイスに通知が送…

Androidを持っていないデザイナーはGenymotionをいれてDeployGateと連携させよう

実機が一番良いけれど 実機で手元で確認できる環境があるならそれが一番良いけれど、なぜかデザイナーはiPhoneユーザが多いです(体感)。 そのため、Android端末でのWEBの挙動やアプリのUIについて検討する際に、 端末が無かったり、実際に確認したいバージョ…

Android Studioでライブラリを取り込む3つの方法

以下の3種類があります。 A. libs配下にjarを配置 B. ライブラリのprojectフォルダを読み込む C. 外部のリポジトリからローカルに取り込む それぞれの具体的な手順と、長所と短所を上げていきます。 A. libs配下にjarを配置 広告のSDKなどを組み込む際によく…

gradle.propertiesはリポジトリに含めるべきか

gradleのタスクのプロパティ値を定義できる gradle.propertiesで定義した値は、build.gradle内で使うことが出来ます。 なので、署名時に必要な情報をgradle.propertiesで定義してファイル自体はリポジトリに含めない方法を取っていました。 しかし、さまざま…

Robolectricを使ったライブラリプロジェクトのビルドでテストが失敗する

ライブラリプロジェクトの時だけ失敗する。 プロジェクトルートと、モジュールルートのbuild.gradleは次のようになっています。 build.gradle buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:0.12.+' …