日々精進

新しく学んだことを書き留めていきます

android

SerializableとParcelableの使い分け基準

それぞれの特徴は以下。 Serializable Serializeロジックを自分で実装しなくて良いので楽。Serializeしたくないフィールドにはtransientを付ける。 Parcelable アプリ間でデータをやりとりすることができる ロジックを自分で書かないといけないので面倒。joh…

Robolectricのテストを実行すると「ERROR: transport error 202: connect failed: Connection refused」エラー

Debugではこのエラーが出るが、Runだと出ない サーバに接続できないとこのようなエラーが出るという報告が以下の記事であるが、サーバには接続できている Can't debugging JUnit + Roboloctric test in Android Studino with gradle gradlew buildを実行して…

HOME画面のアプリアイコンをタップして起動すると必ず起動画面に戻ってしまう現象

説明しづらいけど、現象は以下。 HOME画面のアイコンをタップしてアプリを起動する アプリ使用中にHOMEボタンをタップしてアプリをバックグラウンドに送る HOME画面のアイコンをタップして再度アプリをフォアグラウンドにする 起動画面が表示されてしまう(…

Androidでビルドすると「error: No resource identifier found for attribute 'maxValue' in package」エラー

原因はビルドの中間成果物が残っていたことだった。 ./gradlew cleanを実行したら直った。

AndroidAnnotationsとIcepickは一緒に使えない

理由は以下。 Icepickはビルド時にクラス名にsuffixを付ける。(classファイルの中を調べるとクラス名が変わっている) AndroidAnnotationsはサブクラスを生成する。そのクラスにはsuffixが付いていない。 IcepickはSuffixが付いているクラスのみRestore/Sav…

Dialogを下寄せで画面幅いっぱいに表示する

Dialogを表示すると通常は上下左右とも真ん中寄せになるが、下寄せで幅は画面いっぱいにしたい場合は以下のコードをDialogFragmentのサブクラスに実装すればよい。 @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityC…

potatotips#15発表資料(GradleTips)

potatotipsで発表してきます。 【第15回】potatotips(iOS/Android開発Tips共有会) (2015/03/12 19:00〜) 発表資料は以下。 http://hosokawa0825.github.io/slides/GradleTips/#/

adb, gradleコマンドを補完する

補完ライブラリの解説は以下参照。 Android開発を爆速にする10のコマンドラインスクリプト - クックパッド開発者ブログ adbの補完ライブラリはbash用のようだったが、↓によるとbash補完ライブラリはzshでも使えるらしい。 I have a bash-tab-completion scri…

APKの署名の設定をlocal.propertiesに書いてビルドする

下記サイトに書いてある通りにやるとできた。 http://wada811.blogspot.com/2014/10/avoid-exposing-signing-config-using-gradle-properties.html できたAPKがちゃんと署名されているかどうかはkeytoolとjarsignerを使うと調べることが出来る。 調べ方は以…

ライブラリのコードを変更し、動作確認するのを楽にする

gradleでライブラリをインストールした場合、ライブラリはコンパイル済みなのでコードを変更してアプリと一緒に動かしてみるということが気軽に出来ない。 ライブラリをアプリのプロジェクトからプロジェクト参照すればライブラリの修正・動作確認が非常に楽…

コードからViewインスタンスを生成する時にStyleを設定する

以下のコンストラクタの第三引数にスタイルを渡せばOK。 View(Context context, AttributeSet attrs, int defStyle) インスタンスを生成した後で変更することはできないっぽい。 参考: http://fujiiyuuki.blogspot.jp/2012/02/android-viewstyle.html

Android StudioのADB pluginが便利

ADB Ideaというpluginをインストールすると、いくつかのadbコマンドをAndroid Studioからワンアクションで実行できるようになり大変便利。 https://plugins.jetbrains.com/plugin/7380?pr=idea 使うのはほぼADB Uninstall Appだけだけど。。ADB Killを実行す…

アプリアイコンにGitのブランチ名、コミットハッシュ値などを表示する

以下のgradle pluginを使う。 splatte/gradle-android-appiconoverlay インストール手順は上記ページのUsageを参考にすればいいが、いくつか注意点が。 なお、確認した環境は以下。 OS X 10.9.5 gradle 2.2.1 以下注意点。 ImageMagickの他にGhostScriptもイ…

gradleでshell commandを実行する

gradleというかgroovyの機能。以下のようにしてshell commandを実行し、その結果を取得できる。 def proc = 'echo "test"'.execute() proc.waitFor() proc.in.text // 標準出力に出力された文字列を取得する 参考: Groovy - Executing External Processes F…

Dev, Staging等の各環境毎に異なるデータはbuildConfigFieldで指定する

下記記事でpro, freeなどのバージョン毎にリソースをまとめて定義する方法を書いたが、サーバのURLなどDev, Staging等の各環境毎に異なる値にしたいこともある。 2015-02-18 - 日々精進 そういう場合は、buildConfigFieldで指定し、BuildConfigクラスから取…

複数のProductFlavorでリソースを共有する

同じコードベースからpro版, free版を作成する場合などは以下のように6つProductFlavorを作ることが多い。 proDev, proStaging, proProduction, freeDev, freeStaging, freeProduction しかし、Dev,Stagingなどの環境毎にリソースを分けたくない。(文言など…

build variantの一部をビルド対象としない

product flavorを開発環境・テスト環境・本番環境などで分けることはよくあると思うが、 その場合開発環境・テスト環境版はreleaseビルドさせたくないだろう。 そういう場合にbuild variantの一部をビルド対象としないようにするにはvariantFilterを使う。 a…

androidannotationsを使っているプロジェクトでproductFlavorsを追加するとビルドエラーになる

環境: apt plugin: 'com.neenbedankt.gradle.plugins:android-apt:1.4' gradle version:2.2.1 androidannotationsを使っているプロジェクトでproductFlavorsを追加すると':app:proDebugTestCompile' taskが失敗した旨のエラーメッセージが出た。 resourcePa…

mergeタグを使うとdesign viewでviewが崩れる問題

今のところ、design viewを表示するときはmergeタグをLinearLayoutなどに変更するしかなさそう。 ググって解決策がいくつか書いてあるサイトを見つけたが、どれもイマイチだった。 http://gotoanswer.stanford.edu/?q=Preview+layout+with+merge+root+tag+in…

TabHostの高さを設定する

以下のように設定する。 for (int i = 0; i < host.getTabWidget().getTabCount(); i++) { host.getTabWidget().getChildAt(i).getLayoutParams().height = getResources().getDimensionPixelSize(R.dimen.tab_bar_height); } 参考: How to resize the heig…

ビルドが成功しているのにsupport libraryに入っているクラス・メソッドが赤文字になっている現象

Android Studio1.1.0を使っているが、ちょくちょくビルドが成功しているのにsupport libraryに入っているクラス・メソッドが赤文字になっている現象が発生する。 そんな時は以下で直る。 赤字になっているところでAlt+Enterを押すとsupport libraryへのclass…

「最新事例から学ぶ!モバイル向けテスト手法勉強会」で発表してきます

以下の勉強会で発表してきます。 【iOS/Android】最新事例から学ぶ!モバイル向けテスト手法勉強会 (2015/02/28 14:30〜) 発表資料: http://hosokawa0825.github.io/slides/RobolectricPitfalls/#/

Androidのmatryoshka problem(Fragmentが入れ子になると起こる不具合)

matryoshka problemについて詳しく書いているサイトがあったのでメモ。 Android's matryoshka problem だいぶやばいバグだな。。最近FragmentManagerとFragmentTransactionに悩まされてるしFragmentつらい。

テスト用FixtureをYAMLで書くか、JSONで書くか

テストデータをテストコードに直書きするのがつらい場合があるので、 なんらかのフォーマットで別ファイルに切り出すことにした。 YAMLにするかJSONにするかで迷ったが、JSONにした。主な理由は以下。 サーバとのやりとりにJSONを使っているので統一したかっ…

ActivityNotFoundException No Activity found to handle Intentエラー

原因はIntentで指定したaction/URI Schemeを解釈するアプリが無いため。 エミュレータで動かしていたのでGooglePlayアプリが入っていないことが直接の原因だった。 実機で動かしたら正しく動いた。 参考: No Activity found to handle Intent : android.int…

Androidの実機をPCに繋いだが認識されない

具体的にはRunした時に出てくるChoose Deviceウィンドウに繋いだ実機が表示されなくて困った。 直し方は以下。 ターミナルからadb devicesを実行する。デバイスが出てこなかったらadbが認識できてない。 USBコネクタを一旦抜いてまた挿してみる。ダメなら次…

基本的に実行時例外を使うようにするという方針

Javaは例外を無視できないよう、メソッド定義のthrows句でthrowする例外を指定する。 メソッドをの呼び出し側もこれを意識してcatchするなりthrows句に例外を指定するなりしないといけない。 これによって静的なチェックが可能になり、アプリが堅牢になる、…

オブジェクトがあるクラスのインスタンスであることを完全一致で判定する

obj instanceOf Klassだと、KlassのサブタイプでもOKだが厳密にKlassのインスタンスであることを判定したい場合は obj.getClass() == Klass.classとする。 参考: Javaのinstanceof演算子 - とあるソフトウェア開発者のブログ

TabHostのTabに表示される文字サイズを変更する

カスタムThemeを定義し、それをActivityのThemeにすればよい。 詳細は下記サイトの例参照。 How to change the font size of tabhost in android

ZipEntry#getSize()が-1を返す

sizeがunknownな場合に-1を返す仕様らしい。 zipファイルをmacで作ると-1を返すようになり、Windowsで作ると正しいサイズをとれるようになった。 うーん、なぜだ。 参考: Inconsistency between ZipEntry size for ZipInputStream and JarInputStream