SyntaxHighlighter

2012年5月19日土曜日

技術って何だったっけ?

久々に Android 以外の話。

部署異動で、運用の仕事からプリセールスのSEに変わりました。主な仕事は打ち合わせと調整と提案書作りと見積もり作り。 以前は毎日のようにサーバにログインしてコマンドを打ったりしていたわけですが、今では一切ありません。 『技術力=いかにたくさんの製品知識があるか』です。 その製品の仕組みとか操作方法とかまでは知る必要は無く、ホームページに載っていることレベルの知識。 あとは値段。提案が終われば、その後は事務作業メインで設計や構築は外注を使います。 商用製品についてあまり知識の無い私は底辺の人間。

正直なところ、提案書作りはたまにならいいけど毎日そればっかりっていうのはつまらないし、見積もり作りもつまらないし、無駄に多くて長い打ち合わせもつまらないし、連日終電まで働いて、何が楽しいのか、何をモチベーションに頑張ればいいのかわからず辛い。 商用製品の知識が増えることで技術力が高まったと私自身が感じられれば、成長を実感できるということなのでやりがいはあると思うのですが、私はどうもそうは思えないみたいです。 プリ向いてないですね。ポストも向いているかどうかはわからないですがプリよりは確実に仕事が楽しかった気はします。 それとも労働環境の差でそう思うだけなんだろうか。疲れてて頭がまわらない。趣味でやってるプログラミングは楽しいです。 でももしこれが仕事になってしまったら、楽しいと思い続けられるのかな? だいいちプログラマの単価はオフショアの影響も大きく年々下がっているので今更上流SEではなくプログラマに転職っていうのは考えにくい選択肢ですね。 天才レベルなら別ですが。凡人なので。家庭もあるので給料どんなに安くてもいいとはやっぱり言えません。年齢的にも後戻りが出来なくなりつつあります。

ここに書いてある『手配師』まさにこれ。http://ceo.livedoor.biz/archives/24821118.html

多言語対応

Android アプリを Google Play で公開すると、デベロッパーコンソールというものでアプリがどれぐらいダウンロードされたかとか統計情報が見られるんですが、そこの『ツール』カテゴリ全体の統計を見る限り、日本のシェアは 12.5% です。 残りの 87.5% は外国です。ちなみにシェア1位はアメリカ(31%)、2位は韓国(13.1%)、3位が日本です。 私の公開しているアプリも、30% は日本からのダウンロードですがそれ以外は外国からです。 日本でしか使えないようなアプリだったら日本語の UI だけでいいと思いますが、ロケーション関係なく使えるアプリを作るなら英語対応は必須でしょう!

というわけでアプリの多言語対応の仕方ですが、全てのテキストを res/values/strings.xml で定義していれば対応は簡単です。 values フォルダをコピーして、values-ja フォルダを作ってください。 日本語のテキストはこちらに記載して、元の values フォルダの中の strings.xml は日本語で記載していた部分は全て英語に変えましょう。 たったこれだけです!英語の UI を使用するか日本語の UI を使用するかは端末の言語設定によって勝手に切り替わります。

2012年5月14日月曜日

EditText で Link

久々にはまったことメモ。
テキストにリンクを貼る方法は知っている限りだと以下の4つなんですが

  • Html.fromHtml で <A> タグを使う
  • ClickableSpan を setSpan する
  • URLSpan を setSpan する
  • setAutoLinkMask を使う

いずれも、EditText で使うと、文字の編集はできなくなってしまいます。 1.6 のエミュで試してみた限りでは、上3つはかろうじて入力できるものの文の先頭に文字が挿入されるだけでカーソル移動がカーソルキーでもタップでも一切できない(リンクのほうにイベントを奪われる)ので現実的には編集不可能。 AutoLink の場合は入力した時点で例外でコケました。
ググってみたんですが、そもそもリンクを貼る機能は TextView での使用を前提とした機能で EditText 使うなってことみたいでした。
でもまぁ、編集さえしなければ EditText でもリンク自体は機能するので、わざわざ TextView に移し変えるのもエコじゃないし(入ってるテキストが長い上に色んな span たくさんついてるので、移し変えるとまた getSpan でえらいリソース食うに違いない!)、リンク機能が有効な場合は閲覧モードで開き、コンテキストメニューで編集モードに切り替えられる(編集モードの間はリンクはタップしても何もおきない)、という仕様にしてみました。バリバリ編集しつつリンクはリンクでタップしたら飛べるぜ!って実装方法知っている方いましたら教えてください・・・。

ちなみに、オプションメニューに関しては、onCreateOptionsMenu が呼ばれるのは最初の1回だけで、動的に変更したい場合には onPrepareOptionsMenu を使う必要がありましたが、コンテキストメニューに関しては毎回 onCreateContextMenu が呼ばれるみたいです。動的に変えたい場合もこのメソッドに入れといてOKです。onPrepareContextMenu というメソッドは存在しないぽい。

2012年5月13日日曜日

次はどうする?とお勧めサイト群

作りたいアプリを考えるのが次にやることです。興味がある分野を選んで、構想を描きましょう。 目標は大きいほうがいいので、シンプル以外取り柄のない無駄アプリにする必要はないと思います。 それだったら参考書を買って載ってるサンプルアプリでも作ればいいです。 Google Play を見て、競合についても調べてください。 考えていたものと同じ機能を持った、十分に優秀すぎるアプリが既に他者によって公開されているのであれば、頑張って作って公開しても無駄です(金儲け的な意味ではなく、無料であっても、誰にもダウンロードされなければ虚しいですよね)。 もちろん、最終的にそのアプリを超える機能を実装する!という目標なら全然アリだと思います。

作りたいアプリが決まったら、ググリながらの製作開始です。

Google Play (旧 Android マーケット)に公開する際には手続きが色々と必要ですが、アプリが出来てからで充分です。

基本的にはググってもらえばいいのですが、私が最初のアプリ製作時に非常にお世話になったサイトをいくつかご紹介します。

Androidプログラマへの道 ~ Moonlight 明日香 ~
ブログではなく Wiki で、情報が探しやすいです。何でググればいいのかもわからない初期の頃に非常に役立ちます。とにかく一度ざっとメニューを眺めてください。サンプルコードもシンプルで、重要な箇所だけ色づけしてあるので見やすい。ググる前に一度ここを訪れると良いと思います。
Tech Booster
ググってれば必ず出会うサイトです。ブログ形式なので、必要な情報を検索して調べる感じですが、情報量多いです。
Y.A.M の 雑記帳
ここもググって出会うことが多々あると思います。本も何冊か書かれている方のブログです。 レイアウトに関する情報、Google の API の情報の日本語訳(まとめ)などが助かります。
Stack Overflow
英語の、プログラミングに関するQ&Aサイトです。英語だからって毛嫌いしないで、ググって出てきたら読んでみてください。 日本語の情報が無くて、ここにだけヒントがあった、ということはよくあります。

2012年5月11日金曜日

Hello, Android World! 解説その2

前回の続きです。最後にソースを見てみましょう。HelloActivity.java を開いてください。

package jp.gr.java_conf.akr.hello;

import android.app.Activity;
import android.os.Bundle;

public class HelloActivity extends Activity {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
 }
}

Android では Activity というクラスで画面を作ります。基本的に 1画面=1Activity です。コンストラクタはありません。 onCreate というメソッドは画面が起動したタイミングで必ず実行されるメソッドです。 初期化等はここで行うことが多いです。onCreate の他にも、状態遷移に合わせて呼び出されるメソッドが決まっています。 「Android 状態遷移」でググってください。
setContentView で、その Activity で使用するレイアウトファイルを指定します。 res フォルダ内の内容は、ソースコードからはこのように R.type.name という書き方で呼び出せます。 layout の場合、R.layout. の後に res/layout の中に作成したレイアウトファイルの、拡張子 .xml を除いた部分を記載します。 今回のソースには出てきませんが、前回説明した res/values/strings.xml の中の文字は R.string.name といった形で記載します。

このソースコードでは他に何もしていません。res/layout/main.xml を画面に表示するだけのプログラムです。 main.xml では TextView が設置されており、その初期テキストとして res/values/strings.xml の中の文字列が呼び出されて、画面に Hello world が表示されたわけです。

これで最初のプログラムの説明は終わりです。

2012年5月10日木曜日

Hello, Android World! 解説その1

前回 Hello world を表示させましたが、これはデフォルトで新規作成されたプロジェクトがそのようなコードになっているからです。まずプロジェクトのディレクトリ構成から見ていきます。(取り急ぎ必要なところだけ)

helloproject.png
src
Java のソースコードを格納するディレクトリです。パッケージ名の下に HelloActivity.java というファイルがあると思います。
gen
Eclipse が勝手に生成するファイルが入るので気にしなくていいです。
assets
プログラムが利用する任意のリソースファイルを配置できます。デフォルトでは何も入っていないはずです。
bin
コンパイルされた実行ファイルが配置されます。
res
プログラムが利用するリソースファイルを配置します。drawable, layout, values というフォルダがあるはずです。ターゲットを高めのバージョンにした場合は drawable には末尾に -?dpi といった文字列がついた複数のフォルダができているかもしれません。それぞれ、画像、画面のレイアウト、値のリソースファイルを格納します。名称にはルールがあって、なんでもいいというわけにはいきません。
AndroidManifest.xml
アプリケーションの設定が書かれている xml ファイルです。
project.properties
Eclipse上のプロジェクトのプロパティが保存されています。直接編集はしません。

画面のレイアウトは res/layout の中に保存します。デフォルトの main.xml をダブルクリックして開いてみてください。右側のアウトラインという小窓に LinearLayout と TextView が階層構造で表示されています。これらが画面の中にある部品です。LinearLayout は複数の部品を並べる場合の並べ方を指定するレイアウトの一種で、それ自体は目に見えるものではありません。TextView はユーザには編集させないテキスト表示エリアです。編集可能なテキスト領域は EditText を使います。パレットからドラッグ&ドロップで画面をデザインすることができます。何か適当にボタンでも配置してみてください。配置したら、真ん中の小窓を Graphical Layout タブから main.xml タブに切り替えてください。xml が表示されます。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical" >

  <TextView
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="@string/hello" />

  <Button
   android:id="@+id/button1"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="Button" />

</LinearLayout>

layout_width と layout_height という属性は、それぞれ部品の幅と高さを指定するものです。fill_parent または match_parent で親要素の領域一杯まで広がろうとします。意味は同じです。使い分けについて気になる人は「fill_parent match_parent 違い」でググってください。wrap_content にすると表示するものの量に合わせて必要最小限のサイズになろうとします。 単位付きの数値で指定することもできます。ちなみに Android の単位は独特ですので単位指定しようと思ったらまずはググってください。
text という属性で初期表示テキストを指定します。ここで、TextView の text 属性の値に注目してください。@string/hello となっています。これは、res/strings.xml の中の hello という名前の要素を参照することを意味します。res/strings.xml を開いてみてください。

<?xml version="1.0" encoding="utf-8"?>
<resources>

<string name="hello">Hello World, HelloActivity!</string>
<string name="app_name">Hello</string>

</resources>

name 属性が hello の要素は、Hello World, HelloActivity! となっています。これが @string/hello で参照されて TextView に表示されたわけです。@string/hello を @string/app_name に変えれば Hello と表示されるようになります。基本的に画面表示するテキストは全て、レイアウトの xml ファイルやソースコード中には直接書かず、strings.xml に記載してそれを参照させてください。理由はまた別の記事で説明します。

最後はソースです。これは次回説明します。

2012年5月8日火曜日

Hello, Android World!

前回の記事で開発環境は整いました。今回はプログラミング定番の Hello world してみましょう。

Eclipse を起動してください。

ファイル→新規→その他→Android→Androidプロジェクトを選択して次へを押してください。 プロジェクトというのはアプリケーションの単位です。プロジェクト名=アプリ名と思っておけばいいです。今回は Hello にしましょう。ワークスペース内に新規プロジェクトを作成、でデフォルトロケーション使用でOKです。
次へを押すとビルドターゲットの選択画面になります。ここで選択したターゲットによって、使える API が違ってきます。できるだけ幅広いユーザに使ってもらえるようにするには低いバージョンを選択します。最新機能を使いたければ高いバージョンを選択します。ここでは Android 1.5 を選択しましょう。ちなみにターゲットは途中で変更することも可能です。
次へを押すとアプリケーション情報の入力画面になります。Application Name はそのままで良いでしょう。Package Name には、通常、ドメイン名を逆にしたもの+任意の名称を入力します。独自ドメインをもっているならそれを使います。例えば hogehoge.com という独自ドメインを取得しているとしたら、 com.hogehoge.android.hello といった形です。独自ドメインが無ければ、今回のようにどこにも公開する予定が無いアプリなら何でもいいですが、公開予定があるならフリーのサービスを利用しましょう。Package BOF なら無料ですぐにユニークなパッケージ名を確保できます。ただし登録時に入力した名前とメールアドレスは誰でも参照できる状態になってしまいますので注意してください。ただ、アプリを公開するならどのみちメールアドレスは公開することになるのでそれと合わせておけば良いです。
アクティビティーの作成にはチェックを入れたままで。Minimum SDK もデフォルトのままでOKです。ここで設定した SDK のバージョンによって、アプリをインストールできる端末が決まります。先程のビルドターゲットと合わせる必要は必ずしもありません。ビルドターゲットのほうは、低いバージョンにするとそれより後のバージョンで実装された機能は使用できなくなりますが、こちらはそのような制限がかかりませんので注意してください。・・・ややこしいですね。また別の機会にもう少し詳しく説明します。ここではデフォルトのままにしておいてください。これも後から変更することも可能です。
完了を押すとプロジェクトが作成されます。

helloproject.png

パッケージ・エクスプローラー上でプロジェクト名の上で右クリックして、実行→Androidアプリケーションをクリックしてください。勝手にエミュレータが起動されて実行されます。

eclipse04.png

上の画像のように表示されれば成功です。もしエミュレータがいつまでたっても起動しない場合は、一度エミュレータを落として、Eclipse ごと再起動してください。 起動したらエミュレータを手動で起動します。 Hello プロジェクトを右クリックして、実行→実行の構成をクリックし、ターゲットタブに切り替えて Deployment Target Selection Mode をマニュアルに変更して適用し閉じます。 エミュレータが起動したら、再度実行してみてください。下の画面のようなウィンドウが表示されるはずです。

eclipse05.png

赤枠で囲んだ部分に起動したエミュレータが表示されているはずです。それを選択してOKを押してください。(エミュレータが起動しているのに赤枠部分に何も表示されていない場合はエミュレータが Eclipse に認識されていません。もう一度エミュレータも Eclipse も閉じて、起動しなおしてみてください。)

ソースの解説はまた次回。

2012年5月6日日曜日

Android開発始め方

初めてアプリを公開してからちょうど1ヶ月たちました。 Javaといえば10年ぐらい前に入門書に載ってたサンプルアプレットを1つだけそのまま打ち込んで動かしてみたことがある、だけのレベルから本も買わずにここまでよくきたな、と(誰も褒めてくれないので)自分で自分を褒めてあげたい。

で、これからAndroidアプリの開発やってみようかな、という人向けに多少アドバイスみたいなもんをアウトプットしていこうと思います。

まず。プログラミングというものを一切やったことがない人は正直厳しいと思いますのでJavaの入門書買って一通り勉強しましょう。 Androidの本は(立ち読みした限りだと)Javaについてはあんまり丁寧に扱ってないので不向きだと思います。

プログラミング(シェルスクリプトでもOK)は経験あるけどJavaは無い、という人。 オブジェクト指向について多少なりとも理解しているならそのまま突っ走れます。 Javaの入門書をざっと流し読みすると更に良いと思います。 お金かけたくないならWebでもいいかと。基本的に、走りながら、わからないところはググる、という形で進んでいくことになります。 英語のサイトを全文翻訳にかけずに読める程度の英語力がないと現状ではWebだけを頼りにするのは難しいです。 オブジェクト指向っておいしいの?という人はやはりJavaの入門書から。 英語全く読めませんという人はAndroid開発本購入したほうがいいです。

Java経験ばっちりの人に私からアドバイスできることはありません・・・。むしろしてほしいです。

Java入門をここでやるつもりはないので、ターゲットとなる層は2番目の突っ走れる方々です。

まず、開発環境を用意します。作業用PCはWindows XP~7 を前提としています。 (ちなみに、ここで説明している方法でインストールする場合には関係ないですが、Java や Eclipse を個別インストールする場合、OS が 64bit 版でも、インストールするソフトは全部 32bit 版を選んだほうがいろいろとめんどくさい思いをしなくて済むと思いますので、ハマるのが好き、という方以外は 32bit 版を選びましょう。)

  1. Eclipseインストール
    開発環境の構築でめんどくさい思いをしたくなければ、日本語化もされていてJREも含め全部いりの Pleiades を強く推奨します。現在の最新は Eclipse 3.7 Indigo ベースの Pleiades です(図1)。そのボタンをクリックして、Java の Full All in One をダウンロードし(図2)、解凍してC直下に配置します(自己解凍 exe ファイルの場合デフォルトでC直下が指定されていたと思います)。C:\pleiades\eclipse にある eclipse.exe をダブルクリックしてとりあえず起動できるか確認しておきましょう。今後毎回ここから起動することになるのでデスクトップにショートカットでも作っておくといいです。起動したらワークスペースの選択を迫られます。データファイルを保存する場所です。パスの途中にスペースや日本語が入らなければどこでもいいです。デフォルトでもいいですし、Cドライブにあまり余裕が無ければ違うドライブにしても構いません。起動が確認できたら閉じてください。
    図1 eclipse01.png
    図2 eclipse02.png
  2. Android SDKインストール
    最新のSDKをここからダウンロードしてください。推奨されているインストーラー付きのほうにして、ダウンロードが完了したらインストールしてください。場所はこれもC直下にフォルダを作ってそこにインストールしたほうがいいと思います。インストールの途中で JRE (または JDK ) が見つからないと言われてしまった場合は、いったん閉じて、環境変数の JAVA_HOME に Pleiades 同梱の Java のパスを設定します。環境変数は、(マイ)コンピュータを右クリックしてプロパティ→詳細設定→環境変数ボタンで設定できます。変数に JAVA_HOME、値に C:\pleiades\java\6 を入力してください。再度インストーラーを実行すればいけるはずです。
  3. ADTプラグインのインストール
    Eclipseを起動し、ヘルプ→新規ソフトウェアのインストールを実行します。追加ボタンを押して、名前は適当に、ロケーションに https://dl-ssl.google.com/android/eclipse/ を入力してOKを押してください。
    図3 adt01.png
    表示されたもの全てにチェックを入れて次へをクリックし、そのまま画面の指示に従って全てインストールしてください。 上手くいかない場合は、上記のURLを https ではなく http で試してみて、それでも駄目ならアンチウイルスソフトやWindowsファイアウォールを一時的に無効にして試してみてください(ただし自己責任で)。 インストールが完了すると Eclipse の再起動を求められますので再起動してください。
  4. Eclipse設定
    起動したら、ウィンドウ→設定を実行して、左側のメニューから Android という項目を選択してください。右側に表示された設定の、SDK ロケーションという項目に、2でインストールした Android SDK のパスが入力されているか確認してください。入っていなければ参照ボタンを押してインストールパスを設定してください。変更したら適用ボタンを押し、OKボタンを押して閉じます。
  5. プラットフォームのインストール
    ここまで上手くいっていれば、Eclipse のツールバーの下のアイコンが並んでいるエリアに下図のアイコンが出現しているはずです。
    図4 eclipse03.png
    左側のアイコンをクリックしてください。 めんどくさければ、全てで良いです。容量とダウンロード時間を節約したければ、Tools 全部と、各バージョンの SDK Platform と Google APIs と Extras 全部にチェックを入れてインストールします。途中でエラーが出ても、とりあえず SDK Platform がインストールできていればOKです。とっても時間がかかりますので覚悟しておいてください。
  6. エミュレータ作成
    先程の2つのアイコンのうち右側のアイコンをクリックしてください。エミュレータの作成、削除、起動などの管理はここから行います。 新規をクリックしてとりあえず1つ作成してみましょう。名前は何でも良いです。ターゲットはエミュレートする Android のバージョンです。最終的には作成するアプリで動作保障するバージョンの分は全て作成することになると思いますがここではとりあえず何か1つ適当に選んでください。SDカードはとりあえず最小の 9MB でいいです。これも大きいファイルを保存するようなアプリを作るなら適宜大きくしてください。スナップショットは、有効にすると2回目以降の起動が早くなります。ただし終了時にイメージファイルを保存するので、終了は少し遅くなり、ディスクの容量も食います。スキンやハードウェアはとりあえずデフォルトでいいです。 作成できたらそれを選択して、開始ボタンを押してください。チェックはデフォルトのままでOKです。起動ボタンを押して起動させましょう。マシンスペックにもよりますが、完全に起動して操作できるようになるにはかなり時間がかかります。気長に待ってください。 起動できたら環境整備は完了です!

2012年5月5日土曜日

1.4リリース

しました。認証に対応したのと、有料版にのみUser-Agentの変更機能実装しました。