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対応もやっていこうと思っています。