takaiwa.net

Android、Java、Web系、Linux、マラソン等の備忘録

2012/07/29

VirtualBoxでAndroid4.0をデバッグ自分用メモ

0 件のコメント
Android4.0(ICS)をeclipseのエミュレータを起動すると、僕の非力マシンではクソ重くてデバックどころじゃないです。VirtualBox上でAndroidを起動させると快適とのことで、以下のサイトを参考に作業を進めつつ別途躓いた点などをメモしておきます。
・VirtualBoxでICS的 - hidecheckの日記
http://d.hatena.ne.jp/hidecheck/20120210/1328870752
・非常に重い標準エミュを捨て、Android4.0 for x86でICSを快適体験(11/22追記) - td2skの日記(仮)
http://d.hatena.ne.jp/td2sk/20111118/1321625830
一応、Githubからソースを取得してビルドをやったのですが、VirtualBox用になっておらず、猛暑の中再度ビルドする気にならないのですが、上記サイトに掲載されているリンクでビルド済みでしかもVirtualBox用にしてあるありがたいイメージファイルがあります。それをダウンロードすると、Android-v4.7zというzip系の圧縮ファイルで入手することができます。これを解凍してやらないといけないのですが、こちらより解凍ソフトを入手できます。
・7-Zip
http://sevenzip.sourceforge.jp/
64bit版のファイルを選択。インストールすると、右クリックメニューに7-Zipが追加されています。それにて解凍。VirtualBoxに関してはググればすぐに出てきて、インストールもすんなり行えました。
そのVirtualBoxはAndroid-v4.vboxをダブルクリックで起動しますが、何か操作しているうちに連続的に表示されるダイアログも大して読まずに(猛暑のせいで頭に入ってこない)クリックしてたら、キャプチャという状態になり、VirtualBoxから脱出できなくなりました…..
※キーボードやマウスの操作をWindows側に戻せなくなった
で脱出(キャプチャ解除)方法を探るべく、ノートパソコンを持ってきてググったのですが、解除方法がキーボード右のCtrlキーとかなにそれ….
image
ねーよそんなものwwってことで、右 Ctrlキーが無い場合もググってみましたが、「キーボード取り替えましたー♪」とか、「事前に変更しておきましたー♪」というのはあるのですが、右 Ctrl以外での解除方法みつからない….というわけで、とりあえず全部キーを押してみる作戦で、なんとかどれかのキーが反応して解除できました(´o`;)
おそらく、Windows側のアプリのショートカットキーが反応したんじゃないかと思います。僕ので言うと、クリップボード履歴のアプリが。というわけで、解除できたところで設定を変えておきましょう。
WS000873
VirtualBoxマネージャーの[ファイル] - [環境設定]の[入力]を選択
WS000874
ホストキーの欄に、とりあえず押さないであろうキーを適当に入れておきました。
で、参考にさせていただいているサイトで、IPアドレスを調べるapkファイルを公開されておりとてもありがたや~とVirtualbox上のAndroidでブラウザを開いてURLを入力してダウロード開始
WS000875
あれ、インストールが開始されない…
image
ソースも公開されているので、EclipseにAndroid4.0.3用としてプロジェクトを作成し、Activityにソースをコピーしてビルドしてapkファイルを生成。さー、ここからどうやってAndroidへダウンロードさせようか?どこのサーバへ置こうか?とちょっと悩みましたが、Dropboxユーザなら、AndroidのブラウザからDropboxへログインしてダウンロードするのが一番手っ取り早いと思われます。
WS000879
自分でビルドしたapkファイルで無事IPアドレスを取得できました。せっかくなので、何かの時のために載せておきます。
IPAdressCheck.apk
で、そのIPアドレスが割り当てられてるAndroidが使えるかどうか?は、コマンドプロンプトより、adb.exeの階層にて、
$adb connect 192.168.1.3


と打つと、connected to <IPアドレス>:<数字>と表示されれば成功のようです。


で、eclipseからは、設定画面で、Android - DDMSとたどった画面の


WS000878


ADBHOST value:に先ほどのIPアドレスを入力して、デバッグ対象のRun Configurationsで特にエミュレータを指定していなければ、Virtubox上にアプリが起動してデバッグが行えます。エミュレータで実行するよりはるかに快適です。

2012/07/24

Android:カスタマイズしたAlertDialog.Builderの幅を変更

0 件のコメント

ダイアログの幅をカスタマイズするなら、Dialogクラスを使った方がダイアログの幅はいじりやすいです。こちらでされてるように、

・Y.A.M の 雑記帳: Android Dialog の大きさを自分で設定する
http://y-anz-m.blogspot.jp/2012/05/androiddialog.html

AlertDialog.Builderをいじるときは、ちょっとハマったのでメモしておきます。

環境

Windows7
JDK1.7
Eclipse 3.7 Indigo Service Release 2
Android 2.1

幅を指定しないと…

AlertDialog.Builderでも、setTitle("hogehoge");のように、タイトルを設定してやれば、特に幅を気にすることもないかもしれません。このように適切な幅で表示してくれます。

image

しかし、setTitle()をしないで、XMLファイルからレイアウトを読み込んだりすると、そのXMLファイルのレイアウト幅で表示されてしまいます。

image

幅を指定する

ググったらこちらにやり方が載ってましたが、

・android - How to make an alert dialog fill 90% of screen size? - Stack Overflow
http://stackoverflow.com/questions/2306503/how-to-make-an-alert-dialog-fill-90-of-screen-size

背景が真っ黒になったりするので、微調整しました。AlertDialog.Builderに対して、もしくはAlertDialog.Builderを継承したクラス内に記述してやれば良いでしょう。R.layout.dialog_layoutはボタンのみが配置されてるXMLファイルです。

    // XMLファイルからレイアウトを読み込む
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.dialog_layout, null);

setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// OKボタンをクリックした時の処理
dialog.cancel();
}
});
setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Cancelボタンをクリックした時の処理
dialog.cancel();
}
});
setView(view);

Dialog d = create();
d.show();
LayoutParams lp = d.getWindow().getAttributes();
lp.width = LayoutParams.FILL_PARENT;
d.getWindow().setAttributes(lp);

こんな感じ



また、画面幅の求め方は、以下のように(Activityでの例)





    WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
Display disp = wm.getDefaultDisplay();
int width = (int)(disp.getWidth() * 0.8);


int widthの値は画面幅80%を求めています。これをさっきのlp.widthに指定してやれば良いです。



ソース



初めてGithubにアップロードしてみました。※変なスペルが混ざってしまいましたが…



AlertDialog.Builderを継承したクラス(CustomAlertDialog)をActivityから呼び出すものです。CustomAlertDialogでは、サイズを指定した場合とそうでない場合の2種類のコンストラクタを用意しています。サイズが指定されなかった場合は、LayoutParams.FILL_PARENTの幅として表示されます。


takaiwa/CustomWidthAlerDialog · GitHub

2012/07/17

Android Test ProjectでJUnit Testが起動しない

0 件のコメント
いいのか悪いか、まだよくわかりませんが、うまくいったやり方をメモしておきます。

⇒良くないやり方でした。文末の 追記:2013/09/27 を参照してください。

環境

  • Windows7
  • JDK1.7
  • Eclipse 3.7 Indigo Service Release 2
  • Android 2.1

手順

  1. Android Test Projectとして新規プロジェクトの作成
  2. 別途作成していたAndroid Application Projectのプロジェクトをテスト対象として選択
  3. TestCaseを継承してクラスを作成
  4. このクラスにテスト対象のクラスのインスタンスを生成するだけのコードを記述
  5. パッケージエクスプローラより、右クリック→Run As→Junit Testを選択
    WS000864
  6. ダイアログが表示されるので、「Eclipse JUnit Lancher」を選択してOK
追記:ここが間違い↑ 「Android JUnit Test Launcher」を選択すれば以下は出ない

Eclipseのコンソールに表示されるエラー

Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/ref/FinalReference

対応

以下の手順JUnitで起動できました。
Android Test Projectを右クリックして、ビルドパスの設定を選択します。ライブラリタブで、「Add Library」をクリックし、JUnitを選択して「Finish」ボタンを押してライブラリを追加します。
WS000865
手順3で作成したクラスを右クリック→Run As→Run Configurationsを選択し、「Classpath」タブを選択します。そこに表示されているAndroid 2.1を選択して、「Remove」ボタンを押下します。
WS000866
そのまま「Run」ボタンを押下すると、JUnitが起動して結果を表示してくれます。
WS000867
なお、これ以降、 TestCaseを継承する際、android.jar版とjunit.jar版が表示されるので適切な方を選択すれば良いでしょう。
image

最後に

ActivityのテストをするべくAndroid Test Projectを作成したわけですが、その内部ロジックだけを単体テストをしたいのに、エミュレータ付だと遅いので、Eclipseに最初からあるJUnitテストをやりたかったのですが、起動できず若干の試行錯誤しました。ロジック部分の内容にもよりますが、やっぱりエミュレータなしだと一瞬でテストが終わるのでありがたいです。

追記:2013/02/20

重いエミュレータを利用する時は有効かもしれませんが、実機、Virtual Boxなどを利用してテストしている場合は、新しくテストケースを作るたびに上記の手順をやる必要があるので、面倒です。しかも、Log.vとか使えないので。
上記では、右クリック > Run as > 2 Juite Test


をする場合のやり方ですが、AndroidのJUnitテストを行う場合は、TestCaseを継承していようと,
Android固有のクラスを使う予定がなくても、②JUnit Testではなく、一貫して①Android JUnit Testを行うようにした方が良いと思います。起動に時間がかかるとは言え、TestCaseの継承であれば、②JUnit Testの場合とそんなに実感できるほどの差がないように思います。それより、先ほど述べた面倒な部分がかなりデメリットとなります。こんな記事を書いてしまいましたが、どうしても、起動が遅くてサクサクテストできない場合は、テスト環境を実機なりVirtual BoxなりPCのメモリやCPUといった方を見直すことを先に考えた方が良いと思われます。

追記:2013/09/27

2013/02/20の追記に関して
>新しくテストケースを作るたびに上記の手順をやる必要があるので、面倒です

確かに面倒

>一貫して①Android JUnit Testを行うようにした方が良いと思います。起動に時間がかかるとは言え、TestCaseの継承であれば、②JUnit Testの場合とそんなに実感できるほどの差がないように思います

僕は何を言ってるんだ、遅ぇーよ!!
エミュレータと比べて感覚が麻痺してたのかな....

上記のやり方は間違ってましたm(_ _)m

テストケースのJavaファイル上で、右クリック > Run as > 2 Juite Testを選択
表示されたダイアログで、「Android JUnit Test Launcher」を選択してOKボタンを押下



これで、上記の面倒な手順を踏まなくても、Javaプロジェクトのテストケースのように光の速さでロジックテストの起動が行えます。


2012/07/15

スマホに複数表示される着いてくる広告を回避する方法

0 件のコメント

息抜きにとスマホでTwitterのタイムラインを見ていると、気になる記事が!
で開いてみると、

image

おい!こら!広告うぜぇぇwwwみたいな事になります。最新のスマホではどのように表示されてるのかわかりませんが、僕のスマホの場合、

image

もう、ウザいとかの次元じゃなくて妨害に近いです。まぁ、何かしらのバグだと思いますが、複数表示されてしまいます。世間で(たぶん)大きく問題になってないという事は、ここまで酷くないのだと思いますが、同じような環境の方もいると思うので、いくつかの選択肢を提案してみたいと思います。

環境

その前に、上記を再現できる環境を記述しておきます。

  • Xperia SO-01B
  • Android 2.1
  • この機種の標準(プリインストール)ブラウザでの閲覧

広告表示を再現するため、とある2chまとめサイトを利用させていただきました。

PC版で見る

Webページで、大手ブログサービス(livedoorとかfc2とか)の記事の場合は、大抵モバイル版表示とは別に、PC版に切り替えられるリンクがあります。

image

PC版に切り替えると、ついてくる広告はなくなりますが、その代わり見づらいかもしれません。画像を細かく確認したい場合にも使えます。

JavaScriptをOFFにする

いちいちON/OFFは面倒ですが、このやり方が一番妥当だと思われます。

「メニュー」→「その他」→「設定」で表示された画面の「JavaScriptを有効にする」のチェックを外します。そうすると、複数どころかついてくる広告も表示されなくなります。

image

HTML5系の動画とかでなければ、ブログ等の記事でJavaScriptの恩恵ははほとんどないと思います。

他のブラウザを使う

これもJavaScriptがらみだと思いますが(検証してないので原因は突き止めてません)、ブログ記事読む時だけ別のブラウザを使えば、標準ブラウザのJavaScript設定をいじらなく済みます。他のブラウザは試してませんが、Opera Miniだと、

image

このように。

「右下の赤いOボタン」→「設定」→「標準ブラウザ」をONにしておけば、Soichaなどのクライアントからリンクをタップすると、Opera Miniで開いてくれます。OFFにすれば元のブラウザに戻してくれるしたたかさ。

[余談]
標準ブラウザにするかどうかは好みによる所もあると思いますが、少しOperaの肩を持つように書くと、Opera Miniは当初からOpera Linkを搭載しており、PC版Operaと一部ブックマークを同期してくれます。あと、Opera Miniは一旦Operaのサーバでごにょごにょして反則技とも言えるページの高速化を行っているので動作が軽快です。試しにOpera Miniで確認くんとかにアクセスすると、IPアドレスが違います。まぁこの機能が仇となってる部分もありますが….

力業

いろいろいぢりたくない人のための力業です。この広告は複数表示されるとは言え、表示して死んでるわけではありません。画面下部の(生きてる)広告は表示/非表示が行われます。

image

この場合、>>7の言ってる事の肝心な部分が見えねーじゃねーか!!というわけなので、その広告をどかせばいいわけです。先ほども申した通り、画面下部は生きてるのでフリックして邪魔な広告を下部へ近づけます。こんな風に、

image

徐々に近づけると、

image

はい消えた!!

とりあえずこれで読めます。



 







スマホ ラクラク使いこなし術 アンドロイドの“困った"、ぜ~んぶ解決! (日経ホームマガジン 日経WOMAN別冊)
☆マーケッター、営業、フリーアナウンサー、アプリ開発者…
働き女子のスマホ楽々ワザ拝見!
☆スマホのここが楽しい! 5つのポイント










1冊でわかる スマホ&タブレット企業活用ガイド (日経BPムック)
スマホ、タブレットをビジネスで100%活かす!
先進事例からセキュリティ対策、BYODまで