Androidの最近のブログ記事

http://floralcompany.jp/archives/2012/12/maven-android-p.html と http://floralcompany.jp/archives/2012/12/mavengroovy.html の続き。

とりあえず、実際に使ってるテストの中からandroidのライブラリへの依存関係の少ないテストをgroovyに移植してみる。

とりあえず走らせてみたらば NullPointerException...

どうやら テストで使ってるandroid.text.TextUtils.SimpleStringSplitter のshadowクラスがrobolectricには用意されていないので、 Robolectric: How to create your own Shadow Classes を見ながら適当に以下のようなクラスを用意してみる

package shadows;

import android.text.TextUtils;
import com.xtremelabs.robolectric.internal.Implements;


@Implements(TextUtils.SimpleStringSplitter.class)
public class ShadowSimpleStringSplitter {
 // ...略
}

と、なんとコンパイルエラー。

... gmavenが作成したスタブファイルを見たところ、@Implements(TextUtils.SimpleStringSplitter.class) が、@com.xtremelabs.robolectric.internal.Implements(android.text.TextUtils$SimpleStringSplitter.class) と展開されていて、「android.text.TextUtils$SimpleStringSplitter」 というクラスが見つからないというものだった。

..そりゃぁみつかりませんわな。

特に解決方法も見つからないので、仕方なく TextUtils.SimpleStringSplitterのShadowクラスはjavaで書くことにしました。

後、テストコードでassetからテストデータを読み出してたのをリソースから読み出すように修正して無事rebolectricを使ったテストは動くようになりました。めでたしめでたし。

前回 の続き的なもの。

話の対象は Android SDK Tools, Revision 12 のemulatorコマンド です。

emulatorコマンドの公式ドキュメント によると、 -http-proxy オプション(または http_proxy環境変数) があると、全てのTCP接続(UDPは未対応)を指定されたproxy経由にしてくれるらしいです。

素晴らしい! と、言いたいところなのですが、 この -http-proxy オプションを使う方法には ちょっとした罠があったのでした。

emulatorのソースコードの proxy/proxy_http_connector.c の connection_init関数には以下の一文が入っています

stralloc_add_format(str, "CONNECT %s HTTP/" HTTP_VERSION "\r\n",
sock_address_to_string(&root->address) );

この文は proxy serverに発行する CONNECT メソッドのrequest を作ってるところですが、なんとこの時点で(proxyを越えた)接続先のIPアドレスが判明していなければなりません。(sock_address_to_string関数とか呼んでるしー)

CONNECTメソッドは別に ホスト名:ポート を指定してもいいはずですが、このコードはそれを許してません。DNSへの問い合わせ等で接続先のIPアドレスが判明しないとCONNECTメソッドの発行には至りません。(アプリ側で接続先をIPアドレスで指定するとちゃんとつなぎに行ってくれます)

即ち、 「LAN内限定のDNSサーバしかない」とか、「そもそもDNSサーバがない」環境においては、 -http-proxy オプションを使ってproxy外のサーバに対して サーバ名を指定して接続することは 不可能 なようです。

いやはやなんという残念仕様..

ActivityTestCase など、 InstrumentationTestCase を継承してるテストの場合は、

Context context = this.getInstrumentation().getContext();
context.getResources();
// hogehoge

で、テストパッケージ側のリソース(res/raw/assets) が使えるが、 ServiceTestCaseAndroidTestCase から継承しているテストの場合は同等のAPIは存在しない。

何とかならないものかとAndroidのソースを眺めてたら AndroidTestCase に Context getTestContext() なるhidden methodを見つけたので、とりあえず以下のようにしてテストパッケージ側のリソースを使うことができました。めでたしめでたし。

** 公開したバージョン 20110711.01 に一時ファイルを作成しっぱなしで削除しないという致命的なバグが発見されたため、注意文をMarketの方に記載しました。(この記事の続きにも載せてます) ご迷惑をお掛けしてすみません **
先ほど、本バグを修正した バージョン 20110711.02 を公開しました。 ご迷惑をおかけしました

Android Market のページ: https://market.android.com/details?id=jp.floralcompany.android.pixivviewer

一月以上かかってAndroidアプリ作成の勉強がてら うにょうにょ作ってたandroid用pixivクライアントアプリが 何とか公開できるレベルにはなったと判断しましたので、公開することにしました。

タイトルにはpixplorer って書いてありますが、日本語環境だと「ぴくすぷろーらー」になります。

これで(私の認識してる範囲では)Android Marketに、pixiv公式アプリ、PxViewer、Pixroid に続いて4つ目のpixiv閲覧アプリの登場です。以後、何卒よろしくお願いいたします。

何か問題等ありましたら、marketのコメントや twitter 等でご連絡くださいませ。
pixiv やこのblogのコメント欄でも多分大丈夫。

その内、もうちょっとちゃんとした紹介ページも作ろうとは思いますが、ちょっと分かりづらい機能だけご紹介。

  • 大きめの画像が見える画面で画像をタップすると周囲のボタン類が消えます。が、もう一回タップすると現れます
  • 同画面の左上の "x1.2" とかいう倍率表示をタップしたら 等倍(x1.0) で表示します。
  • キャッシュ設定を外部ストレージ(SDカード) に設定した上で 「原寸大」ボタンを長押しすると、原寸大画像のダウンロード後に他のビューアを起動します。(多分標準のギャラリーアプリか何かが立ち上がると思います。)
  • 同じくキャッシュ設定を外部ストレージ(SDカード) に設定した上で、マンガ表示のサムネイルを長押しすると以下同文

そんな感じです。 それではよろしうにー

対象:HTTP通信するAndroidアプリの動作確認したいけど社内のネットワークはproxyで遮断されてるYO な環境。

エミュレータを起動しておいて、

http.proxyHost=192.168.0.1
http.proxyPort=8080

みたいなファイル devenv.prop を用意して、adb push devenv.prop /data/devenv.prop でエミュレータ環境に突っ込んでおく。

アプリケーション側で /data/devenv.prop を読み込んでProxyの設定をする。(続きにコード例掲載)

何かもっといい方法がありそうなもんだけど(ブラウザはAPNに設定したproxy設定使ってるし...). とりあえずはこれでproxyは越えられる。

manifestに

<uses-permission android:name="android.permission.INTERNET" />

の設定を忘れずに。

AUTHOR

  • turugina (虎王 剱奈)
  • E-mail: turugina {at} floralcompany.jp
  • pixiv
  • ニジエ

2014年5月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

アーカイブ

OpenID対応しています OpenIDについて
Powered by Movable Type 5.2.10

- 警 告 -

本サイトにはいわゆる「18禁画像」(イラスト)へのリンクが存在します。 未成年の方や、その手の画像に不快感を覚える方は、 該当記事(「えちぃの」及び「ちょっとえちぃの」カテゴリ) をご覧にならないようお願いいたします。

上記を理解した上で非表示のブログパーツを表示する
あわせて読みたいブログパーツ
ついった
drawr/pixiv/twitpic