リア充爆発日記

You don't even know what ria-ju really is.

Android

Androidアプリ開発の手引 2014年 君がいた夏ver.

最後にAndroidアプリをいじっていたのはもう2年近く前のことだ。2年も経てばスタンダードも大きく変わっているだろうと再度初心に返り、イチからプロジェクトを作ってみたいと思うこの夏。 開発マシン OSX10.9.4 参考 http://developer.android.com/index.ht…

TitaniumのAndroidでGoogle Mapv2を使った時、なぜか2回目以降のアクセスから真っ黒になってしまったときのメモ

検索用。https://developer.appcelerator.com/question/156521/timap---map-shows-only-after-clear-data-otherwise-is-emptyblackAndroidManifest.xmlのtargetSdkVersionが14以上だとそうなるらしい。。。もうわけわからないよ。こんなわけわからん設定でOK…

TitaniumでAndroidアプリを配信する手順メモ

Google playを経由してテスト用や本番用のアプリを配信する手続き。これの和訳。 http://docs.appcelerator.com/titanium/3.0/#!/guide/Distributing_Android_apps 手順 Google playへの登録 キーペアと証明書の生成 キーストアの確認 アプリが正しいキーで…

Androidのタブレットとスマートフォンを判別する

スマホにはUAに”Mobile”って入ってるんだって。Android2.xはその限りではないそうだけど。http://googlewebmastercentral-ja.blogspot.jp/2012/11/giving-tablet-users-full-sized-web.html知らんかった。。。

Android開発でどうしたらいいかわからない未解決リスト

時間が解決してくれる問題もあるかもしれないので、備忘録的にメモしておく。 深刻度大 Google Maps v2を使っているActivityのテストがRobolectricで書けない。 GoogleMapオブジェクトがfinalで、それをモックする方法が見つかってない。 mockito1.9.5とpowe…

getBestProvider()の動きメモ

以下のコードの結果をデバイスのGPSの設定ごとに表示。デバイスは実機でIS05。 GPSの設定は2種類 無線ネットワークを使用 GPS機能を使用 なので、設定のパターンは4種類 実行コード LocationManager manager = (LocationManager) getSystemService(Context…

デバッグ時のSigningの話

Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES] こんなメッセージが出たらSign絡みをうたがったほうがいい。 Androidアプリにはかならずサインというのをする。鍵を作ってapkにサインする的な感じ。「してねーよ?」って人はIDEとかが勝手にやっ…

さくらのVPS+Jenkins+github+Android

さくらのVPS+Jenkins+github+rails3の続編。ゴールは、githubにpushすると、さくらのVPSで動いているJenkinsがgithubから最新ソースひっぱってRobolectricのテストかけた上に、apkを作るところまで。 プロジェクトの作成 mavenプロジェクトにしてみた。 ユー…

Android開発するときにテスト絡みで調べたことまとめ

追記系。 デフォのテストは重くてきつすぎるっす Androidのテストツールならこれ!Robolectric導入の儀。 これ以降、ほとんどRobolectricを使う前提の話 画面の遷移 RobolectricでActivityの遷移を確認する方法 フラグなんかも以下のような感じでテストでき…

java.io.IOException: No authentication challenges found

ヨシズミくん。このエラーの原因タウンページで調べてくれたまえ。で、調べたところ、これはサーバから401 Unauthorizedが帰ってきたときにヘッダが正しくないと起こるらしい。なんだよ、せっかくカッコつけて401返したのに。正しい状態のヘッダとは WWW-Aut…

Viewのレイアウト調整でよく使う事項メモ

随時追加系メモ 位置調整系 テキストを真ん中に寄せる layout_gravity="center" その他center系を適宜使う 等間隔にViewを置く。 layout_weightを使う widthかheightの指定(水平方向の場合はlayout_width)は意味がなくなるので0dpにしたほうがパフォーマンス…

美しくログアウトする方法

えーと、何が言いたいのかというと、ログアウトしたあとは、だいたいトップ画面とかログイン画面とかに遷移させると思うんです。 で、そのときに戻るボタン押した時にログアウトボタンがある画面に戻っちゃうとかっちょ悪いよね、という話。Activityの流れと…

SharedPreferencesを消す方法

個別の項目なら SharedPreferences.Editor.remove(String) 実際は・・・ context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE).edit().clear().commit(); 全部なら SharedPreferences.Editor.clear() 実際は・・・ context.getSharedPrefer…

リスト表示に使うListViewについて調べたメモ

動的なリスト表示を実現するにあたって調べたメモ。参考はここ。 http://developer.android.com/guide/topics/ui/declaring-layout.html#AdapterViewsざっくりな僕の理解では ・・・ AdapterViewというそれようのViewがあって、その子クラスにListViewとかGr…

どのContextを使えばいいの?

ここの要約的な話。 http://stackoverflow.com/questions/1026973/android-whats-the-difference-between-the-various-methods-to-get-a-contextActivity内でContextを引数に求められるメソッドを使うとき、以下の3つの選択肢がある。 this(=Activity) getA…

ユーザー情報などのデータの永続化の方法について調べたメモ

例えばSNSやゲームにおけるユーザー名とかの基本情報など、頻繁に利用する情報はどこかに出し入れしやすい場所に保存して置きたい。 そんな感じのAndroidにおけるデータの永続化について、セキュリティ面等も含め、カンタンに調査検討したメモ。情報元はここ…

EditTextを拡張してメールアドレス用にしてみる

public class EmailEditText extends EditText implements TextWatcher { private static final String TAG = EmailEditText.class.getSimpleName(); public boolean isValid = false; public EmailEditText(Context context) { super(context); initView();…

Androidのエミュレータのhostsを編集する

RESTful APIとWebサイトを1つのアプリケーションで作るでクライアントからはapiサブドメインにアクセスさせよう!と決めて、rspecでroutingのテストでその縛りを入れてしまったので、エミュレータからのアクセスはサブドメインapiが入ったhost指定にしない…

Fragmentの中にFragment

できるようになったのはつい最近だったんですな。 http://developer.android.com/about/versions/android-4.2.html#NestedFragments support libraryのリビジョンを11にする getChildFragmentManager()を使う ネストしたFragmentはlayout内でで配置したもの…

Httpで画像をとってきてImageViewにセットする

Weak Referencesから学ぶJavaにおけるオブジェクトの4種類の参照でWeak Referenceを学んだ後、http://android-developers.blogspot.jp/2010/07/multithreading-for-performance.htmlを真似ながら、HTTPで画像をとってきてImageViewにセットするクラスを書い…

HttpURLConnectionでmultipart/form-dataをPOSTする

たいがいのアプリで必要であろうHTTP通信。シンプルなRESTだけあればいいのに、既存のライブラリはどれもデカく、アプリサイズが大きくなるのが嫌だったので自前実装を試みた。 GB以降だったらHttpURLConnectionがいいってどこかのエライ人が言っていたのでH…

JSONArrayでStub!

どういうわけかRobolectricにないっぽい。Android実装があるだけで中身はピュアJavaのはずなので、手作りShadowでもいいと思うんだけど、めんどくさいのでポムった。 <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20090211</version> <scope>test</scope> </dependency> <dependency> <groupId>com.pivotallabs</groupId> <artifactId>robolectric</artifactid></dependency>

mockito1.9.5とpowermock1.5は同時に使えない件について

追記)なんかいろいろわかってないところがあるので、このエントリの内容はペンディング。 powermockなんていらないやい!と思ってたけど、finalなGoogleMapクラスをモックにしないとどうにもテストがままならない事案が発生しまして。で、powermockを以下の…

Android Google Maps v1でやってたことをv2でやる方法

随時追記型メモ。 MapViewの配置 private GoogleMap mMap; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.my_map)).getMap(); …

AndroidでGoogle Maps v2 をエミュレータで動かしてしかも爆速

Google Play ServicesとGoogle Maps Android API v2について調べて見たメモでちょろっと触れたけど、Google Maps v2はGoogle Play services経由で動かすという特性上、エミュレータでは基本的に現状は使えない。が、基本があれば例外もある、ということで動…

RobolectricでActivityの遷移を確認する方法

ActivityAからActivityBに遷移(?)できていることを確認するテストを書きたかったのでやり方を調べてみるとStartedMatcherってのを使うっぽかった。 http://pivotal.github.com/robolectric/javadoc/com/xtremelabs/robolectric/matchers/StartedMatcher.htm…

ActionBarSherlockのTabにFragmentでGoogle Map APIv2を突っ込む

こちらを参考に。 http://stackoverflow.com/questions/13721929/using-actionbarsherlock-with-the-new-supportmapfragment/13727539#13727539MapFragment(SupportMapFragment)を使おうとすると無理ゲーだし、そうしないといけないこともないんで、Sherlock…

Google Play ServicesとGoogle Maps Android API v2について調べて見たメモ

僕の理解の限りでは、これまではMapViewはActivityでしかつかえず、Fragmentとして使うことができなかった。作ればわかる! Androidプログラミング 第2版 -SDK4対応- (Smart Mobile Developer)作者: 金宏和實出版社/メーカー: 翔泳社発売日: 2013/04/23メディ…

Guiceを使う時の読み物まとめ

(Robo)Guiceを使うにあたってDI含め、理解に役に立ったサイトなど。 はじめてのDependency Injection Guiceチュートリアル Deep dive into RoboGuice beyond "Hello World apps" RoboGuiceもGuiceも読んでいるサイトがどのバージョンについて説明してるか注…

Androidエミュレータ起動時になんだかすごいエラーが出てどうにもならなくなったとき

今まではなんともなかったのにこんなエラーが・・・。 Crashed Thread: 0 Dispatch queue: com.apple.main-thread Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000000 VM Regions Near 0: --> __TEXT 0…

Environmentによるディレクトリパスのメモ

実行コード System.out.println(Environment.getExternalStorageDirectory()); System.out.println(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)); System.out.println(Environment.getDataDirectory()); System.out.pri…

俺的Androidアプリ開発環境ニコニコセット 2012

独断と偏見による俺的Android開発を加速する開発環境やフレームワークなどのツールをまとめる。順番に意味は無い。 無いと死ねる編 Robolectric ないとテスト書けない mockwebserver ないとテスト書けない Android公式 そりゃそうでしょ。初めて触るAPIとか…

Robolectric + ormliteでUnitテスト

や。何もしなくてもよかった。。どうやってやるのが常道なのかなぁ、とか2時間近く調べて、ShadowSQLiteOpenHelperが絡んでくるんだろうな、というところあたりまではわかったけど、具体的にどうするのかわからなかった。が、前述のとおり、結局何もしなくて…

RobolectricでBase64

AndroidではAPI Level8(Android2.2)からBase64が組み込まれているんだけど、RobolectricにはまだShadowがないっぽい。・・・と思ったらgithubのmasterには1ヶ月ほど前に取り込まれてたよう。 https://github.com/pivotal/robolectric/pull/326だけどMavenで…

RobolectricでActionBarSherlockのテストをしようとしてNo implementations match configuration

java.lang.IllegalStateException: No implementations match configuration.もうそろそろ普通に開発させてくれんかね。。で、タウンページをめくってみるとABS本家のgithubが筆頭に。 https://github.com/JakeWharton/ActionBarSherlock/issues/377 When Ac…

Androidのテストツールならこれ!Robolectric導入の儀。

かつてはAndroid依存のモジュールのテストはド遅いからPOJOとうまく分離してなるべくPOJOを通常のUnitテストで・・・とか思っていた時期があったんだけど、この分離ってやつが相当キツくて。ンカスプログラマだから。つまりテスト書いてなかったんだけど、そ…

外部ライブラリプロジェクトを使ったプロジェクトをIntelliJとMavenで両立させる

りーむー。それはりーむー。2日使った結論。ここでいう”両立"というのは、どっちからでもビルドアンドデプロイができる状態を成立させて維持するという意味で。"apklib dependencyはコマンドラインからじゃないと機能しない" http://stackoverflow.com/quest…

IntelliJだとmavenでActionBarSherlockの依存関係を解決できないっぽい。

pom.xml ~snip~ <modules> <module>../ActionBarSherlock-4.2.0/library</module> </modules> ~snip~ <dependency> <groupId>com.actionbarsherlock</groupId> <artifactId>library</artifactId> <version>4.2.0</version> <type>apklib</type> </dependency> ~snip~ で、コマンドラインからのビルドは通るけど、IntelliJでコンパイルエラーがでる。で、こんなのを見つけ…

Android Maven Pluginを入れてMavenでAndroidをビルド

Maven化を進めてきたけど、ビルドしたりapkファイル作ったりはIntelliJ頼りな状態。 一人プロジェクトとかだとそこまで必要性はないかもしれないけどCIツールは導入するつもりだから、もうここでやっちゃえ、ということでMavenでビルドできるようにしておく…

セントラルリポジトリにないAndroidライブラリはMaven Android SDK Deployerでインストール

前回のエントリの最後にgcmがセントラルリポジトリにないから個別にDLしてローカルリポジトリに突っ込んだ件がありましたが、gcmやmapsなどセントラルリポジトリにないライブラリをローカルリポジトリに突っ込んでくれるツールがあった。。。ほんとなんでも…

IntelliJのandroidプロジェクトを途中からmaven管理しようとした時のメモ

Java界でサードパーティのライブラリを使おうとするたびに「Maven導入しておくとベンリなのかな?」と思わされるんだけど、これまでは目先の時間の無さを理由に振り切ってきた。なんか情報少ないし。めんどくさそうだし。が、ここらで導入してみることにした…

インテント間でオブジェクトを渡す方法

putExtra()にはプリミティブやString等のI/FはあるけどObjectのI/Fがない。で、今回ぼくはどうしてもLocation型のオブジェクトが渡したくなったので、どうにか渡せないか調べてみると、ざっくり シリアライズする Parcelを使う の2通りの方法が出てきた。シ…

爆速AndroidエミュレータがついにMacOSX10.8.2でも使えるようになった!!

Androidの爆速エミュレータ環境を構築しようとして挫けたマカーたちへ朗報 超絶待った。ついにFIX版がでました! http://software.intel.com/en-us/articles/intel-hardware-accelerated-execution-manager?page=4ここでhotfix版をDLしてインスコするだけで…

MapViewをタップしたらヌルポ。ヒント:(ItemizedOverlay.java:617)

ログはこんな感じ。 java.lang.NullPointerException at com.google.android.maps.ItemizedOverlay.getItemsAtLocation(ItemizedOverlay.java:617) at com.google.android.maps.ItemizedOverlay.getItemAtLocation(ItemizedOverlay.java:586) at com.google.…

EditTextでandroid:focusableInTouchMode="false"にしたらsetErrorがうまく動かなくなったときの対応法。

これはsetErrorで表示されるバルーン的なものがフォーカス時にのみ表示されるという仕様だから。次にフォーカスについてここで勉強する。超良記事。 たかがフォーカス,されどフォーカス View#requestFocusFromTouchメソッドを使うと、 タッチモード時でもfo…

layoutにborderを入れる

主にデバッグ用なんですけど。Viewのオプションではできないっぽい。ので、drawbleな枠を定義して、backgroundにそれを指定する。drawable/debug_border.xml <shape xmlns:android="http://schemas.android.com/apk/res/android"> <stroke android:width="1dp" android:color="#ff0000" /> </stroke></shape>

DialogのEditorのFragment用、名付けてDialogEditor For Fragment

前回の続き。http://d.hatena.ne.jp/ria10/20121120/1353383249これがFragmentでは使えなかったのでFragmentで使えるようにがんばってみた。。

DialogのEditor、名付けてDialogEditor

EditTextをそのまま使うと、入力時にソフトウェアキーボードでエディタエリアが隠れたり、入力文字数のカウント表示をしようと思っても場所がなかったりといろいろ困ることが多い。で、そういう場合はダイアログ形式にして対応している人が多かったのでぼく…

Androidでログにスタックトレースを出力する一番簡単な方法

Logcatにstacktraceをダラダラ〜っと出したいときの話。3つ目の引数にExceptionを渡すだけでOKですぞ。 例) } catch (Exception e) { Log.e(TAG, e.getMessage(), e); }

Fragment内のViewのwidthがなぜか0のときの対応方法

ViewTreeObserverを使ってOnGlobalLayoutListenerで引っ掛ける。 @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); ViewTreeObserver observer = mImageView.getViewTreeObserver(); ob…