Tweet Yahoo!ブックマークに登録 しよう!
  1. 1.開発環境の構築
  2. 2.HelloWorld
  3. 3.Androidアプリの特徴
  4. 4.アクセス許可
  5. 5.インターフェイス
  6. 6.高級ウイジェット (未完成)
  7. 7.イベント伝達機能 (作成中断)
  8. 8.マルチメディア機能 (作成中断)
  9. 9.スレッドとハンドラー(作成中断)
  10. 10.Androidの基本 (作成中断)
  11. 11.SQLite (作成中断)
  12. 12.コンテンツプロバイダー (作成中断)
  13. 13.位置情報サービス (作成中断)
  14. 14.ネットワークAPIの活用 (作成中断)
  15. 15.サービス機能(作成中断)
  16. 16.Android のIPC(作成中断)
  17. 17.ウイジェットエンジンとウエブビュー(作成中断)
  18. 18.アプリケーションのリソースと地域化 (作成中断)
  19. 19.グラフィックとアニメーション (作成中断)
  20. 20.Twitterクライアントをつくる (作成中断)
  21. 21.アプリケーションの設定とバックアップ(作成中断)
  22. 22.画面回転の自動化 (作成中断)

3.Androidアプリの特徴

A_アプリのデジタル署名 

 Androidアプリケーションを「端末」や開発用「エミュレータ」で動かすには、アプリケーションに対して必ず「デジタル署名」が必要である。「デジタル署名」されていないアプリケーションは、インストールしたり起動することが出来ない。そしてアプリケーションに対する「署名」は、即ち「APKファイル」に対する「署名」である。
 「署名」などの操作は「コマンド・ライン」で可能だが、ここでは簡単に「Eclipse SDK」を使って行う。

 

① 開発時の「署名」
(1) Eclipseでの開発で、「プロジェクト」を完成させた後「ビルド」を実行すれば、SDKが「キーストア(debug.keystore)」と「秘密鍵(androiddebugkey)」を自動で作成し、それを用いて「デジタル署名」された「APKファイル」を生成する。
(2) そして、「プロジェクト」を実行すると、「エミュレータ」が起動し、その
「エミュレータ」に「APKファイル」がインストールされる。
(3) しばらくして、「エミュレータ」が立ち上がり、「メニュー」を押すと、インストールされたアプリケーションが動作する。

 ここで言いたい事は、たとえ開発用アプリと言えども「デジタル署名」が必要だ、と言うこ事。そして、「.keystoreの作成」や「秘密鍵.key」「デジタル署名」などの紛らわしい操作は、いちいち開発者が行わず、Eclipse SDKが自動的にしてくれる、という点だ。

 「APKファイル」の拡張子は「.apk」で、この " APK " は「Android Package」の略。
なお、開発用に「署名」された「
APKファイル」はAndroidマーケット等に「配布」することは出来ない。配布する為には、リリース用に「署名」し直す必要がある。
 そのリリース用の「書名」の方法は、以下の 
 ③ 初めての「署名」- リリース時の署名(1) と、
 ④ 2回目以降の「署名」- リリース時の署名(2)

で述べる事にする。

  

★ 追加情報 1: 開発環境グレードアップ時の落とし穴
 本サイトの管理者は、開発環境を最新版にグレードアップした。
即ち、「
Android4.0Platform 」をインストールし、 Eclipseも 「pleiades-e3.6-platform-jre_20110326」にした。ちょっと時間がかかったが、ほぼ完璧にグレードアップできたと思った。Eclipseでのプロジェクトの作成OK!, Android SDK Manager でのAndroid4.0 (API 14) のインストールもOK! そして、Android Virtual Device Manager (AVD)でエミュレータも動いた。

 ここまで動作すれば、もう大丈夫!と思った。ここまでは、個別に動作テストしただけだった。

 ところが、アプリのプロジェクトを実行したら、自働的に動作するはずの「エミュレータ」が立ち上がらない。その時、あるエラーが出現した。そのエラーは、「Your project contains error(s),please fix them begore running yourapplication 」 だ。ネットで検索したら、解決策が見つかった。ここにリンクを張った。 結論を言うと、なんらかの理由で、上記で説明したキーストア(debug.keystore)が無効になったので、最新のキーストア(debug.keystore)をつくって解決した。

 この解決までの過程を述べる。
①最初の挑戦は、既に存在するキーストア(debug.keystore)で、作成したapkファイルにデジタル署名をしようと試みたが、いきなりパスワードを要求してきた。パスワードなど作った覚えはない。なんせこれは、自動的に生成されたものだったのではなかったか?!ここで又挫折した。
②更に挑戦した。上記の リンク をようく読んだら、答えが隠れていた。私が、このページで紹介した方法でキーストア(debug.keystore)を新たに作成し、上書きをすれば良い事が分かった。そして、自分が作ったサイトの内容(このページだ)を見ながら、その通りにキーストア(debug.keystore)を新規作成し、上書きした。そして・・・動いた!・・・・なんというか、この感動は何ものにも代えられない。おわり (^ ^) V。

★ 追加情報 2 :
上記①で、(
debug.keystore)のパスワードなど作った覚えはない!と書いた。しかし、その後分かったことだが、実はそのパスワードはデフォルトで 「android」である事が分かった。実際そのパスワードでアプリに「署名」する事ができた。因みに、キー名は、(androiddebugkey)で、そのパスワードもデフォルトで「android」です。上記(追加情報1)で行った行為は、このデフォルトのパスワードを変更したに過ぎなかったのか!と思います。

★ 追加情報 3 :
 チームを組んでアプリ開発をする場合、「開発用デバッグキー」をチーム間で共有する事が必要だ。この事について、他サイトで紹介しているので参考にしてほしい。開発用署名 debug.keystore

★ 追加情報 4 :
本サイトの管理者は、再び開発環境を最新版にグレードアップした。そして、上記【追加情報 1】と同じエラーに出くわした。
 即ち、新しい開発環境を再構築し、過去のプロジェクトをインポートした。当然、最新版の開発環境の
debug.keystore】と、インポートしたプロジェクトの【debug.keystore】は、同一ではないはずだ。従って、ビルドを実行すると、エラーが発生する。

 この問題を【追加情報 2、3】の方法で解決する事もできるが、今度はもっと合理的な方法を紹介する。

下図を見てほしい。プロジェクトの左下に赤色×マークがある。この赤×が無くならなければプロジェクトを実行できない。

そこで、下図の流れで【プロジェクト・プロパティの修正】という処理をする。プロジェクトのビルドまでするようにする。

 そして、プロジェクトの実行!すると別の問題が発生!

・・・・エミュレータは立ち上がったが、「予期せぬエラー」と英語で表示し、アプリが動作しない。

上記の方法を他のプロジェクトにも適用し、【プロジェクト・プロパティの修正】と【プロジェクトのビルド】を各プロジェクトに行ったが「予期せぬエラー」は他のプロジェクトでも同じだった。

 埒が明かないので、原因不明のままPCを閉じ、再度プロジェクトを実行すると、今度はエミュレータを通してアプリが動作した。

 これは、どう説明したらいいか?【プロジェクト・プロパティの修正】と【プロジェクトのビルド】の後、エミュレータを再立ち上げする必要があったのか???

Property modification.png

②「署名」されていない「APKファイル」をエクスポート
 「プロジェクト」を右クリックし、「Android Tools」-「Export Unsigned Application Package」(署名されていないアプリケーション・パッケージをエクスポート)の順に選択すれば、「署名」無しの「APKファイル」が出力される。これはそのままでは
「インストール」や「動作」が不可能なので、後で「署名」をする必要がある。

③ 初めての「署名」- リリース時の署名(1)
 Androidマーケット等にアプリケーションを初めてリリースする時は、自己発行の秘密鍵(.key)で「APKファイル」に「署名」する必要がある。


①プロジェクト「Hello World」を選択し、
②「Android Tools」を選択
③「export Signed Application Package」(署名されたアプリケーションパッケージを出力する)
 を選択する。

apk_01.png

 
- キー・ストア keystore (keyの保管庫)をつくる

すると、下画像が表れる。
 
①「Create new keystore」(新しいkeystoreをつくる)を選択する。
②「Browse」で保存先を指定し、
③ 自己発行の「keystore」名を「(例)yamada.keystore」のように入力する。
④ そして、「パスワード(Password)」、
⑤「パスワードの確認(Confirm):④と同じ」を入力し
「Next」を押す。


apk_03.png

 

(注意) Eclipse SDKの設置時、keystore の保存場所は Eclipse 内のLocation フォルダになっている。 EclipseのバージョンアップなどでそのLocationフォルダが消去 されると 、その中の keystore まで 消えてしまう。結果、アプリのリリース時に使ったkeystoreがないために、アプリのバージョンアップが出来なくなり、 大変な事になってしまう。 保管場所はEclipse SDK とは独立した場所に置いて、keystoreの管理は万全にしよう。(古いバージョンの場合)

(補足説明)  「debug.keystore 」の保存場所は、OSによって異なる。私は Windows 7を使っているが、保存場所は「C:\Users\ユーザー名\.android」になっている。

 下画像のように、Eplicseで「debug.keystore 」の位置を知ることができる。


apk_14.png


- 秘密鍵 (.Key) をつくる (キー・ストアに保存される )
上図の「Next」を押した後、下画像が表示。各項目に必要事項を入力。(英語・ローマ字で入力)

Alias : 秘密鍵(.key)の別名 (例: yamada.alias ) 更に yamada2.alias , yamada3.alias とつくれば、合計3つのaliasが「yamada.keystore」に保存される。
Password : パスワード (yamada.keystore作成時のpassと同じでもいいし、別でもいい)
Confirm : パスワードの確認 
 (上②のpassと同じ) 
Validitiy(years) : 証明書の有効期限:25年以上(例 : 50 )
First and last Name : 姓名(例 : yamada yukio)
Organizational Unit : 組織単位(例 : yamada sangyou. inc)
Organization : 組織(例 : yamada sangyou. inc)
City or Locality : 市区町村(例 : Tokyo)
State or Province : 州又は地域(例 : Shibuya)
Country Code (XX) : 国コード(例 : JP , 81)
入力後、「Next」を押すと 秘密鍵が作成される。

apk_04.png

 

-署名された「APKファイル」 
上画像で作ったkey (別名 : yamada.alias)は、keystore(yamada.keystore)に保存されると同時に、「APKファイル」に「デジタル署名」され、
その保存先を下画像「Browse」で
指定して「Finish」を押せば、 

apk_05.png

 

「署名」された「APKファイル」が保存される。これが、リリース用にアップロードできる「APKファイル」だ。

apk_06.png

 

   

④ 2回目以降の「署名」- リリース時の署名(2)
 リリース済みのアプリケーション(key : yamada.alias を利用したと仮定する)をバージョンアップし再度リリースする場合、apkは初回リリース時と同じバージョンのkey = (key : yamada.alias)で「デジタル署名」する必要がある。別のバージョンのkey = (例:yamada2.alias)で「署名」した場合、バージョンアップに失敗する。

 

2回目以降の「署名」方法を、以下に示す。
①プロジェクト「Hello World」を選択し、
②「Android Tools」
③「export Signed Application Package」=(署名されたアプリケーションパッケージを出力する)
 を選択する。

apk_01.png

 

すると、下画像が表れるので、
①「Use existing Keystore」(keystoreを使う)にチェックを入れ、
②「Browse」で初回リリース時の「署名」に使った「keystore」(例:yamada.keystore) を探し選択する。
③「Password」を入力した後
④「Next」を押す。

apk_02.png

 

そして、「yamada.keystore」の中に存在する「秘密鍵.key」を選択する為に、「Alias:別名」の右側にある▼プルダウンを押し秘密鍵である「例 : yanada.alias」を選択する。
秘密鍵を作る時に指定した「Passwordを入力し、「Next」を押す。 

apk_02_b.png

 

APKファイル」の保存先を指定し、「Finish」を押せば、

apk_02_c.png

 

yamada.alias」で「署名」された「APKファイルが出力、保存される。これをバージョンアップ版としてリリースすればいい。

apk_06.png

  


「APKファイル」のファイル構成を見る ( Windows環境にて )
 「APKファイル」には、プロジェクトのコンパイルにより生成された「クラスファイル」「リソースファイル」「マニフェストファイル」などが入っている。

 実際にそのようなファイルが存在するかWindows環境のFile操作で確認して見よう。
下画像(左)の「APKファイル」をダブルクリックしてみる。開けませんね!. . . 何故か?
「APKファイル」はAndroidプラットフォーム(Linux )で動作するファイルだからだ。 
 だけど、ファイル構成を見るだけなら、Windows環境でもzipに対応した解凍ソフト(例 : ALzipを前もってインストール)を使って見ることが出来る。
下画像左のAPKファイルの拡張子を「.apk」から「.zip」に手動で変更する。右が変更後。

apk_06.png

apk_07.png

 

そしてzipファイルダブルクリックすれば、ファイルを見ることが出来る。ここでは「解凍」までする必要は無い。
「解凍」して確認してもいいが、Windowsで使えないファイルなので結局「ゴミ箱」行きだ。

apk_08.png

 

確認が終わったら元の「.apk」に戻し、Androidに「インストール」出来る状態にしておこう。

  


「APKファイル」のファイル構成を見る ( Android環境「Linux コマンド」で )
 「APKファイル」をLinux コマンド操作で確認する為には下記の順序でおこなう。
Android開発環境(JDK, SDK, EclipseSDK)を整える。
platform-tools「Path」 を通す
コマンド操作の道具「shell ツールは、「C:\android-sdk_r10-windows\android-sdk-windows\platform-tools」にあるので、そこに「path」を通す。「Path」を通す事によりplatform-toolsディレクトリ以外の位置からでも「shell コマンド」を実行できる
ようになる。
「エミュレータ起動(A)
下画像のように、EclipseSDK付属の「Android SDK and AVD Manager」から「エミュレータ」を起動する。下画像の順序で進める。

 下の⑤はエミュレータのサイズ(デフォルトは3)、7は横長サイズのノートパソコンに合わせた。

apk_09.png


「エミュレータ起動(B)
「Android Manager.exe」を直接開き「エミュレータ」を起動させる方法もある。方法は上画像と同じ。 

apk_10.png


(ア) ~ (エ)の順序で「アプリ・アイコンの集合場所:ランチャー」に進む。
(ア)下画像は起動した時の画面。
(イ)下画像の右側の「MENU」を押すか、左画面の「緑色カギ」をクリックしながら右にスライドする(ロック解除)。 

apk_11.png

 (ウ)すると、下画像になるので、ランチャー・アイコン「格子状の四角」ボタンを押す。

apk_11b.png

 (エ)すると、ランチャー画面「アプリ・アイコンの集合場所」の画面が現れる。
アプリがインストールされると、この「ランチャー画面」にアプリの「アイコン」が追加される。
apk_11c.png

 さて、「エミュレータ」が立ち上がりったら、次に進む。

「エミュレータ」に「HelloWorld.apk」を「インストール」
Windowsの「スタート」→「cmd : コマンド・プロンプト」を開き、「cd命令で「HelloWorld.apk」ファイルのある位置に移動し、「dir命令で「HelloWorld.apk」ファイルがある事を確認する。

apk_12a.png


「adb」ツールを使って「HelloWorld.apk」をインストールする。下画像のように入力しエンターを押す。

apk_12b.png

Success」と返ってきたら「インストール」成功
apk_12c.png


インストールが成功すると、起動中の「エミュレータ」の「ランチャー:アプリ・アイコンの集合場所」に「HelloWorld」のアイコンが表示される。このアイコンをクリックすれば起動する(省略)。
apk_12d.png


Linuxミニ講義 :
「エミュレータ」内部のLinuxにRoot権限でアクセス

さ ~ これからが本番だ!!「エミュレータ」内部のLinuxRoot権限でアクセスし、「HelloWorld.apk」の存在を確認する。
次に「cmdプロンプト」で「adb -s emulator-5554 shell」と入力しエンターする。
apk_13a.png

すると下画像のように「cmdプロンプト」画面が、Linuxの「Shell画面」に切り替わる。
 
(注意) ここからはLinuxの知識が必要となる。Linuxの経験のない初心者は、Linuxコマンド操作の基礎を学ばれることを望む。
「shell 画面」になると「」が表示。「」は管理者権限 = Root権限がある事を意味し、「ファイル表示」や「インストール・アンインストール」等、管理者としての様々なコマンド操作が出来る
 ちなみに「$」表示ならばユーザー権限でアクセスしている事になる。

apk_13b.png

「pwd」をエンターすると「/」と表示される。「 / 」はRootの意味で、カーソル位置が現在Rootにある事を意味する。

apk_13c.png

チェンジ・ディレクトリー「cd」命令で、(下画像:左)のように入力・エンターすると、
apk_13d.png

カーソルは「 / = Root」から「 data 」へ移動し、さらに「 app 」へ移動した、と表示(下画像:右)。
 apk_13e.png

本当に「app」
に移動したのかを確認する為に、「 pwd 」コマンドを使って「現在位置を確認する。「pwd」を打ちエンターする。
apk_13f.png

結果「 /data/app 」と表示され、現在位置が「app」ディレクトリである事が分った。
 apk_13g.png

次に「app」ディレクトリーに「HelloWorld.apk」が存在するか?確認して見よう。
ls 」命令で、現ディレクトリーに存在するファイルを表示する。「 ls -a 」命令は隠しファイルも表示する。
(??)「HelloWorld.apk」とインストールしたのに、「kr.co.wikibook.Hello.world-1.apk」が表示されている。なぜか?これは確認中!
上記の確認結果→「インストール」によって、Eclipse にあった「HelloWorld.apk」は、下画像「エミュレータ」の「/data/app/」に「kr.co.wikibook.hello.world-1.apk」というパッケージ名で保存されるのであり、「HelloWorld.apk」がそのままのファイル名で「エミュレータ」にインストールされる訳ではないようだ。
 さて、「エミュレータ」内のこの「kr.co.wikibook.hello.world-1.apk」がパッケージなら、そのファイル構成がどうなっているか?調べたい。
上記の確認結果→「akpファイル」の中は簡単に見れないようだ、ここ→http://www.moongift.jp/2011/06/20110601-3/  を見るとその為の特別の努力がなされている。
 従って、ここではこれ以上の追求はしないことにする。

apk_13h.png