2013年3月30日土曜日

WebStormでLocal DirectoryにDeployする方法

環境

  • WebStrom 6.0
  • Mac OS X Mountain Lion

設定

Preferences...([,] + [command])を開いて
[Project Settings]の[Deployment]を選択。

[+]をクリックして
[Name]を入力。
[Type]は”Local or mounted folder”を選択。

[Connection]タブを開いて
[Folder]に”Deploy先のディレクトリ”を入力。
[Web server root URL:]に”http://localhost”を入力。


[Mappings]タブを開いて
[Local path]にプロジェクトのパスを入力。(初めから入力されていると思います)
[Deployment path on server...]に”ドキュメントルートからの相対パス”を入力。
[Web path on server...]に”Web server root URLからの相対パス”を入力。


以上で設定は終わりです。

Deployしてみる

Menuバーの[Tools]の[Deployment]から
[Upload to <Deployment設定名>]を選択。
こんな感じのメッセージが表示されればDeploy完了です。


※[Automatic Upload]にチェックを入れると、編集する度にDeployしてくれます。

参考サイト

MacのApacheの設定は、こちらのサイトを参考にさせていただきました。
ありがとうございます。

Androidはワンツーパンチ 三歩進んで二歩下がる 
Mac OS X Mountain Lionにシステム環境設定の「共有」パネルに Web 共有のオプションが入っていない件について

最後に

「HTML5/JavaScriptでつくるスマホアプリ」みたいな本を読んでまして、スマホからの動作確認のために上記の環境を作りました。
スマホは開発PCと同一無線LAN内にいて、LocalのApacheで公開しているWebページを見に行くという構成です。

もっとスマートなやり方があったら教えてください。

2013年3月25日月曜日

プロジェクト作成時にSupport Libraryのソース関連付けを行う方法

注意

Android SDKのファイルを変更しますので、自己責任において行ってください。

環境

Mac OS X Mountain Lion
Eclipse Juno Service Release 2
ADT 21.1.0

はじめに

プロジェクトにSupport Libraryのソースを関連づけるには
/libsディレクトリに
android-support-v4.jar.propertiesファイルを
下記の内容で作成します。
src=<android-sdk-root>/extras/android/support/v4/src
※<android-sdk-root>の部分は、Android SDKを配置したパスを指定します。
設定を反映させるには、Eclipseから該当プロジェクトの開き直しを行います。
[Close Project] -> [Open Project]
反映されない場合は、Eclipseの再起動で反映されるかもしれません。

今回は、上記の作業を新規プロジェクト作成時に自動でやってしまおうというものです。

設定

<android-sdk-root>/tools/templates/projects/NewAndroidApplication/以下のファイルに変更を加えて行きます。
※適宜バックアップを取ってから、変更を行う事をおすすめします。

1. テンプレートへandroid-support-v4.jar.propertiesを追加
<android-sdk-root>/tools/templates/projects/NewAndroidApplication/root/にlibsディレクトリを作成して、android-support-v4.jar.propertiesを配置します。

2. テンプレートのrecipe.xml.ftlファイルを編集
<android-sdk-root>/tools/templates/projects/NewAndroidApplication/root/の
recipe.xml.ftlをテキストエディタで開きます。
下記の21、22行を追記して、ファイルを保存します。
<?xml version="1.0"?>
<recipe>
    <instantiate from="AndroidManifest.xml.ftl" />

<#if copyIcons>
    <copy from="res/drawable-hdpi" />
    <copy from="res/drawable-mdpi" />
    <copy from="res/drawable-xhdpi" />
</#if>
    <instantiate from="res/values/styles.xml.ftl" />
<#if buildApi gte 11 && baseTheme != "none">
    <instantiate from="res/values-v11/styles_hc.xml.ftl"
                   to="res/values-v11/styles.xml" />
</#if>
<#if buildApi gte 14 && baseTheme?contains("darkactionbar")>
    <copy from="res/values-v14/styles_ics.xml"
            to="res/values-v14/styles.xml" />
</#if>

    <instantiate from="res/values/strings.xml.ftl" />
    <copy from="libs/android-support-v4.jar.properties"
     to="libs/android-support-v4.jar.properties" />
</recipe>
これで、設定は完了です。

試してみる

新規作成ウィーザードからAndroid Application Projectを作成すると
/libs配下にandroid-support-v4.jar.propertiesが追加されるようになりました。


まとめ

今回の記事ですが、メソッドをコード補完やOverrideした時に「引数の変数名がarg0, arg1...で分かりにくいよね?」というのが発端でした。
結論としては
Support Libraryのクラスを利用したときに
Support Libraryのソース関連付けを行っていなかったため
Eclipseにより変数名がarg0, arg1... と設定されていたということです。

この辺りの話は、下記の本に記載があります。
炎のAndroid開発道場
リックテレコム 書籍情報
http://www.ric.co.jp/book/contents/book_901.html

.gitignoreなんかも、プロジェクト作成時に追加されるようにすると便利かも知れません。


2013年3月14日木曜日

NFC端末片手にサンシャイン水族館に行ってきた


お目当てはこれです。

ITpro
サンシャイン水族館でNFCを活用したスマートフォン向け情報サービス
http://itpro.nikkeibp.co.jp/article/NEWS/20130205/454421/

機材

AQUOS PHONE EX(SH-04E)
docomo with series AQUOS PHONE EX SH-04E | 製品 | NTTドコモ http://www.nttdocomo.co.jp/product/with/sh04e/

アプリのインストール

入り口にこんな看板が置いてあり、NFC or QRコードからGoogle Playにリンクして「Ikesu」アプリをダウンロードする仕組みになっています。

行ってアプリ動かなかったらアレなので、事前にインストールして動作確認済みでしたが一応タッチしてみたところ、なかなかNFCタグを認識してくれず苦戦...
(AQUOS PHONE EXはNFCの感度が悪いのかもしれません)
やっと認識したと思ったら、今度はWiMAX圏外でGoogle Playにアクセスできず。。
装備A(WiMAXモバイルルーター)から装備B(LTEモバイルルーター)に切り替えて進軍。

タッチしてみる

入り口でアプリをインストールして進むと

水槽の周りに、こんな感じにタグが置いてあるのでペタペタとタッチしていくと「Ikesu」アプリの中にお魚がコレクションされていきます。
(ここでも、なかなかタグが認識されずペタペタとはいかず...)

お魚をゲットすると、アプリの画面はこんな感じに。
(同時に表示できる魚は5種類まで)

まとめ

帰ってから気付いたのですが、このサービス「NFC」だけじゃなく「おさいふケータイ(Felica)」も対応していた模様。
NFC/Felica両対応のAQUOS PHONE EXはどちらで動いていたのかが謎。。

こんな感じに壁にタグが設置してあるところでは、意外とタッチするのが億劫でした。
(僕の手首関節の柔軟性の問題かもしれません...)
アプリ内蔵のQRコードリーダーも使ってみましたが、QRコードでいいんじゃね?と思ったり・思わなかったり。


因みに「Ikesu」アプリですが、はじめから一種類魚が登録されているので、現地に行けない方もインストールして雰囲気は試せます。

Google Play
Ikesu -Touch Aquarium-
https://play.google.com/store/apps/details?id=air.jp.co.brilliantservice.TouchAquarium2


最後に

写真たくさん撮ったのでペタペタ。
(Ikesuアプリとカメラを行ったり来たりして、AQUOS PHONE EX頑張った!)




2013年3月10日日曜日

Android Layout XMLのコーディングを快適にする方法

環境

下記の環境で動作を確認しています。
  • Mac OS X Lion
  • Eclipse Juno(Service Release 2)

設定

Eclipseの[Preferences]([command] + [,])から
[XML] - [XML Files] - [Editor] - [Content Assist]を開き
[Auto Activation]の設定を変更します。
初期設定では、こんな感じになっていると思いますので
下記の様に設定を変更します。

Auto Activation delay (ms):
200(コードを入力して補完が発動するまでの遅延時間ですので、お好みで)
Prompt when these characters are inserted:
<=:._@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ


以上で、設定は完了です。

使ってみる

例えば、android:layout_widthですと
”w”と入力すると、こんな感じに補完候補が表示されます。

ここで[return]キーを押すと、こんな感じにコード補完されます。
ここまでキー入力2回。

参考

Javaコードで同様の事を行うには、下記のサイトが参考になります。
ser1zw's blog
Eclipseの補完設定をカスタマイズして爆速コーディング

まとめ

意図しない所で補完が表示される場合もありますが
少ないキー入力でコーディングができるようになり
概ね満足です。

2013年3月7日木曜日

NineOldAndroidsを使ってみた

NineOldAndroidsとは

Honeycombから追加された新アニメーションAPIをGingerbread以前でも使えるようにするライブラリ。

公式
NineOldAndroids
http://nineoldandroids.com/

GitHub
JakeWharton/NineOldAndroids
https://github.com/JakeWharton/NineOldAndroids

導入

ZIPダウンロード or git clone等でLibraryプロジェクトを取得して、Eclipseにimportする。

プロジェクトのLibrary参照設定を行う。
使い方

※ViewPropertyAnimatorしかいじってないので、ViewPropertyAnimatorのみ

下記のimport文を追加する。
import static com.nineoldandroids.view.ViewPropertyAnimator.animate;

公式APIはviewのanimate()メソッドを使いますが、NineOldAndroidsではstaticメソッドのanimate(View view)を使います。
// 公式API
view.animate().setDuration(500).x(100).alpha(0);
// NineOldAndroids
animate(view).setDuration(500).x(100).alpha(0);

因みに、こんな感じにアニメーション完了後に元に戻すため更にanimate()を呼ぶと、4.1の端末でonAnimationEnd()の無限ループが発生してハマりました。。
Listenerが登録されてる状態でanime()呼ぶので当然といえば当然の挙動ですが2.3では起きないので気付くまでにだいぶ時間を費やしました...
(この動作は公式のViewPropertyAnimator APIに切り替えても同じでしたので、Honeycomb以降で下記のコードを動かすと発生するはずです。)
    animate(view).x(100).setListener(new AnimatorListener() {

                @Override
                public void onAnimationStart(Animator animation) {}

                @Override
                public void onAnimationRepeat(Animator animation) {}

                @Override
                public void onAnimationEnd(Animator animation) {
                    Log.e(TAG, "onAnimationEnd()");
                    animate(view).x(0);
                }

                @Override
                public void onAnimationCancel(Animator animation) {}
            });
Jelly Bean以降ですと
withEndAction(Runnable runnable)でアニメーション完了後の動作を指定できますが、NineOldAndroidsではこのメソッドは使えませんので
                @Override
                public void onAnimationEnd(Animator animation) {
                    Log.e(TAG, "onAnimationEnd()");
                    animate(view).x(0).setListener(null);
                }
setListener(null)として対処しました。

その他

[Java] - [Editor] - [Content Assist] - [Favorites]の[New Type...]から
com.nineoldandroids.view.ViewPropertyAnimator
を追加するとNineOldAndroidsのanimate()メソッドに対してコード補完が効きます。

まとめ

Gingerbreadのシェアが過半数を切った今日この頃。
NineOldAndroidsで新アニメーションAPIの使い方を押さえて4.x時代に備えつつ、2.x対応もやっていこうと思っています。

2013年2月18日月曜日

In-app Billing v3 にSubscriptionがやってきた

In-app Billing v3がSubscriptionに対応していたのでサンプルコードを動かしてみました。
※2/19時点の僕の環境では、まだ動作確認できていません。
2/22に動作確認取れました。

公式情報

Google Play In-app Billing | Android Developers http://developer.android.com/google/play/billing/index.html

上記サイトを見ると、確かに「Subscriptions now supported in Version 3」とあります。

ライブラリのアップデート

Google Play Billing LibraryのRev.4に付属のサンプルアプリが定期購入に対応してます。

起動してみた

サンプルアプリを動かす手順はRev.3付属のサンプルアプリと同じなので割愛。

起動するとこんな感じ。
右下の「GET INFINITE GAS」ボタンが定期購入アイテムです。

定期購入アイテムのサービスIDは"infinite_gas"という名前になっています。
MainActivity.java
Developer ConsoleのPreview版(v2)から定期購入アイテムを作成します。

定期購入ボタンを押してみた

結果は...

「あなたのデバイスではまだ定期購入はサポートされていない」とのこと。。
ソースコードとログを確認したところ
IabHelper.java
mService.isBillingSupported(3, packageName, ITEM_TYPE_SUBS)のresponseが
BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLEでした。
リファレンスを見ると「ITEM_TYPE_SUBS(定期購入)は非サポートですよ」というレスポンスのようです。

まとめ

(追記参照)
僕の環境では、「Google Playストア」アプリの更新待ち(?)のようです。
※因みに、現状のバージョンは「3.10.10」でした。

こちらのページを見ると

2/14付けで、このような表示が。
全ての端末にアップデートが行き渡るには数日かかるとのこと。
ただし、「If you wish to get the update today to start developing right away, simply reboot your device.」とあったので
早速、端末を再起動してみましたが、ダメでした。。

2013/02/19 追記
公式ドキュメントに下記の記述が
In-app Billing Version Notes | Android Developers http://developer.android.com/google/play/billing/versions.html


「Google Playストア」のバージョン3.10.10からSubscriptionに対応している模様。
サンプルアプリの定期購入なんで動かないんだろう...

もう使えている人いるかな?

2013/02/22 追記
「GET INFINITE GAS」ボタンから定期購入できました。
アプリもマーケット側も特に何もいじってません。
動かなかった原因は何だったんだろう...
「Google Playストア」のバージョン確認しましたが、3.10.10のまま。
因みに、定期購入アイテムを購入するとこんな画面に

どうもスッキリしませんが、一応サンプルアプリの動作確認が取れました。

2013年2月17日日曜日

新しい”Draw 9-patch Tool”を使ってみた

新しい”Draw 9-patch Tool”とは

SDK付属のDraw 9-patch Toolはコマンドラインから起動して使うスタンドアローンのツールでした。
新しい”Draw 9-patch Tool”はEclipseプラグイン版があり、Eclipse上でDraw 9-patch Toolが使えるようになります。
(スタンドアローン版とEclipseプラグイン版があります。今回はEclipseプラグイン版を使ってみたメモです。)

詳しくは作者の紹介ページを。
めがねをかけるんだ
新しい"Draw 9-patch Tool"を公開しました。
http://blog.keiji.io/2013/02/newdraw9patchtool.html

ダウンロード

GitHubのこちらで公開されています。
keiji/draw9patch2
https://github.com/keiji/draw9patch2

上記、GitHubのページの[ZIP]ボタンからダウンロードできます。

インストール

ダウンロードしたZIPファイルを展開して
bin/plugins/にあるDraw9PatchEditor_***.jarを
Eclipseのpluginsディレクトリにコピーします。
(Eclipseを起動している場合は、再起動するとプラグインが有効になるかと思います。)

使ってみた

PNGファイルをダブルクリックしてDraw 9-patch Editorで開くとこんな感じ。
Draw 9-patchの詳しい使い方はここでは説明しませんが、こんな感じに伸ばす場所をドットで指定すると画像が縦横に拡大されてもドロイド君の部分は拡大されずに維持されます。

Mentionきた

環境によって動作が違うと思いますが
Mac OS X Lion/画像プレビュー系のEclipseプラグインなし
な僕の環境では
PNGファイルが全てDraw 9-patch Editorで開くようになりました。
PNGファイルを普通にMacのプレビューで開きたい場合もあるので
Twitterでつぶやきながら、こんな感じの運用にしていたところ

作者の方からMentionが!

プラグインを更新して、Editorのファイル関連付けを確認するとこんな感じに。

*.pngと*.9.pngで独立してEditorのファイル関連付けができるようになりました。
ありがとうございます。

まとめ

Eclipse上で9-patchの作業が完結できるので、便利になりました。
AOSPに取り込まれるといいな。