diff --git a/Android.mk b/Android.mk index 9c5773fd8ef5c..388840b802d1e 100644 --- a/Android.mk +++ b/Android.mk @@ -444,7 +444,8 @@ LOCAL_DROIDDOC_OPTIONS:= \ $(framework_docs_LOCAL_DROIDDOC_OPTIONS) \ $(web_docs_sample_code_flags) \ -toroot / \ - -hdf android.whichdoc online + -hdf android.whichdoc online \ + -hdf template.showLanguageMenu true LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR:=build/tools/droiddoc/templates-sdk LOCAL_DROIDDOC_CUSTOM_ASSET_DIR:=assets-sdk diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs index 17fc85fff062c..21271872739dd 100644 --- a/docs/html/guide/guide_toc.cs +++ b/docs/html/guide/guide_toc.cs @@ -1,84 +1,175 @@ + diff --git a/docs/html/images/menu_design/ContextMenuDiagram.png b/docs/html/images/menu_design/ContextMenuDiagram.png new file mode 100644 index 0000000000000..06678c7598422 Binary files /dev/null and b/docs/html/images/menu_design/ContextMenuDiagram.png differ diff --git a/docs/html/images/menu_design/ContextMenuViewContactDiagram.png b/docs/html/images/menu_design/ContextMenuViewContactDiagram.png new file mode 100644 index 0000000000000..dcee98104a091 Binary files /dev/null and b/docs/html/images/menu_design/ContextMenuViewContactDiagram.png differ diff --git a/docs/html/images/menu_design/MenuDiagram.png b/docs/html/images/menu_design/MenuDiagram.png new file mode 100644 index 0000000000000..543328a5e8030 Binary files /dev/null and b/docs/html/images/menu_design/MenuDiagram.png differ diff --git a/docs/html/images/menu_design/TaskFlowDiagram.png b/docs/html/images/menu_design/TaskFlowDiagram.png new file mode 100644 index 0000000000000..0157132b8d711 Binary files /dev/null and b/docs/html/images/menu_design/TaskFlowDiagram.png differ diff --git a/docs/html/images/menu_design/TextFieldContextMenuDiagram.png b/docs/html/images/menu_design/TextFieldContextMenuDiagram.png new file mode 100644 index 0000000000000..b23a7da48c1cd Binary files /dev/null and b/docs/html/images/menu_design/TextFieldContextMenuDiagram.png differ diff --git a/docs/html/index.jd b/docs/html/index.jd index cd55b2196189c..e3f2ec409cf94 100644 --- a/docs/html/index.jd +++ b/docs/html/index.jd @@ -33,7 +33,7 @@ home=true - +
@@ -137,15 +137,6 @@ home=true 'desc':"

If you're writing an Android application that uses Google Maps (with MapView), you must register your application to obtain a Maps API Key. Without the key, your maps application will not work on Android devices. Obtaining a key requires just a couple of steps.

Learn more »

" }, - 'market': { - 'layout':"imgTop", - 'icon':"market-small.png", - 'name':"Android Market", - 'img':"market-large.png", - 'title':"", - 'desc': "

Android Market helps you get your applications into the hands of users. The beta version of Market is now open and you can begin sharing your applications with users of the first Android-powered phone, the T-Mobile G1.

Publish your Android app on Market »

" - }, - 'devphone': { 'layout':"imgLeft", 'icon':"devphone-small.png", diff --git a/docs/html/intl/ja/community/index.jd b/docs/html/intl/ja/community/index.jd new file mode 100644 index 0000000000000..e0a645b2280cd --- /dev/null +++ b/docs/html/intl/ja/community/index.jd @@ -0,0 +1,108 @@ +community=true +page.title=コミュニティ +@jd:body + +
+

コミュニティ

+

Android デベロッパー コミュニティへようこそ。コミュニティでのディスカッションにぜひ参加してください。投稿する前に、コミュニティ ガイドラインが記載されているグループの趣意をお読みください。

+ +

注: Android ソース コード(アプリケーション開発ではなく)に関するディスカッションは、オープンソース プロジェクトのメーリング リスト(英語)を参照してください。

+ +

目次

+
    +
  1. 質問を投稿する前に
  2. +
  3. アプリケーション デベロッパー メーリング リスト
  4. +
  5. メーリング リストにメールを使用
  6. +
  7. IRC の使用
  8. +
+ +

質問を投稿する前に

+

投稿を作成する前に、下記をお試しください:

+ +
    +
  1. よくある質問を参照します。Android アプリケーションの開発について非常に一般的な質問が、この一覧に記載されており、頻繁に更新されています。
  2. +
  3. Android のメイン サイトの検索バー(このページの上部にあるのと同じもの)に、調べたいキーワードを入力してください。この検索は、サイト、ドキュメント、ブログに含まれるすべてのコンテンツの他に、すべてのグループで以前行われたすべてのディスカッションを網羅しています。誰か他の人が、以前にも同じ問題に遭遇した可能性は大いにあります。
  4. +
  5. メーリング リストのアーカイブを検索して、同じ質問に関するディスカッションが既に存在しないか調べてください。 +
  6. +
+ +

質問への答えが見つからない場合、コミュニティで質問することをおすすめします。投稿する際は、次の手順に従ってください。 +

    +
  1. コミュニティ ガイドラインが記載されているAndroid メーリングリストの趣意をお読みください。 +
  2. +
  3. 質問に最適なメーリング リストを選択してください。後述するように、デベロッパー向けのメーリング リストは何種類かに分かれています。
  4. +
  5. + 質問の内容を明確に。明確な質問は、回答者と、将来情報を探そうとする人の双方にとって有益です。
  6. +
  7. 投稿は詳しく書いてください。回答者の人たちが問題を理解するのに役立ちます。コードやログのスニペット、スクリーンショットへのリンクを含めることも有用です。質問をわかりやすく表現するための詳しいガイドラインは、賢い質問のしかた(英語)をご覧ください。 +
  8. +
+ + +

アプリケーション デベロッパー メーリング リスト

+ + + + +

メーリング リストにメールを使用

+

Google グループ のサイトを使用する代わりに、メール クライアントを使用して、メーリング リストに投稿することも可能です。

+

Google グループのサイトを使用せずに、グループに登録するには、上記の「メールで登録」のリンクを使用します。

+

メーリング リストへの投稿をメールで受信するように設定する方法は、次のとおりです:

+ +
  1. Google グループ サイトから、グループにログインします。たとえば android-framework グループには http://groups.google.com/group/android-framework?hl=ja にアクセスします。
  2. +
  3. 右側の [メンバーステータスを編集] をクリックします。
  4. +
  5. [このグループの閲覧方法] で、メール オプションのいずれかを選択します。
  6. +
+ +

IRC の使用

+

Android コミュニティは irc.freenode.net サーバーの #android チャンネルを使用しています。 +

+ + + + + + + +
diff --git a/docs/html/intl/ja/guide/basics/what-is-android.jd b/docs/html/intl/ja/guide/basics/what-is-android.jd new file mode 100644 index 0000000000000..89558a0046ff2 --- /dev/null +++ b/docs/html/intl/ja/guide/basics/what-is-android.jd @@ -0,0 +1,81 @@ +page.title=Android とは +@jd:body + +

Android は、オペレーティング システム、ミドルウェア、主要なアプリケーションを含む、携帯電話向けのソフトウェア スタックです。Android SDK は、Java プログラミング言語を使用した Android プラットフォーム向けのアプリケーションの開発を始めるのに必要なツールと API を提供します。

+ +

特長

+ + + + +

Android アーキテクチャ

+ +

Android オペレーティング システムの主なコンポーネントを次の図に示します。それぞれのセクションには、各コンポーネントの詳細が記述されています。

+ +

Android システム アーキテクチャ

+ + +

アプリケーション

+ +

Android には、メール クライアント、SMS プログラム、カレンダー、地図、ブラウザ、連絡先などのコア アプリケーションのセットが付属しています。アプリケーションはすべて Java プログラミング言語で作成されています。

+ + +

アプリケーション フレームワーク

+ +

デベロッパーは、コア アプリケーションによって使用されるフレームワーク API のすべてにアクセスできます。アプリケーション アーキテクチャは、コンポーネントの再利用を容易にするように設計されています。このため、どのアプリケーションも機能を公開し、別のアプリケーションがその機能を使用することが可能です(ただし、フレームワークによって実施されるセキュリティ制限の対象となります)。このメカニズムによって、ユーザーによるコンポーネントの入れ替えも可能です。

+ +

アプリケーションの基盤となるのは、次のサービスとシステムのセットです: +

+ +

アプリケーションの簡単な説明と詳細については、Notepad チュートリアルをご覧ください。

+ + +

ライブラリ

+ +

Android には C/C++ ライブラリのセットが含まれており、Android システムのさまざまなコンポーネントにおいて使用されています。これらの機能は、Android アプリケーション フレームワークを介して、デベロッパーに公開されています。コア ライブラリの一部を次に示します:

+ + + + +

Android ランタイム

+ +

Android には、Java プログラミング言語のコア ライブラリで利用できる機能のほとんどを提供するコア ライブラリのセットが含まれています。

+ +

Android の各アプリケーションは、独自のプロセスとして実行され、Dalvik 仮想マシン(VM)の独自のインスタンスにより実行されます。Dalvik は、携帯電話で複数の VM を効率よく実行できるように設計されています。Dalvik VM は、メモリの使用量を最小にするように最適化された Dalvik 実行可能(.dex)フォーマットのファイルを実行します。この VM はレジスタベースであり、Java 言語コンパイラによりコンパイルされた組み込みの「dx」ツールにより .dex フォーマットに変換されたクラスを実行します。

+ +

Dalvik VM は、Linux カーネルを使用して、スレッディングや低レベルのメモリ管理などの基本機能を実行しています。

+ + + +

Linux カーネル

+ +

Android は、Linux バージョン 2.6 を使用して、セキュリティ、メモリ管理、プロセス管理、ネットワーク スタック、ドライバ モデルなどのコア システム サービスを提供します。このカーネルは、ハードウェアと他のソフトウェア スタックの間の抽象化レイヤーとしても機能します。

diff --git a/docs/html/intl/ja/guide/developing/eclipse-adt.jd b/docs/html/intl/ja/guide/developing/eclipse-adt.jd new file mode 100644 index 0000000000000..26cae54264f4f --- /dev/null +++ b/docs/html/intl/ja/guide/developing/eclipse-adt.jd @@ -0,0 +1,243 @@ +page.title=Eclipse 内で ADT を使用 +@jd:body + +
+
+

このドキュメントの内容

+
    +
  1. Android プロジェクトの作成
  2. +
  3. アプリケーションの実行 +
      +
    1. AVD の作成
    2. +
    3. アプリケーションの実行
    4. +
    +
  4. +
  5. カスタム起動構成の作成
  6. +
  7. アプリケーションの署名設定
  8. +
  9. Eclipse のヒント
  10. +
+
+ + +

「Android Development Tools (ADT) plugin for Eclipse」は、Eclipse 統合開発環境に強力な拡張機能を追加します。拡張機能により、Android アプリケーションの作成とデバッグが容易になります。Eclipse を使用している場合、ADT プラグインを組み込むことで、Android アプリケーションを驚くほど効率よく開発できるようになります:

+ + + +

ADT を組み込んだ Eclipse 総合開発環境で Android アプリケーションの開発を始めるには、最初に Eclipse 総合開発環境をダウンロードしてから、ADT プラグインをダウンロードしてインストールする必要があります。そのためには、Eclipse 用 ADT プラグインのインストールに記載されている手順どおりに操作します。

+

バージョン 0.9 より前の ADT を使用してアプリケーションを既に開発中の場合は、必ず最新バージョンにアップグレードしてから続行してください。Eclipse ADT プラグインをアップデートするためのガイドをご覧ください。

+

注: このガイドでは、ADT プラグインの最新バージョンを使用していることを前提としています。説明の大半は、以前のバージョンにも当てはまりますが、以前のバージョンを使用している場合は、このドキュメントのオンライン版ではなく、SDK パッケージに付属された資料内の同ドキュメントをご覧ください。

+ + +

Android プロジェクトの作成

+ +

ADT プラグインが提供する新規プロジェクト ウィザードを使用すると、簡単に Android プロジェクトを新規作成(または既存のコードから作成)できるようになります。新しいプロジェクトを作成するには:

+ +
    +
  1. [ファイル(File)] > [新規(New)] > [プロジェクト(Project)] を選択します。
  2. +
  3. [Android] > [Android プロジェクト(Android Project)] を選択し、[次へ(Next)] をクリックします。
  4. +
  5. プロジェクトの内容を選択します: + +
  6. +
  7. [完了(Finish)] をクリックします。
  8. +
+ +

ヒント: 新規プロジェクト ウィザードは、ツールバーの [新規(New)] アイコンからも開始できます。

+ +

新規プロジェクト ウィザードを完了すると、ADT は新しいプロジェクトに次のフォルダとファイルを作成します:

+
+
src/
+
スタブ Activity Java ファイルが含まれます。アプリケーションの他のすべての Java ファイルも含まれます。
+
<Android Version>/(例: Android 1.1/)
+
アプリケーションのビルド対象となる android.jar ファイルが含まれます。これは、新規プロジェクト ウィザードで選択したビルド ターゲットによって決まります。
+
gen/
+
ADT により生成された Java ファイル(R.java ファイル、AIDL ファイルから作成されたインターフェースなど)がこのフォルダに含まれます。
+
assets/
+
このフォルダは空です。未加工のアセット ファイルの保存に使用できます。Resources and Assetsをご覧ください。
+
res/
+
アプリケーションのリソース用(描画ファイル、レイアウト ファイル、文字列値など)のフォルダです。Resources and Assetsをご覧ください。
+
AndroidManifest.xml
+
このプロジェクトの Android マニフェストです。The AndroidManifest.xml Fileをご覧ください。
+
default.properties
+
このファイルには、ビルド ターゲットのようなプロジェクトの設定が含まれます。このファイルはプロジェクトに不可欠なので、ソース リビジョン管理システムで管理する必要があります。このファイルを手動で編集しないでください。プロジェクトのプロパティを編集するには、プロジェクト フォルダを右クリックして、[プロパティ(Properties)] を選択します。
+
+ + +

アプリケーションの実行

+ +

注意してください。アプリケーションを Android エミュレータで実行する前に、Android 仮想デバイス(AVD)を作成する必要があります。AVD では、エミュレータで使用する Android プラットフォームを指定します。詳しくは Android 仮想デバイス のドキュメントをご覧ください。ただし、すぐにアプリケーションを実行したい場合は、次の簡単な手順に従って AVD を作成してください。

+ +

携帯端末の実機でのみアプリケーションを実行する場合は、AVD は必要ありません。この場合のアプリケーションの実行について詳しくは、Developing On a Device をご覧ください。

+ +

AVD の作成

+ +

詳しい説明はこのドキュメントの範囲外なので、AVD を作成する基本的な手順のみをここに示します:

+ +
    +
  1. コマンドライン(たとえば Windows では「コマンド プロンプト」アプリケーション、Mac/Linux では「ターミナル」)を開き、SDK パッケージの tools/ ディレクトリに移動します。
  2. +
  3. 最初に、配備ターゲットを選択する必要があります。選択可能なターゲットを表示するには、次のコマンドを実行します: +
    android list targets
    +

    次のように選択可能な Android ターゲットのリストが表示されます:

    +
    +id:1
    +    Name: Android 1.1
    +    Type: platform
    +    API level: 2
    +    Skins: HVGA (default), HVGA-L, HVGA-P, QVGA-L, QVGA-P
    +id:2
    +    Name: Android 1.5
    +    Type: platform
    +    API level: 3
    +    Skins: HVGA (default), HVGA-L, HVGA-P, QVGA-L, QVGA-P
    +
    +

    アプリケーションを実行する Android プラットフォームに一致するターゲットを探します。id の整数を書き留めておき、次のステップで使用します。

    +
  4. +
  5. 選択した配備ターゲットを使用して、新しい AVD を作成します。次のコマンドを実行します: +
    android create avd --name <your_avd_name> --target <targetID>
    +
  6. カスタム ハードウェア プロファイルを作成するかどうかの問い合わせがあります。「yes」と答えると、携帯端末ハードウェアのさまざまな要素を定義するための一連のプロンプトが開始されます(空白のまま入力すると、かっこ内に表示されたデフォルト値が使用されます)。または、Enter キーを押すと、すべてデフォルト値が使用されます(「no」がデフォルトです)。
  7. + +
+ +

これで AVD が作成できました。次のセクションでは、エミュレータでアプリケーションを起動する際に、AVD がどのように使用されるかについて説明します。

+ +

AVD の作成と管理について詳しくは、Android 仮想デバイス のドキュメントをご覧ください。

+ + +

アプリケーションの実行

+ +

注: アプリケーションを実行する前に、アプリケーションのビルド ターゲットを満たすターゲットを指定した AVD を必ず作成してください。ビルド ターゲットの要件を満たす AVD が見つからない場合、それを示すコンソール エラーが表示され、起動は中止されます。

+ +

アプリケーションを実行(またはデバッグ)するには、Eclipse のメイン メニューで [実行(Run)] > [実行(Run)](または [実行(Run)] > [デバッグ(Debug)])を選択します。ADT プラグインはそのプロジェクトのデフォルトの起動構成を自動的に作成します。

+ +

アプリケーションの実行またはデバッグを選択すると、Eclipse では以下が行われます:

+ +
    +
  1. プロジェクトがコンパイルされます(最後のビルド以降、変更があった場合)。
  2. +
  3. デフォルトの起動構成が作成されます(そのプロジェクトでまだ作成されていない場合)。
  4. +
  5. エミュレータまたは端末(起動構成で定義された配備ターゲットに基づきます)にアプリケーションがインストールされ、起動されます。 +

    デフォルトでは、Android アプリケーションの起動構成ではデバイス ターゲットの選択に「自動ターゲット」モードを使用します。自動ターゲット モードでの配備ターゲットの選択について詳しくは、下記の自動または手動のターゲット モードをご覧ください。

    +
  6. +
+ +

デバッグの場合は、アプリケーションは「デバッガ待ち」モードで開始されます。デバッガの接続後、Eclipse はデバッグ パースペクティブを開きます。

+ +

プロジェクトで使用する起動構成を設定または変更するには、構成マネージャを使用します。詳しくは起動構成の作成をご覧ください。

+ + +

起動構成の作成

+ +

起動構成では、実行するプロジェクト、開始する Activity、使用するエミュレータ オプションなどを指定します。プロジェクトを初めて Android アプリケーションとして実行すると、ADT は自動的に起動構成を作成します。デフォルトの起動構成は、デフォルトのプロジェクト アクティビティを起動し、自動ターゲット モードで端末を選択します(優先 AVD が指定されていない場合)。デフォルト設定がプロジェクトに適さない場合は、起動構成をカスタマイズするか、新規作成することができます。

+ +

起動構成を作成または変更するには、使用している Eclipse のバージョンに合わせて、次の手順どおりに操作します:

+ +
    +
  1. 構成マネージャを開きます。 + +
  2. +
  3. [Android アプリケーション(Android Application)] 項目を展開し、新しい構成を作成するか、既存の構成を開きます。 + +
  4. +
  5. 必要に応じて起動構成の設定を変更します。 +

    [ターゲット(Target)] タブでは、アプリケーションを実行する AVD の選択を手動(Manual)モードで行うか、自動(Automatic)モードで行うかを考えます(次の自動または手動のターゲット モードのセクションをご覧ください)。

    +
  6. +
+ + +

自動または手動のターゲット モード

+ +

デフォルトでは、起動構成には、自動ターゲット モードで選択された AVD が使用されます。このモードでは、ADT は次の方法により、アプリケーションの AVD を選択します:

+ +
    +
  1. 既に実行中の端末またはエミュレータがあり、その AVD 構成がアプリケーションのビルド ターゲットの要件を満たす場合は、その端末またはエミュレータにアプリケーションがインストールされ、実行されます。
  2. +
  3. 端末またはエミュレータが複数実行中の場合は、そのうちのビルド ターゲットの要件を満たすものが「デバイス選択(Device Chooser)」に表示されるので、その中から選択できます。
  4. +
  5. ビルド ターゲットの要件を満たす実行中の端末やエミュレータがない場合は、ADT は使用可能な AVD を調べます。ビルド ターゲットの要件を満たす AVD があれば、その AVD を使用して新しいエミュレータが起動され、そこにアプリケーションがインストールされ、実行されます。
  6. +
  7. 上記を満たすものがない場合は、アプリケーションは実行されず、ビルド ターゲット要件を満たす既存の AVD がないというエラーがコンソールに表示されます。
  8. +
+ +

ただし起動構成で「優先 AVD」が選択されている場合は、アプリケーションは常にその AVD に配備されます。その AVD がまだ実行されていない場合は、新しいエミュレータが起動されます。

+

起動構成が手動モードの場合は、アプリケーションを実行するたびに、「Device Chooser」が表示されるので、使用する AVD を選択できます。

+ +

アプリケーションへの署名

+ +

Android アプリケーションの開発を始めると、Android アプリケーションをシステムがエミュレータや実機にインストールする前に、どの Android アプリケーションにもデジタル署名が必要であることがわかります。署名には、デバッグ キーを使用する方法(エミュレータや開発用端末ですぐにテストする場合)と、非公開キーを使用する方法(アプリケーションを配布する場合)の 2 つがあります。

+

ADT プラグインでは、アプリケーションをエミュレータや開発用端末にインストールする前に、.apk ファイルがデバッグ キーを使用して署名されるので、開発を早めることができます。つまり、独自の非公開キーを生成する必要がなく、Eclipse からアプリケーションをすぐに実行できます。Keytool に ADT がアクセスできれば、デベロッパーが特に操作する必要はありません。ただし、アプリケーションを公開する場合は、SDK ツールが生成するデバッグ キーではなく、独自の非公開キーを使用してアプリケーションに署名する必要があります。

+

アプリケーションへの署名をご覧ください。Android でのアプリケーションへの署名と、Android アプリケーション デベロッパーにとっての署名の意味について説明しています。このドキュメントには、ADT のエクスポート ウィザードを使用してアプリケーションをエクスポートし、署名するためのガイドも含まれています。

+ +

Eclipse のヒント

+ +

Eclipse での任意の Java コードの実行

+ +

Eclipse のブレークポイントで中断したとき、任意のコードを実行できます。たとえば「zip」という文字列引数を使用する関数では、パッケージと呼び出しクラスのメソッドに関する情報を取得できます。任意の静的メソッドを呼び出すこともできます。たとえば android.os.Debug.startMethodTracing() と入力すると、dmTrace が起動されます。

コードの実行ウィンドウを開き、メイン メニューから [ウィンドウ(Window)] > [ビューの表示(Show View)] > [表示(Display)] を選択すると、簡単なテキスト エディタである [表示(Display)] ウィンドウが開きます。式を入力し、そのテキストをハイライト表示し、'J' アイコンをクリックして(または Ctrl+Shift+D キーを押して)そのコードを実行します。コードは、選択したスレッド(ブレークポイントまたはシングルステップ ポイントで停止している必要があります)のコンテキストで実行されます(手動でスレッドを強制停止した場合は、シングルステップを 1 回実行する必要があります。スレッドが Object.wait() 状態の場合は、上記を実行できません)。

現在、ブレークポイントで中断している場合は、ソース コードの一部をハイライト表示し、Ctrl+Shift+D キーを押して実行することができます。

同じスコープ内のテキストの一部をハイライト表示するには、Alt+Shift+上矢印キーを押して、より広い範囲の閉じたブロック(複数可)を選択するか、下矢印キーを押して選択範囲を小さくすることができます。

Eclipse で [表示(Display)] ウィンドウを使用した入力とその応答のサンプルを次に示します。

+ + + + + + + + + + + + + + + + + + +
入力応答
zip(java.lang.String) + /work/device/out/linux-x86-debug/android/app/android_sdk.zip
zip.endsWith(".zip")(boolean) true
zip.endsWith(".jar")(boolean) false
+

デバッガではなくスクラップブック ページを使用しても、任意のコードを実行できます。Eclipse ドキュメントで「スクラップブック」を検索してください。

+ +

DDMS の手動による実行

+ +

ADT プラグインを使用するデバッグをおすすめしますが、手動で DDMS を実行し、ポート 8700 でデバッグするように Eclipse を設定することができます(注: 最初に必ず DDMS を起動してください)。

+ + diff --git a/docs/html/intl/ja/guide/developing/other-ide.jd b/docs/html/intl/ja/guide/developing/other-ide.jd new file mode 100644 index 0000000000000..2983da2752aff --- /dev/null +++ b/docs/html/intl/ja/guide/developing/other-ide.jd @@ -0,0 +1,271 @@ +page.title=その他の統合開発環境 +@jd:body + +
+
+

このドキュメントの内容

+
    +
  1. Android プロジェクトの作成
  2. +
  3. アプリケーションへの署名の準備
  4. +
  5. アプリケーションのビルド +
      +
    1. デバッグ モードでのビルド
    2. +
    3. リリース モードでのビルド
    4. +
    +
  6. +
  7. アプリケーションの実行
  8. +
  9. アプリケーションへのデバッガの接続
  10. +
+ +

関連項目

+
    +
  1. android ツール
  2. +
  3. Android Emulator
  4. +
  5. Android Debug Bridge
  6. +
+
+
+ +

Android アプリケーションの開発では、ADT プラグイン搭載の Eclipse を使用する開発方法が推奨されています。ADT プラグインは、編集、ビルド、デバッグ、.apk パッケージング、署名の機能を統合開発環境に直接統合して提供します。

+ +

しかし Eclipse の代わりに IntelliJ のような別の総合開発環境や Emacs のような基本的なエディタを使用した開発も可能です。SDK には Android プロジェクトのセットアップ、ビルド、デバッグ、および配布用パッケージ作成に必要なすべてのツールが含まれています。このドキュメントでは、こうしたツールの使用方法について説明します。

+ + +

主要なツール

+ +

Eclipse 以外の統合開発環境やエディタで開発する際には、次の Android SDK ツールについて知っておく必要があります:

+ +
+
android
+
Android プロジェクトの作成/更新、AVD の作成/移動/削除のために使用します。
+
Android Emulator
+
Android のエミュレーション プラットフォームで Android アプリケーションを実行するために使用します。
+
Android Debug Bridge
+
エミュレータまたは接続先の端末とのインターフェースとして使用します(アプリケーションのインストール、端末のシェル、コマンドの実行などに使用)。 +
+
+ +

上記のツールに加えて、SDK に含まれている次のオープンソースとおよびサードパーティ製のツールを使用します:

+ +
+
Ant
+
Android プロジェクトをコンパイルし、インストール可能な .apk ファイルにビルドするために使用します。
+
Keytool
+
.apk ファイルに署名するために使用するキーストアと非公開キーを生成します。
+
Jarsigner(または同様の署名ツール)
+
Keytool で生成した非公開キーを使って .apk ファイルに署名するために使用します。
+
+ +

下記のトピックでは、必要な箇所でそれぞれの各ツールを説明しています。さらに高度な操作については、ツールのそれぞれのドキュメントをご覧ください。

+ + +

Android プロジェクトの作成

+ +

Android プロジェクトを作成するには、android ツールを使用する必要があります。新しいプロジェクトを android で作成すると、デフォルトのアプリケーション ファイル、スタブ ファイル、構成ファイル、ビルド ファイルを含むプロジェクト ディレクトリが生成されます。

+ + +

新しいプロジェクトの作成

+ +

新しいプロジェクトを開始する場合、android create project コマンドを使用すると、必要なファイルとフォルダがすべて生成されます。

+ +

新しい Android プロジェクトを作成するには、コマンドラインを開き、SDK の tools/ ディレクトリに移動して、次を実行します:

+
+android create project \
+--target <targetID> \
+--path /path/to/your/project \
+--activity <your_activity_name> \
+--package <your_package_namespace>
+
+ + + +

次に例を示します:

+
+android create project \
+--target 1 \
+--path ./myProject \
+--activity MyActivity \
+--package com.example.myproject
+
+ +

このツールは次のファイルとディレクトリを生成します:

+ + + +

プロジェクトを作成すると、開発を始める準備ができます。開発のために、プロジェクト フォルダをどこにでも移動できますが、アプリケーションをエミュレータに送信するために(方法については後述します)、SDK の tools/ ディレクトリにある Android Debug Bridge(adb)を使用する必要があります。そのためにプロジェクト ソリューションと tools/ フォルダ間でアクセスする必要があります。

+ +

注: SDK ディレクトリは移動させないでください。移動するとビルド スクリプトが機能しなくなります(ビルド スクリプトをもう一度機能させるには、手動でスクリプトを更新して、SDK の新しいロケーションを反映させる必要があります)。

+ + +

プロジェクトの更新

+ +

Android SDK の古いバージョンからプロジェクトをアップグレードする場合や、既存のコードから新しいプロジェクトを作成する場合は、android update project コマンドを使って新しい開発環境に合わせてプロジェクトを更新します。このコマンドを使って(--target オプションにより)、既存のプロジェクトのビルド ターゲットを修正することもできます。android ツールは、指定された Android プロジェクトの必要に応じて、欠落している、または更新を必要としているファイルやフォルダの生成を行います。生成物は前セクションに記述されたリストどおりです。

+ +

既存の Android プロジェクトを更新するには、コマンドラインを開き、SDK の tools/ ディレクトリに移動します。ここで次を実行します:

+
+android update project --target <targetID> --path path/to/your/project/
+
+ + + +

次に例を示します:

+
+android update project --target 2 --path ./myProject
+
+ + +

アプリケーションへの署名の準備

+ +

Android アプリケーションの開発を始めると、Android アプリケーションをエミュレータや端末上のシステムにインストールする前に、どの Android アプリケーションにもデジタル署名が必要であることがわかります。解決策としては「デバッグ キー」を使用する方法(エミュレータや開発用端末上ですぐにテストする場合)と、非公開キーを使用する方法(アプリケーションを配布する場合)の 2 つがあります。

+ +

Android のビルド ツールを使用すると、ビルド時にデバッグキーを使用して .apk ファイルに自動的に署名できるので、スムーズな開発が可能です。つまり、独自の非公開キーを生成しなくても、アプリケーションをコンパイルして、エミュレータにインストールすることができます。ただし、アプリケーションを公開する場合は、SDK ツールが生成したデバッグ キーではなく、独自の非公開キーを使用してアプリケーションに署名する必要があります。

+ +

アプリケーションへの署名をご覧ください。Android でのアプリケーションへの署名と、Android アプリケーション デベロッパーにとっての署名の意味について説明しています。

+ + + +

アプリケーションのビルド

+ +

アプリケーションのビルドには、アプリケーションをテスト/デバッグするための「デバッグ モード」と、リリース用の最終パッケージをビルドするための「リリース モード」の 2 つがあります。前のセクションで説明したように、アプリケーションをエミュレータや端末にインストールする前に、アプリケーションに署名する必要があります。

+ +

デバッグ モードとリリース モードのどちらでビルドしているかに関係なく、プロジェクトをコンパイルし、ビルドするには Ant ツールが必要です。これにより、エミュレータや端末にインストールする .apk ファイルが作成されます。デバッグ モードでビルドすると、.apk ファイルは SDK ツールによりデバッグ キーを使用して自動的に署名されるので、インストールの準備がすぐに整います(ただし、エミュレータまたは接続された開発用端末上にのみインストールできます)。リリース モードでビルドされた .apk ファイルは署名されないので、Keytool と Jarsigner を使って、独自の非公開キーで手動で署名する必要があります。

+ +

アプリケーションへの署名の内容をよく理解する必要があります。また、アプリケーションをリリースしてエンドユーザーと共有することを計画している場合は非常に重要です。「アプリケーションへの署名」では、非公開キーを生成し、それを使用して .apk ファイルに署名する手順について説明しています。ただし、開発を始めたばかりであれば、デバッグ モードでビルドすることにより、エミュレータまたは独自の開発用端末でアプリケーションをすぐに実行できます。

+ +

Ant をお持ちでない場合は、Apache Ant ホームページから入手してください。Ant をインストールして、必ず実行可能パスに置きます。Ant を実行する前に、「JAVA_HOME」環境変数を宣言して JDK のインストールパスを指定する必要があります。

+ +

注: Windows 上に JDK をインストールすると、デフォルトでは「Program Files」ディレクトリにインストールされます。このパス名にはスペースが含まれるために、ant は実行されません。この問題は、JAVA_HOME 変数を次のように指定することで解決できます: set JAVA_HOME=c:\Prora~1\Java\ ただし最も簡単な解決策は、JDK をスペースを含まないディレクトリ(例: c:\java\jdk1.6.0_02)にインストールすることです。

+ + +

デバッグ モードでのビルド

+ +

アプリケーションのテストとデバッグをすぐに行いたい場合は、デバッグ モードでアプリケーションをビルドし、すぐにエミュレータにインストールすることができます。デバッグ モードでは、ビルド ツールはデバッグ キーを使用してアプリケーションに自動的に署名します。ただしアプリケーションはリリース モードでテストすることも可能であり、リリース モードでのテストは推奨されています。デバッグ モードは、手動でアプリケーションに署名しなくても、アプリケーションを実行できるようにします。

+ +

デバッグ モードでビルドするには:

+ +
    +
  1. コマンドラインを開き、プロジェクトのルート ディレクトリに移動します。
  2. +
  3. Ant を使用してプロジェクトをデバッグ モードでコンパイルします: +
    ant debug
    +

    Android アプリケーションの .apk ファイルがプロジェクトの bin/ ディレクトリに、<your_DefaultActivity_name>-debug.apk という名前で作成されます。このファイルはデバッグ キーで署名済みです。

    +
  4. +
+ +

ソース ファイルまたはリソースを変更するたびに、アプリケーションの最新バージョンをパッケージングするために、Ant を再度実行する必要があります。

+ +

アプリケーションをエミュレータにインストールして実行する方法については、下記のアプリケーションの実行セクションをご覧ください。

+ + +

リリース モードでのビルド

+ +

アプリケーションをエンドユーザーにリリースして配布する準備ができたら、アプリケーションをリリース モードでビルドする必要があります。リリース モードでビルドした後、最終的な .apk ファイルを使用して追加のテストとデバッグをすることをおすすめします。

+ +

リリース モードでビルドするには:

+ +
    +
  1. コマンドラインを開き、プロジェクトのルート ディレクトリに移動します。
  2. +
  3. Ant を使用してプロジェクトをリリース モードでコンパイルします: +
    ant release
    +

    これにより Android アプリケーションの .apk ファイルがプロジェクトの bin/ ディレクトリに、<your_DefaultActivity_name>.apk という名前で作成されます。

    +

    注: .apk ファイルはこの時点では署名されていません。つまり非公開キーで署名するまで、エミュレータや端末にインストールすることはできません。

    +
  4. +
+ +

リリース モードではアプリケーションを署名せずにビルドを行います。このため、アプリケーションをエンドユーザーに配布するためには、次に非公開キーを使用して署名を行う必要があります。この手順を行う方法については、Signing Your Applicationをご覧ください。

+ +

非公開キーを使用してアプリケーションに署名すると、アプリケーションをエミュレータや端末にインストールできるようになります。これについては次のアプリケーションの実行のセクションで説明します。次の方法でウェブ サーバーから端末にインストールすることもできます。署名した APK をウェブサイトにアップロードし、Android ウェブブラウザでその .apk の URL を読み込んでアプリケーションをダウンロードし、インストールを開始します(端末上では、[設定] > [アプリケーション] を選択し、[提供元不明のアプリ] をオンにする必要があります)。

+ + +

アプリケーションの実行

+ +

端末のハードウェア以外でアプリケーションを実行する場合は、アプリケーションのインストール先となるエミュレータを起動する必要があります。Android エミュレータのインスタンスは、特有の端末構成に合わせて設定された、特定の Android プラットフォームを実行しています。このプラットフォームと構成は、Android 仮想デバイス(AVD)で定義されます。そのためエミュレータを起動する前に、AVD を定義しなくてはいけません。

+ +

端末ハードウェアでアプリケーションを実行する場合は、代わりに、端末のでの開発 をご覧ください。

+ +
    +
  1. AVD の作成 +
      +
    1. コマンドラインを開き、SDK パッケージの tools/ ディレクトリに移動します。
    2. +
    3. 最初に、「配備ターゲット」を選択する必要があります。選択可能なターゲットを表示するには、次のコマンドを実行します: +
      android list targets
      +

      次のように選択可能な Android ターゲットのリストが表示されます:

      +
      +id:1
      +    Name: Android 1.1
      +    Type: platform
      +    API level: 2
      +    Skins: HVGA (default), HVGA-L, HVGA-P, QVGA-L, QVGA-P
      +id:2
      +    Name: Android 1.5
      +    Type: platform
      +    API level: 3
      +    Skins: HVGA (default), HVGA-L, HVGA-P, QVGA-L, QVGA-P
      +
      +

      アプリケーションを実行する Android プラットフォームに一致するターゲットを探します。id の番号を書き留めておき、次のステップで使用します。

      +
    4. +
    5. 選択した配備ターゲットを使用して、新しい AVD を作成します: +
      android create avd --name <your_avd_name> --target <targetID>
      +
    6. カスタム ハードウェア プロファイルを作成するかどうかの問い合わせがあります。「yes」と答えると、携帯端末ハードウェアのさまざまな面を定義するための一連の問い合わせがあります(入力を空白のままにすると、かっこ内に表示されたデフォルト値が使用されます)。または、Enter キーを押すと、すべてデフォルト値が使用されます(「no」がデフォルトです)。
    7. + +
    +
  2. + +
  3. エミュレータの起動
  4. +

    SDK の tools/ ディレクトリから、上記で作成した既存の AVD を使用してエミュレータを起動します: +

    emulator -avd <your_avd_name>
    +

    エミュレータのインスタンスが起動し、AVD で定義されたターゲットと構成が実行されます。

    + + +
  5. アプリケーションのインストール +

    SDK の tools/ ディレクトリから .apk をエミュレータにインストールします: +

    adb install /path/to/your/application.apk
    +

    複数のエミュレータが実行中の場合、-s オプションでシリアル番号を指定して、アプリケーションをインストールするエミュレーションを指定する必要があります。次に例を示します:

    +
    adb -s emulator-5554 install /my/project/path/myapp.apk
    +
  6. +
  7. アプリケーションを開く +

    エミュレータで、使用可能なアプリケーションのリストを開き、実行するアプリケーションを探して開きます。

    +
  8. +
+ +

実行するアプリケーションがエミュレータ上にない場合、同じ AVD を指定してエミュレータを再起動してください。Activity を初めてインストールすると、アプリケーション ランチャに表示されず、他のアプリケーションからアクセスできないことがあります。パッケージ マネージャは通常、エミュレータの起動時にしかマニフェストを完全には調べないためです。

+ +

ヒント: 実行中のエミュレータが 1 つしかない場合、1 つの簡単なステップで、アプリケーションをビルドし、エミュレータにインストールすることができます。プロジェクトのルート ディレクトリに移動し、Ant を使用してインストール モードでプロジェクトをコンパイルします(ant install)。これにより、アプリケーションがビルドされ、デバッグ キーにより署名され、現在実行中のエミュレータにインストールされます。現在実行中のエミュレータが複数あると、install コマンドは失敗します。複数のエミュレータからの選択を行うことはできません。

+ +

上記で使用したツールについて詳しくは、次のドキュメントをご覧ください:

+ + + +

アプリケーションへのデバッガの接続

+ +

このセクションでは、画面上でのデバッグ情報(CPU の使用率など)の表示方法や、総合開発環境に接続してエミュレータ上で実行するアプリケーションをデバッグする方法について説明します。

+ +

Eclipse プラグインを使用すると、デバッガへの接続は自動化されます。しかし他の総合開発環境でも、デバッグ ポートをリッスンしてデバッグ情報を受信するように設定することができます:

+
    +
  1. 総合開発環境とエミュレータ間のポート転送サービスとして機能する Dalvik Debug Monitor Server(DDMS)ツールを起動します。
  2. +
  3. エミュレータでオプションのデバッグ構成を設定します。設定には、デバッガ接続まで Activity のアプリケーション起動をブロックするオプションなどが含まれます。エミュレータでの CPU 使用率や画面の更新率の表示のように、これらのデバッグ用オプションの多くは DDMS がなくても使用できます。
  4. +
  5. 総合開発環境を設定して、デバッグ用にポート 8700 に接続します。総合開発環境を設定してデバッグ ポートに接続する をご覧ください。
  6. +
diff --git a/docs/html/intl/ja/guide/index.jd b/docs/html/intl/ja/guide/index.jd new file mode 100644 index 0000000000000..73ca18a4a8a76 --- /dev/null +++ b/docs/html/intl/ja/guide/index.jd @@ -0,0 +1,52 @@ +page.title=デベロッパー ガイド +@jd:body + +

+Android デベロッパー ガイドへようこそ。デベロッパー ガイドは、Android 向けアプリケーション開発における実用的な入門資料です。この資料では、Android の背後にある概念、アプリケーション構築用のフレームワーク、およびAndroid プラットフォーム向けソフトウェアを開発、テスト、公開するためのツールについて説明します。 +

+ +

+デベロッパー ガイドには Android プラットフォームに関するほとんどのドキュメントが含まれていますが、フレームワーク API に関する参考資料は含まれていません。API の仕様については、上部にある [リファレンス] タブをご覧ください。 +

+ +

+左側のパネルに表示されているように、デベロッパー ガイドは複数のセクションに分かれています。各セクションは次のとおりです: +

+ +

+
Android の基本
+
Android とは何か、基本機能、アプリケーションとの関係など、Android の基本事項について紹介します。
+ +
フレームワーク トピック
+
Android のフレームワークと API の各部分について説明します。フレームワークの概要については、アプリケーションの基礎を最初にご覧ください。次に、ユーザー インターフェースの設計やリソースの設定、データの保存、権限の利用など、それぞれのトピックを必要に応じて参照してください。
+ +
開発
+
Android の開発とデバッグ用ツールの使用方法、結果のテスト方法について説明します。
+ +
公開
+
アプリケーション配布の準備をする方法と、準備ができたら公開する方法について説明します。
+ +
ベスト プラクティス
+
効率よく機能し、ユーザーにとって役立つアプリケーションを作成するための推奨テクニックについて説明します。
+ +
チュートリアルとサンプル
+
Android アプリケーションを構築する方法を例示する段階的なチュートリアルとサンプル コードです。
+ +
付録
+
関連情報、仕様、よくある質問、用語解説などの情報です。
+
+ +

+Android 向けプログラム開発の最初のステップは、SDK(ソフトウェア開発キット)をダウンロードすることです。このキットのダウンロード方法と説明については、上部にある [SDK] タブをご覧ください。 +

+ +

+SDK のダウンロード後は、まずはじめにデベロッパー ガイドを参照してください。コードを実際に見てみることから始めたい場合は、簡単な Hello World チュートリアルを参照してください。Android プラットフォーム向けに作成された標準的な「Hello, World」アプリケーションについて説明しています。アプリケーションの基礎ドキュメントは、アプリケーション フレームワークを理解したいユーザーに最適な出発点となります。 +

+ + +

+不明点などがある場合は、Android ディスカッション グループへの参加をおすすめします。詳しくは上部にある [コミュニティ] タブをご覧ください。 +

+ +

デベロッパー ガイドの別のページに移動してから、このページに戻るには、[デベロッパー ガイド] タブをクリックします。

\ No newline at end of file diff --git a/docs/html/intl/ja/guide/publishing/app-signing.jd b/docs/html/intl/ja/guide/publishing/app-signing.jd new file mode 100644 index 0000000000000..23d8cf764e91d --- /dev/null +++ b/docs/html/intl/ja/guide/publishing/app-signing.jd @@ -0,0 +1,336 @@ +page.title=アプリケーションへの署名 +@jd:body + +
+
+ +

署名の概略

+ + + +

このドキュメントの内容

+ +
    +
  1. 概要
  2. +
  3. 署名戦略
  4. +
  5. 署名の基本設定
  6. +
  7. デバッグ モードでの署名
  8. +
  9. 公開リリースへの署名 +
      +
    1. リリース向けのコンパイル
    2. +
    3. 適切な秘密鍵の取得
    4. +
    5. アプリケーションの署名
    6. +
    7. Eclipse ADT によるコンパイルと署名
    8. +
    +
  10. +
  11. 秘密鍵のセキュリティ設定
  12. + +
+ +

関連項目

+ +
    +
  1. アプリケーションのバージョニング
  2. +
  3. 公開の準備
  4. +
+ +
+
+ +

このドキュメントでは、Android アプリケーションを携帯端末ユーザーに公開する前に署名する方法について説明します。

+ +

概要

+ +

Android システムでは、インストールするすべてのアプリケーションに対してデジタル署名されて証明書を必要とします。この証明書の秘密鍵は、アプリケーションのデベロッパーが所持するものです。Android システムは証明書をアプリケーションの作成者の識別手段、およびアプリケーション間の信頼関係の確立手段として使用します。証明書は、ユーザーがどのアプリケーションをインストールできるかを制御するものではありません。証明書は認証機関によって署名される必要はありません。通常の Android アプリケーションは自己署名証明書を使用して正常に機能します。

+ +

Android アプリケーションの署名について、次の点を理解することが重要です:

+ + + +

Android システムは、適切に署名されていないアプリケーションをインストールせず、実行もしません。この規則は、実際のデバイスでもエミュレータでも、Android システムが実行されるすべての状況で適用されます。このため、エミュレータまたはデバイス上で実行またはデバッグする前に、アプリケーションの署名を設定する必要があります。

+ +

Android SDK ツールは、デバッグ時のアプリケーション署名を支援します。「ADT Plugin for Eclipse」と「Ant ビルド ツール」では両方とも、デバッグ モードとリリース モードの 2 種類の署名モードを利用できます。 + +

+ +

署名戦略

+ +

アプリケーションの署名は、開発アプローチに一部影響します。特に、複数のアプリケーションをリリースする予定の場合、高い影響を与えます。

+ +

一般に、すべてのデベロッパーに推奨される戦略は、アプリケーションの予期される使用期間を通じて同じ証明書ですべてのアプリケーションに署名することです。このようにするには、複数の理由があります:

+ + + +

署名戦略を決定する際のもう 1 つの重要な検討事項として、アプリケーションの署名に使用するキーの有効期間の設定方法があります。

+ + + +

アプリケーションの設計時にこれらの点を考慮し、アプリケーションの署名に適切な証明書を使用してください。

+ +

署名の基本設定

+ +

キーストアとデバッグ キーの生成をサポートするため、SDK ビルド ツールで Keytool を使用できることを初めに確認してください。たいていの場合、「JAVA_HOME」環境変数を設定して適切な JDK を参照させることで、SDK ビルド ツールで Keytool を認識できます。または、JDK バージョンの Keytool を PATH 変数に追加しても認識できます。

+ +

Linux バージョンに付属されている GNU Java コンパイラで開発している場合は、gcj バージョンではなく、JDK バージョンの Keytool を使用していることを確認してください。Keytool が既に PATH に指定されている場合は、/usr/bin/keytool の symlink を指していることがあります。この場合は、symlink ターゲットが JDK の Keytool を指していることを確認してください。

+ +

アプリケーションを公開する場合は、Jarsigner ツールをコンピュータで使用できるようにする必要があります。Jarsigner と Keytool の両方が JDK によって提供されます。

+ +

デバッグ モードでの署名

+ +

Android ビルド ツールにはデバッグ署名モードがあり、アプリケーションの開発とデバッグがスムーズに行えます。また、.apk をエミュレータまたはデバイスにインストールする際の、署名に対する Android システム要件を満たします。デバッグモードでは、SDK ツールは Keytool を呼び出してデバッグ キーストアとキーを作成します。

+ +

SDK ツールは事前に指定された名前とパスワードを使用してデバッグ キーストア/キーを作成します。

+

+ +

必要に応じて、デバッグ キーストア/キーの場所および名前を変更できます。また、自分で作成したデバッグ キーストア/キーを指定することもできます。Eclipse/ADT で、[[]ウィンドウ(Windows)] > [[]設定(Prefs)] > [[]Android] > [[]ビルド(Build)] を選択します。ただし、自分で作成したデバッグ キーストア/キーは、デフォルトのデバッグ キー(上述)と同じキーストア/キー名とパスワードを使用する必要があります。

+ +

注: デバッグ証明書で署名した場合は、アプリケーションを公開できません。

+ +

Eclipse ユーザー

+ +

Eclipse/ADT で開発し、Keytool を上記のように設定してある場合は、デバッグモードにおける署名はデフォルトで有効になっています。アプリケーションを実行またはデバッグするときに、ADT は .apk にデバッグ証明書で署名し、エミュレータにインストールします。ADT が Keytool にアクセスできる場合は、ユーザーは特に操作する必要はありません。

+ +

Ant ユーザー

+ +

Ant を使用して .apk ファイルを構築する場合、デバッグ署名モードは debug オプションを使用することで有効になります(android ツールで生成された build.xml ファイルを使用していることが前提となります)。ant debug を実行してアプリケーションをコンパイルする際、ビルド スクリプトはキーストア/キーを生成し、.apk に署名します。ユーザーは操作する必要はありません。詳細は、その他の統合開発環境での開発: デバッグモードにおけるビルド をお読みください。

+ + +

デバッグ証明書の有効期限

+ +

デバッグ モード(Eclipse/ADT と Ant ビルドのデフォルト)でのアプリケーション署名に使用した自己署名証明書には、作成日から 365 日の有効期限が設定されます。

+ +

証明書の期限が切れると、ビルド エラーが発生します。Ant ビルドでは、エラーは次のようになります:

+ +
debug:
+[echo] Packaging bin/samples-debug.apk, and signing it with a debug key...
+[exec] Debug Certificate expired on 8/4/08 3:43 PM
+ +

Eclipse/ADT では、Android コンソールに同様のエラーが表示されます。

+ +

この問題を解決するには、debug.keystore ファイルを削除します。AVD のデフォルトの格納場所は、OS X と Linux の場合は ~/.android/avd、Windows XP の場合は C:\Documents and Settings\\.android\、Windows Vista の場合は C:\Users\\.android\ です。

+ + +

次にビルドを行うと、ビルド ツールは新しいキーストアとデバッグ キーを再度生成します。

+ +

開発コンピュータがグレゴリオ暦以外のロケールを使用している場合、ビルド ツールが誤って期限切れのデバッグ証明書を生成することがあります。このため、アプリケーションをコンパイルしようとするとエラーが発生します。解決策については、トラブルシューティング トピックの ビルド ツールが期限切れのデバッグ証明書を生成するため、アプリケーションがコンパイルできない をご覧ください。

+ + +

公開リリースへの署名

+ +

アプリケーションを他のユーザーに公開する準備ができたら、次のことを行う必要があります:

+
    +
  1. アプリケーションをリリース モードでコンパイルする
  2. +
  3. 適切な秘密鍵を取得する
  4. +
  5. アプリケーションに秘密鍵で署名する
  6. +
+ +

以下のセクションでは、これらの手順を実行する方法について説明します。

+ +

ADT プラグイン搭載の Eclipse を使用している場合、これらの手順を実行する代わりに Export Wizard を使用して .apk をコンパイルして秘密鍵で署名できます。Export Wizard では、処理過程で新しいキーストアと秘密鍵の生成も可能です。Eclipse ADT によるコンパイルと署名を参考にコンパイルを行ってください。

+ + +

リリース向けのコンパイル

+ +

アプリケーションのリリースを準備するには、リリース モードでコンパイルする必要があります。リリース モードでは、Android ビルド ツールはアプリケーションを通常どおりにコンパイルしますが、デバッグ キーで署名しません。

+ +

注: 署名されていないアプリケーション、またはデバッグ キーで署名されたアプリケーションはリリースできません。

+ +

Eclipse ユーザー

+ +

署名されていない .apk ファイルを Eclipse からエクスポートするには、パッケージ エクスプローラー(Package Explorer)でプロジェクトを右クリックして、[[]Android ツール(Android Tools)] > [[]署名されていないアプリケーション パッケージのエクスポート(Export Unsigned Application Package)] を選択します。次に、署名されていない .apk ファイルの場所を指定します(または、AndroidManifest.xml ファイルを Eclipse で開き、[[]概要(Overview)] タブを開いて [[]署名されていない .apk のエクスポート(Export an unsigned .apk)] をクリックします)。

+ +

Export Wizard では、コンパイルと署名の手順を一緒に処理できます。Eclipse ADT によるコンパイルと署名をご覧ください。

+ +

Ant ユーザー

+ +

Ant を使用している場合は、必要な作業は Ant コマンドでビルド ターゲットとして「release」を指定するだけです。たとえば、Ant を build.xml ファイルがあるディレクトリから実行している場合、コマンドは次のようになります:

+ +
$ ant release
+ +

ビルド スクリプトは、アプリケーション .apk を署名せずにコンパイルします。

+ + +

適切な秘密鍵の取得

+ +

アプリケーションの署名を準備するには、まず署名に使用する適切な秘密鍵があることを確認することが必要です。適切な秘密鍵とは、次の条件を満たすものです:

+ + + +

自己署名されたキーを使用できます。適切なキーがない場合、Keytool を使用して生成する必要があります。基本設定で説明した手順に従って、Keytool を使用できるようにしてください。

+ +

Keytool で自己署名キーを生成するには、keytool コマンドを使用して以下に示すオプション(および、必要に応じてその他のオプション)を渡します。

+ +

注: Keytool を実行する前に、秘密鍵のセキュリティ設定を読んで、キーのセキュリティを確保する方法と、自分とユーザーにとってセキュリティ確保が重要な理由を理解してください。特に、自分のキーを生成する場合、キーストアとキーの両方に強力なパスワードを選択する必要があります。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Keytool のオプション説明
-genkeyキー ペアを生成します(公開キーと秘密鍵)。
-v詳しいメッセージを出力する。
-keystore <keystore-name>.keystore秘密鍵を含むキーストアの名前。
-storepass <password>

キーストアのパスワード。

セキュリティ上の注意として、安全なコンピュータで作業している場合を除き、このオプションをコマンド ラインに指定しないでください。指定しなかった場合、Keytool からパスワードの入力が求められます。このため、パスワードはシェルの履歴に記録されません。

-alias <alias_name>キーのエイリアス。
-keyalg <alg>キーの生成時に使用する暗号化アルゴリズム。DSA と RSA の 2 つをサポートしています。
-dname <name>

キーの作成者を識別する、識別名。値は、自己署名証明書の発行者およびサブジェクト フィールドとして使用されます。

このオプションはコマンド ラインで指定する必要はありません。指定しなかった場合、Jarsigner からそれぞれの識別名フィールド(CN、OU など)の入力が求められます。

-validity <valdays>

キーの有効期間(日数)。

注: 10000 以上の値を推奨します。

-keypass <password>

キーのパスワード。

+

セキュリティ上の注意として、安全なコンピュータで作業している場合を除き、このオプションをコマンド ラインに指定しないでください。指定しなかった場合、Keytool からパスワードの入力が求められます。このため、パスワードはシェルの履歴に記録されません。

+ + +

秘密鍵を生成する Keytool コマンドの例を示します。

+ +
$ keytool -genkey -v -keystore my-release-key.keystore 
+-alias alias_name -keyalg RSA -validity 10000
+ +

上記のコマンド例を実行すると、Keytool からキーストアとキーのパスワードと、キーの識別名フィールドの指定が求められます。キーストアが my-release-key.keystore というファイルとして生成されます。キーストアとキーは、入力したパスワードで保護されます。キーストアには 1 つのキーが含まれ、10000 日間有効です。エイリアスは、後で使用する名前で、アプリケーションに署名するときにこのキーストアを参照する名前です。

+ +

Keytool の詳細は http://java.sun.com/j2se/1.5.0/docs/tooldocs/#security のドキュメント(英語のみ)をご覧ください。

+ + +

アプリケーションの署名

+ +

リリースする .apk に実際に署名する準備ができたら、Jarsigner ツールを使用して署名できます。基本設定で説明したように、Jarsigner をコンピュータで使用できることを確認してください。また、秘密鍵を含むキーストアがあることも確認してください。

+ +

アプリケーションに署名するには、Jarsigner を実行して、アプリケーションの .apk と、.apk の署名に使用する秘密鍵を含むキーストアの両方を参照します。以下の表では、使用できるオプションを示します。

+ + + + + + + + + + + + + + + + + + +
Jarsigner のオプション説明
-keystore <keystore-name>.keystore秘密鍵を含むキーストアの名前。
-verbose詳しいメッセージを出力する。
-storepass <password>

キーストアのパスワード。

セキュリティ上の注意として、安全なコンピュータで作業している場合を除き、このオプションをコマンド ラインに指定しないでください。指定しなかった場合、Jarsigner からパスワードの入力が求められます。このため、パスワードはシェルの履歴に記録されません。

-keypass <password>

秘密鍵のパスワード。

セキュリティ上の注意として、安全なコンピュータで作業している場合を除き、このオプションをコマンド ラインに指定しないでください。指定しなかった場合、Jarsigner からパスワードの入力が求められます。このため、パスワードはシェルの履歴に記録されません。

+ +

Jarsigner を使用して my_application.apk というアプリケーション パッケージに署名する例を、上記で作成したキーストアを使用して示します。 +

+ +
$ jarsigner -verbose -keystore my-release-key.keystore 
+my_application.apk alias_name
+ +

上記のコマンドを実行すると、Jarsigner からキーストアとキーのパスワードの入力が求められます。.apk がその場で変更され、.apk は署名されます。.apk に別のキーで複数回署名できます。

+ +

.apk が署名されたことを確認するには、次のようなコマンドを使用できます:

+ +
$ jarsigner -verify my_signed.apk
+ +

.apk が適切に署名されると、Jarsigner から「jar verified」と出力されます。詳細情報が必要な場合は、次のコマンドを使用できます。

+ +
$ jarsigner -verify -verbose my_application.apk
+ +

または、次のコマンドを使用します。

+ +
$ jarsigner -verify -verbose -certs my_application.apk
+ +

上記の -certs オプションが付加されたコマンドでは、「CN=」行が出力され、キーの作成者が示されます。

+ +

注: 「CN=Android Debug」と出力される場合、.apk が Android SDK によって生成されたデバッグ キーで署名されたことを示しています。アプリケーションをリリースする予定の場合は、デバッグ キーではなく秘密鍵で署名する必要があります。

+ +

Jarsigner の詳細は http://java.sun.com/j2se/1.5.0/docs/tooldocs/#security のドキュメント(英語のみ)をご覧ください。

+ + +

Eclipse ADT によるコンパイルと署名

+ +

ADT 搭載 Eclipse を使用している場合、Export Wizard を使用して署名済み .apk をエクスポートできます(必要に応じて、新しいキーストアを作成することもできます)。Export Wizard は、Keytool と Jarsigner のすべての処理を、コマンド ラインを使用せず、グラフィカル ユーザー インターフェースで署名を実行できます。Export Wizard は Keytool と Jarsigner の両方を使用するため、上記の署名の基本設定の条件を満たすコンピュータで使用できます。

+ +

署名された .apk を作成するには、パッケージ エクスプローラー(Package Explorer)でプロジェクトを右クリックして、[[]Android ツール(Android Tools)] > [[]署名済みアプリケーション パッケージのエクスポート(Export Signed Application Package)] を選択します(または、AndroidManifest.xml ファイルを Eclipse で開き、[[]概要(Overview)] タブを開いて [[]Export Wizard を使用する(Use the Export Wizard)] をクリックします)。表示されたウィンドウには、アプリケーションのエクスポート中に見つかったエラーが表示されます。エラーが見つからなかった場合は Export Wizard で処理を続行します。.apk に署名する秘密鍵の選択や、新しいキーストアと秘密鍵の作成など、アプリケーション署名のプロセスを手順を追って実行できます。

+ +

Export Wizard が完了すると、配布可能な署名済み .apk が作成されています。

+ + +

秘密鍵のセキュリティ設定

+ +

秘密鍵のセキュリティ設定は、作成者とユーザーの両者にとって重要です。他人にキーを使用させたり、第三者が見つけて使用できるような安全ではない場所にキーストアとキーを放置したりすると、作成者とユーザー間の信頼が損なわれます。

+ +

他者が許可を得ずにキーを取得した場合、その人物はアプリケーションに署名して配布し、本物のアプリケーションを故意に置き換えたり破損させたりすることができます。このような人物は、身元を詐称してアプリケーションに署名して配布し、その他のアプリケーションまたはシステム自体を攻撃したり、ユーザー データを破損させたり盗み出したりすることもあります。

+ +

キーの有効期限が切れるまで、秘密鍵のセキュリティを常に適切に維持できるかは、デベロッパーとしての評価を左右します。キーを安全に保つためのヒントをいくつか紹介します。

+ + + +

一般的には、キーの生成、使用、保管に関して常識的な注意を払っていれば、セキュリティを確保することができます。

\ No newline at end of file diff --git a/docs/html/intl/ja/guide/publishing/preparing.jd b/docs/html/intl/ja/guide/publishing/preparing.jd new file mode 100644 index 0000000000000..f1e7b45fbedba --- /dev/null +++ b/docs/html/intl/ja/guide/publishing/preparing.jd @@ -0,0 +1,154 @@ +page.title=公開の準備 +@jd:body + + + +

アプリケーションの公開とは、アプリケーションをテストして適切にパッケージし、Android 搭載の携帯端末のユーザーが利用できる状態にすることです。

+ +

アプリケーションを公開して Android 搭載デバイスにインストールするには、いくつかの作業を行ってアプリケーションの準備を整える必要があります。このドキュメントでは、アプリケーションのリリースを成功させるための準備における、重要なチェックポイントを説明しています。 +

+ +

アプリケーションを Android マーケットに公開する場合は、アプリケーションの具体的な準備要件について Android マーケットでの公開 もご覧ください。

+ +

アプリケーションを公開する方法の一般的な情報については、Publishing Your Applications のドキュメントをご覧ください。

+ +
+ +

アプリケーションのリリースを準備する前の作業:

+ +
    +
  1. アプリケーションを実際のデバイスで徹底的にテストする
  2. +
  3. アプリケーションへのエンド ユーザー ライセンス契約の追加を検討する
  4. +
  5. アプリケーションのマニフェストにアイコンとラベルを指定する
  6. +
  7. ロギングとデバッグを無効にして、データとファイルをクリーンアップする
  8. +
+ +

アプリケーションの最終コンパイルを実行する前の作業:

+ +
    +
  1. アプリケーションでバージョン管理を行う
  2. +
  3. 適切な暗号化キーを取得する
  4. +
  5. アプリケーションが MapView 要素を使用している場合は、Maps API キーに登録する
  6. +
+ +

アプリケーションのコンパイル

+

アプリケーションをコンパイルした後の作業:

+
    +
  1. アプリケーションに署名する
  2. +
  3. コンパイルしたアプリケーションをテストする
  4. +
+
+ +

アプリケーションのリリースを準備する前の作業

+ +

1. アプリケーションを実際のデバイスで徹底的にテストする

+ +

アプリケーションをできる限り広範に徹底的にテストすることが重要です。この作業を支援するため、Android では多数のテスト用クラスとツールを用意しています。{@link android.app.Instrumentation Instrumentation} を使用して JUnit およびその他のテスト ケースを実行できます。また、UI/Application Exerciser Monkey などのテスティング ツールを使用できます。

+ + + +

2. アプリケーションへのエンドユーザー ライセンス契約の追加を検討する

+ +

個人、組織、知的財産を保護するため、アプリケーションのエンドユーザー ライセンス契約(EULA)を付加することを推奨します。 + +

3. アプリケーションのマニフェストにアイコンとラベルを指定する

+ +

アプリケーションのマニフェストに指定するアイコンとラベルは、アプリケーションのアイコンと名前としてユーザーに表示されるため、重要な要素です。アイコンとラベルは、デバイスの [[]ホーム] 画面や、[[]アプリケーションの管理]、[[]マイダウンロード] などに表示されます。また、公開サービスによってアイコンとラベルがユーザーに表示される可能性もあります。

+ +

アイコンとラベルを指定するには、android:icon と android:label 属性をマニフェストの <application> 要素に定義します。

+ +

アイコンのデザインについては、組み込みの Android アプリケーションのスタイルとできるだけ統一感を持たせてください。

+ +

4. ロギングとデバッグを無効にして、データとファイルをクリーンアップする

+ +

リリース時にはデバッグ機能を無効にし、デバッグおよびその他の不要なデータ/ファイルをアプリケーション プロジェクトから削除してください。

+ + +

アプリケーションの最終コンパイルを実行する前の作業

+ +

5. アプリケーションでバージョン管理を行う

+ +

アプリケーションをコンパイルする前に、アプリケーションにバージョン番号を定義しておく必要があります。定義するには、アプリケーションのマニフェスト ファイルの <manifest> 要素の android:versionCode と android:versionName 属性の両方に適切な値を指定します。バージョン番号の設定は、全体的なアプリケーションアップグレードの計画を考慮して、慎重に検討してください。

+ +

これまでにリリースしたバージョンがある場合、最新のアプリケーションのバージョン番号を旧バージョンから増加させる必要があります。アプリケーションのマニフェスト ファイルの <manifest> 要素の android:versionCode と android:versionName 属性の両方を適切な値を使用して増加する必要があります。

+ +

アプリケーションのバージョン情報を定義する方法は、Versioning Your Applicationsをご覧ください。

+ +

6. 適切な暗号化キーを取得する

+ +

ここまで準備作業をすべて読んで実行していれば、アプリケーションはコンパイルされ、署名の準備ができています。.apk の内部では、アプリケーションは適切にバージョン管理されており、上記のように余分なファイルや非公開データは削除されています。

+ +

アプリケーションに署名する前に、適切な非公開キーがあることを確認する必要があります。非公開キーを取得(または生成)する方法については、適切な非公開キーの取得をご覧ください。

+ +

適切な非公開キーを取得(または生成)したら、キーを使用して次の手順を実行します:

+ + + +

7. アプリケーションが MapView 要素を使用している場合は、Maps API キーに登録する

+ + + +

アプリケーションが Mapview 要素を使用する場合、アプリケーションを Google Maps サービスで登録し、Maps API キーを取得する必要があります。その後、MapView で Google Maps からデータを取得できるようになります。この処理を行うため、Maps サービスに署名証明書の MD5 フィンガープリントを提出します。

+ +

開発中は、SDK ツールが生成したデバッグ キーを登録して一時的な Maps API キーを取得できます。ただし、アプリケーションを公開する前には、非公開キーに基づく新しい Maps API キーで登録する必要があります。

+ +

アプリケーションが MapView 要素を使用する場合、次の点を理解することが重要です:

+ +
    +
  1. アプリケーションをリリース用にコンパイルする前に、Maps API キーを取得する必要があります。このキーを、アプリケーションのレイアウト ファイルにある各 MapView 要素の、android:apiKey という特殊な属性に追加する必要があるからです。MapView オブジェクトをコードから直接インスタンス化している場合は、Maps API キーをコンストラクタのパラメータとして渡す必要があります。 +
  2. +
  3. アプリケーションの MapView 要素が参照する Maps API キーは Google Maps 内で登録され、アプリケーションの署名に使用される証明書に登録される必要があります。これはアプリケーションを公開する際に特に重要です。MapView 要素は、アプリケーションの署名に使用されるリリース証明書に登録されるキーを参照する必要があります。
  4. +
  5. SDK ツールが生成したデバッグ証明書を登録して一時的な Maps API キーを取得している場合、リリース証明書を登録して新しい Maps API キーを取得する必要があります。また、MapView 要素を変更して、デバッグ証明書と関連付けられたキーではなく、新しいキーを参照させることも忘れないでください。このようにしないと、MapView 要素には Maps データをダウンロードする許可が与えられません。
  6. +
  7. アプリケーションの署名に使用する非公開キーを変更するには、Google Maps サービスから新しい Maps API キーを取得する必要があります。新しい Maps API キーを取得してすべての MapView 要素に適用してください。以前のキーを参照する MapView 要素には、Maps データをダウンロードする許可が与えられません。
  8. +
+ +

署名と非公開キーについては、アプリケーションへの署名をご覧ください。

+ + +

アプリケーションのコンパイル

+ +

前述のセクションで説明したアプリケーションの準備ができたら、アプリケーションをリリース用にコンパイルできます。

+ +

アプリケーションをコンパイルした後の作業

+ +

8. アプリケーションに署名する

+ +

非公開キーを使用してアプリケーションに署名します。アプリケーションに正しく署名することは、非常に重要です。詳細は、アプリケーションへの署名をご覧ください。

+ +

9. コンパイルして署名したアプリケーションのテスト

+ +

コンパイルしたアプリケーションをリリースする前に、対象とする携帯端末(および可能ならば対象ネットワーク)上で徹底的にテストする必要があります。特に、UI 部分の MapView 要素がマップ データを正常に受信していることを確認してください。正常に受信していない場合、Maps API キーに登録するに戻って問題を解決してください。アプリケーションがサーバー側サービスを正しく利用できること、指定データまたは使用データを正しく処理できること、そして認証要件を正常に処理できることも確認してください。

+ +

これらのテストが完了したら、アプリケーションを携帯端末ユーザーに公開する準備が整ったと言えるでしょう。

+ + diff --git a/docs/html/intl/ja/guide/publishing/versioning.jd b/docs/html/intl/ja/guide/publishing/versioning.jd new file mode 100644 index 0000000000000..bf86016f74280 --- /dev/null +++ b/docs/html/intl/ja/guide/publishing/versioning.jd @@ -0,0 +1,100 @@ +page.title=アプリケーションのバージョニング +@jd:body + +
+
+ +

バージョン管理の概略

+ + + +

このドキュメントの内容

+ +
    +
  1. アプリケーションのバージョンの設定
  2. +
  3. 最小システム API バージョンの指定 +
+ + +

関連項目

+ +
    +
  1. 公開の準備
  2. +
  3. Android マーケットでの公開
  4. +
  5. The AndroidManifest.xml File
  6. +
+ +
+
+ +

バージョン管理のコンポーネントは、アプリケーションのアップグレード及びメンテナンスの計画を立てるのに重要です。

+ + + +

Android システム自体は、アップグレードや互換性の制約の実施などのために、アプリケーション バージョン情報をアプリケーションに対して確認することはありません。代わりに、アプリケーションにおけるバージョン制約はユーザーまたはアプリケーション自体によって完全に実施されます。

+ +

Android システムが確認を行うのは、アプリケーションによってマニフェストの minSdkVersion 属性に指定されたシステム バージョン互換性です。この属性によりアプリケーションは互換性を持つ最小システム API を指定できます。詳細は、最小システム API バージョンの指定をご覧ください。 + +

アプリケーションのバージョンの設定

+

アプリケーションのバージョン情報を定義するには、アプリケーションのマニフェスト ファイルで属性を設定します。2 つの属性を使用でき、常にこの両方に値を定義することが推奨されています:

+ + + +

これらのバージョン属性の両方をマニフェスト ファイルの <manifest> 要素で定義します。

+ +

ここに、<manifest> 要素の android:versionCode と android:versionName 属性を示すマニフェストの例を示します。

+ +
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+      package="com.example.package.name"
+      android:versionCode="2"
+      android:versionName="1.1">
+    <application android:icon="@drawable/icon" android:label="@string/app_name">
+        ...
+    </application>
+</manifest>
+
+ +

この例では、android:versionCode 値は現在の .apk がこのアプリケーション コードの 2 番目のリリースを含んでいることを表し、これは android:codeName 文字列が示すようにマイナー後継リリースであることを示します。

+ +

Android フレームワークには、アプリケーションがシステムに別のアプリケーションのバージョン情報を問い合わせる API が用意されています。バージョン情報を取得するため、アプリケーションは {@link android.content.pm.PackageManager#getPackageInfo(java.lang.String, int)} +method of {@link android.content.pm.PackageManager PackageManager}.

を使用します。 + +

最小システム API バージョンの指定

+ +

アプリケーションが最低でも Android プラットフォームの特定のバージョンを必要とする場合、このバージョンを API レベルの ID としてアプリケーションのマニフェスト ファイルに指定できます。このようにすると、互換性のあるバージョンの Android システムを実行しているデバイスにのみアプリケーションをインストールできるようになります。

+ +

最小システム バージョンをマニフェストに指定するには、次の属性を使用します:

+ + + +

アプリケーションに最小プラットフォーム バージョンを指定するには、<uses-sdk> 要素を <manifest> の子として追加し、android:minSdkVersion を属性として定義します。

+ +

詳細は、Android System Image 1.1 Version Notes もご覧ください。

diff --git a/docs/html/intl/ja/guide/topics/fundamentals.jd b/docs/html/intl/ja/guide/topics/fundamentals.jd new file mode 100644 index 0000000000000..247d076e45251 --- /dev/null +++ b/docs/html/intl/ja/guide/topics/fundamentals.jd @@ -0,0 +1,922 @@ +page.title=開発の基礎 +@jd:body + +
+
+

主なクラス

+
    +
  1. {@link android.app.Activity}
  2. +
  3. {@link android.app.Service}
  4. +
  5. {@link android.content.BroadcastReceiver}
  6. +
  7. {@link android.content.ContentProvider}
  8. +
  9. {@link android.content.Intent}
  10. +
+ +

このドキュメントの内容

+
    +
  1. アプリケーションのコンポーネント +
      +
    1. コンポーネントのアクティブ化: インテント
    2. +
    3. コンポーネントの終了
    4. +
    5. マニフェスト ファイル
    6. +
    7. インテント フィルタ
    8. +
  2. +
  3. アクティビティとタスク +
      +
    1. 親和性と新しいタスク
    2. +
    3. 起動モード
    4. +
    5. スタックのクリア
    6. +
    7. タスクの開始
    8. +
  4. +
  5. プロセスとスレッド +
      +
    1. プロセス
    2. +
    3. スレッド
    4. +
    5. リモート プロシージャ コール
    6. +
    7. スレッドセーフなメソッド
    8. +
  6. +
  7. コンポーネントのライフサイクル +
      +
    1. アクティビティのライフサイクル
    2. +
    3. サービスのライフサイクル
    4. +
    5. ブロードキャスト レシーバのライフサイクル
    6. +
    7. プロセスとライフサイクル
    8. +
  8. +
+
+
+ +

+Android アプリケーションはすべて Java プログラミング言語で記述します。コンパイル済みの Java コード(およびそのアプリケーションに必要なすべてのデータやリソース ファイル)は、aapt ツールを使用して Android パッケージにバンドルします。Android パッケージは、拡張子が {@code .apk} のアーカイブ ファイルです。ユーザーは、このファイルをデバイスにダウンロードして利用します。つまり、Android パッケージは、アプリケーションをモバイル デバイスに配布およびインストールするための媒体として機能します。1 つの {@code .apk} ファイルに含まれているすべてのコードが、1 つのアプリケーションと見なされます。 +

+ +

+各 Android アプリケーションは、以下に示すさまざまな方法で他のアプリケーションから隔離されています: +

+ + + +

+2 つのアプリケーションで同じユーザー ID を共有することもできます。その場合は、それぞれのアプリケーションのファイルを相互に認識できます。システム リソースを節約するため、同じ ID のアプリケーションで同じ VM を共有し、同じ Linux プロセスで実行することも可能です。 +

+ + +

アプリケーションのコンポーネント

+ +

+Android の大きな特長の 1 つは、許可されていれば、あるアプリケーションから別のアプリケーションの要素を利用できる点です。たとえば、開発中のアプリケーションで画像の一覧をスクロール表示したい場合、他のアプリケーションで開発済みの適切なスクローラがあり、その利用が許可されていれば、独自に開発しなくてもそのスクローラを利用できます。アプリケーションに他のアプリケーションのコードを組み込んだり、リンクを設定したりする必要はありません。必要になった時点で、他のアプリケーションの一部分を開始するだけです。 +

+ +

+この仕組みが機能するには、アプリケーション プロセスの一部分を必要に応じて開始でき、その部分の Java オブジェクトをインスタンス化できなくてはなりません。そのため、Android アプリケーションには、他のシステムで動作するアプリケーションでよく使用されるような、アプリケーション全体にアクセスするための単一のエントリ ポイント(たとえば {@code main()} 関数)はありません。代わりに、システムが必要に応じてインスタンス化して実行できるコンポーネントで構成されます。コンポーネントには以下の 4 つのタイプがあります: +

+ +
+ +
アクティビティ
+
アクティビティは、ユーザーが 1 つの操作を集中的に行うための視覚的なユーザー インターフェースを表します。たとえば、ユーザーが選択できるメニュー アイテムの一覧を表示するアクティビティや、写真をキャプション付きで表示するアクティビティなどが考えられます。SMS アプリケーションなら、あるアクティビティでメッセージを送信する連絡先の一覧を表示し、別のアクティビティで選択した連絡先へのメッセージを入力し、その他のアクティビティで古いメッセージを参照したり設定を変更したりできます。これらのアクティビティを組み合わせて全体としてのユーザー インターフェースを形成しますが、それぞれのアクティビティは相互に独立しています。各アクティビティは、{@link android.app.Activity} 基本クラスのサブクラスとして実装されます。 + +

+アプリケーションは、1 つのアクティビティで構成することも、上記のSMS アプリケーションのように複数のアクティビティで構成することもできます。どのようなアクティビティがいくつ必要になるかは、アプリケーションやその設計に応じて異なります。通常は、アクティビティのうちのいずれかを最初のアクティビティとして指定し、ユーザーがアプリケーションを起動したときに表示します。あるアクティビティから別のアクティビティに移動するには、現在のアクティビティから次のアクティビティを開始します。 +

+ +

+各アクティビティには、それを表示するためのデフォルトのウィンドウが割り当てられます。通常はウィンドウを画面全体に表示しますが、画面より小さいウィンドウを他のウィンドウの前面に表示することもできます。アクティビティに、新たなウィンドウを追加することも可能です。たとえば、アクティビティの途中でユーザーの応答を要求するポップアップ ダイアログを表示したり、ユーザーが画面上の特定のアイテムを選択したときに別ウィンドウで重要な情報を表示したりできます。 +

+ +

+ウィンドウの視覚的なコンテンツは、ビュー({@link android.view.View} 基本クラスの派生オブジェクト)の階層として提供されます。各ビューは、ウィンドウ内の特定の矩形領域を制御します。親ビューは、その子となるビューで構成され、それらの子ビューのレイアウトを決定します。リーフ ビュー(階層の最下位に位置するビュー)は、そのビューが制御する矩形領域に表示され、その領域でのユーザーのアクションに対して応答します。つまり、ビューはアクティビティとユーザーが対話する場所です。たとえば、ビューに小さな画像を表示し、ユーザーがその画像をタップしたら何らかのアクションを開始することもできます。Android には、ボタン、テキスト フィールド、スクロール バー、メニュー アイテム、チェックボックスなど、さまざまなビューがあらかじめ用意されています。 +

+ +

+ビューの階層は、{@link android.app.Activity#setContentView Activity.setContentView()} メソッドを使用してアクティビティのウィンドウ内に配置します。コンテンツ ビューは、階層のルートとなる View オブジェクトです(ビューおよびその階層について詳しくはUser Interface のドキュメントをご覧ください)。 +

+ +

サービス
+
サービスは、視覚的なユーザー インターフェースを持たず、バックグラウンドにおいて明確な終了期限がなくで実行されます。たとえば、ユーザーが他の操作をしている間 BGM を再生するサービス、ネットワーク経由でデータをフェッチするサービス、何かを計算してその結果をアクティビティに提供するサービスなどが考えられます。各サービスは、{@link android.app.Service} 基本クラスの拡張です。 + +

+典型的な例としては、プレイリストの曲を再生するメディア プレーヤーが挙げられます。プレーヤー アプリケーションは、ユーザーが曲を選んで再生するための 1 つ以上のアクティビティで構成することが予想されますが、ユーザーはプレーヤーを離れて別の操作に移った後も曲を聞いていたいと考えられることから、曲の再生自体をアクティビティで処理するわけにはいきません。音楽の再生を続けるには、メディア プレーヤー アクティビティから、バックグラウンドで実行するサービスを開始します。音楽再生サービスは、それを開始したアクティビティが画面上に見えなくなった後もそのまま実行されます。 +

+ +

+また、実行中のサービスに接続(バインド)することもできます(実行されていない場合はそのサービスを開始することも可能です)。接続中は、サービスが公開しているインターフェースを使ってサービスと対話できます。音楽再生サービスであれは、このインターフェースを使って一時停止、巻き戻し、停止、再生の再開などの操作を実行できるようにします。 +

+ +

+アクティビティや他のコンポーネントと同様に、サービスもアプリケーション プロセスのメイン スレッドで実行します。したがって、サービスによって他のコンポーネントやユーザー インターフェースの実行を妨げられることはなく、時間がかかるタスク(たとえば曲の再生)については、通常は別のスレッドを生成して処理します。詳しくは、プロセスとスレッドをご覧ください。 +

+ +
ブロードキャスト レシーバ
+
ブロードキャスト レシーバは、ブロードキャストの連絡を受信してそれに対処するだけのコンポーネントです。ブロードキャストの多くが元々はシステム コードで、たとえばタイム ゾーンが変更されたこと、電池の残量が少なくなったこと、写真が撮影されたこと、ユーザーが言語設定を変更したことなどを連絡するために使用します。アプリケーションでも、たとえば何らかのデータがデバイスにダウンロードされて利用できるようになったことを、他のアプリケーションにブロードキャストで知らせることができます。 + +

+アプリケーションでは、重要と思われるすべての連絡に応答できるよう、ブロードキャスト レシーバをいくつでも設定できます。すべてのレシーバは、{@link android.content.BroadcastReceiver} 基本クラスの拡張です。 +

+ +

+ブロードキャスト レシーバがユーザー インターフェースを表示することはありません。ただし、受信した情報への応答としてアクティビティを開始したり、{@link android.app.NotificationManager} を使用してユーザーにアラートを送信したりすることはあります。通知の際には、バックライトを点滅させる、バイブレーションを起動する、音を鳴らすなど、さまざまな方法でユーザーの注意を喚起できます。通常は、ステータス バーに永続アイコンを表示し、ユーザーがこれを開いてメッセージを取得できるようにします。 +

+ +
コンテンツ プロバイダ
+
コンテンツ プロバイダは、アプリケーションのデータを他のアプリケーションでも利用できるようにします。データは、ファイル システムや SQLite データベースなど、一般に利用できる方法で格納されていれば使用できます。コンテンツ プロバイダは、{@link android.content.ContentProvider} 基本クラスの拡張です。プロバイダが制御する型のデータを、他のアプリケーションから取得および格納するための標準メソッド セットを実装しています。ただし、これらのメソッドをアプリケーションから直接呼び出すことはできません。代わりに、{@link android.content.ContentResolver} オブジェクトのメソッドを呼び出します。ContentResolver は、すべてのプロバイダと通信でき、プロバイダと連携して関係のあるすべてのプロセス間通信を管理します。 + +

+コンテンツ プロバイダの使用方法について詳しくは、Content Providersのドキュメントをご覧ください。 +

+ +
+ +

+Android では、特定のコンポーネントで処理すべきリクエストがあると、そのコンポーネントのアプリケーション プロセスが実行中かどうかを確認(必要に応じてプロセスを開始)し、そのコンポーネントの適切なインスタンスが利用可能かどうかを確認(必要に応じてインスタンスを作成)します。 +

+ + +

コンポーネントのアクティブ化: インテント

+ +

+コンテンツ プロバイダは、ContentResolver からのリクエストの対象になるとアクティブ化されます。それ以外の 3 つのコンポーネント(アクティビティ、サービス、ブロードキャスト レシーバ)は、インテントと呼ばれる非同期メッセージによってアクティブ化されます。インテントは、メッセージのコンテンツを保持する {@link android.content.Intent} オブジェクトです。アクティビティやサービスの場合の Intent オブジェクトの主な役割は、リクエストされているアクションを指名し、その対象となるデータの URI を指定することです。たとえば、ユーザーに画像を表示するためのリクエストや、ユーザーにテキストを編集させるリクエストをアクティビティに伝達できます。ブロードキャスト レシーバの場合は、Intent オブジェクトがこれから通知を行うアクションを指名します。たとえば、カメラのボタンが押されたことを、関係のあるブロードキャスト レシーバに通知できます。 +

+ +

+以下に示すように、コンポーネントのタイプごとに別々のアクティブ化メソッドが用意されています: +

+ + + +

+インテント メッセージについて詳しくは、Intents and Intent Filters をご覧ください。 +

+ + +

コンポーネントの終了

+ +

+コンテンツ プロバイダは、ContentResolver からのリクエストに応答している間のみアクティブになります。ブロードキャスト レシーバは、ブロードキャスト メッセージに応答している間のみアクティブになります。つまり、これらのコンポーネントを明示的に終了させる必要はありません。 +

+ +

+一方、アクティビティはユーザー インターフェースを提供します。長い時間をかけてユーザーと会話するためのものであり、待機状態の間も、会話が続いてきる限りはアクティブなままになっている可能性があります。同様に、サービスも長い間実行されたままになる可能性があります。Android には、アクティビティとサービスを以下のような規則的な方法で終了させるためのメソッドが用意されています: +

+ + + +

+コンポーネントが、既に利用されていない場合や、Android がよりアクティブな他のコンポーネントにメモリを割り当てる必要がある場合は、システムがコンポーネントを終了させることもあります。このような状況およびその影響については、コンポーネントのライフサイクルで詳しく説明します。 +

+ + +

マニフェスト ファイル

+ +

+アプリケーション コンポーネントを開始するには、Android がそのコンポーネントの存在を認識している必要があります。アプリケーションのコンポーネントは、マニフェスト ファイルで宣言します。このファイルは、アプリケーションのコード、ファイル、リソースなどとともに Android パッケージ({@code .apk} ファイル)にバンドルされます。 +

+ +

+マニフェストは構造化された XML ファイルで、どのアプリケーションでも常に AndroidManifest.xml という名前になります。アプリケーション コンポーネントの宣言以外にも、アプリケーションをリンクさせる必要のあるライブラリ(デフォルトの Android ライブラリを除く)の指定や、アプリケーションに付与されるべき権限の指定などにも使用します。 +

+ +

+しかし、マニフェストの最も重要な役割は、アプリケーションのコンポーネントに関する情報を Android に提供することです。たとえば、アクティビティを次のように宣言できます: +

+ +
<?xml version="1.0" encoding="utf-8"?>
+<manifest . . . >
+    <application . . . >
+        <activity android:name="com.example.project.FreneticActivity"
+                  android:icon="@drawable/small_pic.png"
+                  android:label="@string/freneticLabel" 
+                  . . .  >
+        </activity>
+        . . .
+    </application>
+</manifest>
+ +

+<activity> 要素の {@code name} 属性は、そのアクティビティを実装する {@link android.app.Activity} サブクラスを指名します。{@code icon} および {@code label} 属性には、ユーザーに対して表示するアイコンやラベルが保持されているリソース ファイルを指定します。 +

+ +

+その他のコンポーネントも、サービスは <service> 要素、ブロードキャスト レシーバは <receiver> 要素、コンテンツ プロバイダは <provider> 要素を使用して同じような方法で宣言します。マニフェストに宣言されていないアクティビティ、サービス、およびコンテンツ プロバイダは、システムから認識できないため実行されることはありません。ただし、ブロードキャスト レシーバの場合は、マニフェストで宣言する方法と、コード内で {@link android.content.BroadcastReceiver} オブジェクトとして動的に作成し、{@link android.content.Context#registerReceiver Context.registerReceiver()} を呼び出してシステムに登録する方法があります。 +

+ +

+マニフェスト ファイルの作成方法について詳しくは、The AndroidManifest.xml Fileをご覧ください。 +

+ + +

インテント フィルタ

+ +

+Intent オブジェクトでは、対象とするコンポーネントを明示的に指名できます。明示的に指名されている場合、Android はマニフェスト ファイル内の宣言に基づいてコンポーネントを特定してアクティブにします。一方、明示的に指名されていない場合は、そのインテントに応答する上で最適なコンポーネントが選択されます。方法としては、Intent オブジェクトを、その対象となりうるコンポーネントのインテント フィルタと照合します。コンポーネントのインテント フィルタは、そのコンポーネントで処理できるインテントの種類を示します。これもコンポーネントに関する重要な情報の 1 つなので、マニフェスト ファイルで宣言します。次に、上に示した例を拡張して 2 つのインテント フィルタを追加したアクティビティを示します: +

+ +
<?xml version="1.0" encoding="utf-8"?>
+<manifest . . . >
+    <application . . . >
+        <activity android:name="com.example.project.FreneticActivity"
+                  android:icon="@drawable/small_pic.png"
+                  android:label="@string/freneticLabel" 
+                  . . .  >
+            <intent-filter . . . >
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+            <intent-filter . . . >
+                <action android:name="com.example.project.BOUNCE" />
+                <data android:mimeType="image/jpeg" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+        . . .
+    </application>
+</manifest>
+ +

+この例の 1 つ目のフィルタは、アクション「{@code android.intent.action.MAIN}」とカテゴリ「{@code android.intent.category.LAUNCHER}」を組み合わせた一般的なフィルタです。このフィルタは、アプリケーション ランチャ(ユーザーがデバイス上で起動できるアプリケーションを一覧表示した画面)に、このアクティビティを表示する必要があることを示しています。つまり、このアクティビティはアプリケーションへのエントリ ポイントとして機能し、ユーザーがランチャでそのアプリケーションを選択したときに最初に表示されるということです。 +

+ +

+2 つ目のフィルタでは、アクティビティが特定のタイプのデータに対して実行できるアクションを宣言しています。 +

+ +

+コンポーネントにはインテント フィルタをいくつでも指定でき、それぞれのフィルタで別々の機能を宣言できます。フィルタが 1 つも指定されていないコンポーネントは、そのコンポーネントが対象として明示的に指名されているインテントでのみアクティブにできます。 +

+ +

+コード内で作成して登録したブロードキャスト レシーバの場合、インテント フィルタは {@link android.content.IntentFilter} オブジェクトとして直接インスタンス化されます。それ以外の全てのフィルタは、マニフェストで設定します。 +

+ +

+インテント フィルタについて詳しくは、Intents and Intent Filters をご覧ください。 +

+ + +

アクティビティとタスク

+ +

+既に説明したように、あるアクティビティから別のアクティビティを開始することができます。これには、別のアプリケーションで定義されているアクティビティも含まれます。たとえば、ユーザーに特定の場所の地図を表示するとします。そのためのアクティビティは既に存在しているので、現在のアクティビティで必要な情報を Intent オブジェクトに格納して {@code startActivity()} に渡すだけで、マップ ビューアに地図を表示できます。ユーザーが [戻る] キーを押すと、画面に元のアクティビティが再表示されます。 +

+ +

+この場合、マップ ビューアは別のアプリケーションで定義されており、そのアプリケーションのプロセスで実行されていますが、ユーザーにとってはマップ ビューアが元のアプリケーションの一部であるかのように感じられます。Android では、両方のアクティビティを同じタスクに組み込むことで、このようなユーザー エクスペリエンスを実現できます。簡単に言えば、ユーザーが 1 つの「アプリケーション」と感じるものがタスクです。関連するアクティビティをスタックにまとめたものがタスクです。スタック内のルート アクティビティは、タスクを開始するアクティビティです。通常であれば、ユーザーがアプリケーション ランチャで選択するアクティビティがこれに相当します。スタックの最上位にあるアクティビティは、ユーザーのアクションの焦点となっている実行中のアクティビティです。あるアクティビティから別のアクティビティを開始すると、そのアクティビティが新たにスタックにプッシュされて実行中のアクティビティになります。1 つ前のアクティビティはスタック内に残されています。ユーザーが [[]戻る] キーを押すと、現在のアクティビティがスタックからポップされ、1 つ前のアクティビティが実行中のアクティビティとして再開されます。 +

+ +

+スタックはオブジェクトを保持します。したがって、同じ Activity サブクラスのインスタンス(たとえばマップ インスタンス)を複数開くと、それぞれのインスタンスが別々のエントリになります。スタック内のアクティビティは、プッシュまたはポップされるのみで再配置されることはありません。 +

+ +

+タスクはアクティビティのスタックであり、マニフェスト ファイル内のクラスや要素ではありません。したがって、アクティビティと無関係にタスクの値を設定することはできません。タスクの値は、ルート アクティビティでまとめて設定します。たとえば、次のセクションでは「タスクの親和性」について説明しますが、値はタスクのルート アクティビティの親和性のセットから読み込まれます。 +

+ +

+タスク内のアクティビティは、1 つのユニットとして一緒に移動します。タスク全体(アクティビティ スタック全体)をフォアグラウンドに移動したり、バックグラウンドに移動したりできます。たとえば、現在のタスクは 4 つのアクティビティからなるスタックで、現在のアクティビティの下にアクティビティが 3 つあるとします。ここで、ユーザーが [ホーム] キーを押してアプリケーション ランチャに移動し、新しいアプリケーション(実際には新しいタスク)を選択したとします。すると、現在のタスクはバックグラウンドに移動し、新しいタスクのルート アクティビティが表示されます。しばらくして、ユーザーがホーム画面に戻り 1 つ前のアプリケーション(タスク)を選択すると、そのタスクがスタック内の 4 つのアクティビティとともにフォアグラウンドに移動します。ここでユーザーが [戻る] キーを押しても、中断したばかりのアプリケーション(1 つ前のタスクのルート アクティビティ)は表示されません。代わりに、スタックの最上位のアクティビティがポップされ、同じタスクの 1 つ前のアクティビティが表示されます。 +

+ +

+アクティビティとタスクの動作としては、ここで説明した動作がデフォルトです。ただし、この動作のほとんどの要素は変更可能です。タスクとアクティビティの関連付けやタスク内でのアクティビティの動作は、アクティビティを開始した Intent オブジェクトのフラグ セットと、マニフェストに指定されているアクティビティの <activity> 要素の属性セットとの相互作用によって決まります。リクエスト側と応答側の両方が動作に影響を及ぼします。 +

+ +

+この点において、主に使用する Intent フラグは以下のとおりです: + +

{@code FLAG_ACTIVITY_NEW_TASK}
{@code FLAG_ACTIVITY_CLEAR_TOP}
{@code FLAG_ACTIVITY_RESET_TASK_IF_NEEDED}
{@code FLAG_ACTIVITY_SINGLE_TOP}

+ +

+また、主に使用する {@code <activity>} 属性は以下のとおりです: + +

{@code taskAffinity}
{@code launchMode}
{@code allowTaskReparenting}
{@code clearTaskOnLaunch}
{@code alwaysRetainTaskState}
{@code finishOnTaskLaunch}

+ +

+以降のセクションでは、これらのフラグや属性の役割、相互作用の仕組み、使用する際の留意事項などについて説明します。 +

+ + +

親和性と新しいタスク

+ +

+デフォルトでは、アプリケーション内のすべてのアクティビティは相互に親和性があり、すべてのアクティビティができる限り同じタスクに属そうとします。ただし、{@code <activity>} 要素の {@code taskAffinity} 属性を使用して、アクティビティごとに個別の親和性を設定することもできます。つまり、別々のアプリケーションで定義されているアクティビティで親和性を共有したり、同じアプリケーションで定義されているアクティビティに別々の親和性を割り当てたりできるということです。親和性が作用する状況は 2 つあります。1 つはアクティビティを起動する Intent オブジェクトに {@code FLAG_ACTIVITY_NEW_TASK} フラグが含まれている場合、もう 1 つはアクティビティの {@code allowTaskReparenting} 属性が "{@code true}" に設定されている場合です。 +

+ +
+
{@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK} フラグ
+
既に説明したとおり、新しいアクティビティは、デフォルトでは {@code startActivity()} を呼び出したアクティビティのタスクの一部として起動します。つまり、呼び出し側のアクティビティと同じスタックにプッシュされるということです。しかし、{@code startActivity()} に渡された Intent オブジェクトに {@code FLAG_ACTIVITY_NEW_TASK} フラグが含まれている場合、システムはその新しいアクティビティを別のタスクに収容しようとします。フラグの名前からも判断できますが、ほとんどの場合は新しいタスクが開始されます。ただし常にそうなるとは限りません。既存のタスクに新しいアクティビティと同じ親和性が割り当てられている場合、そのアクティビティはそのタスクの一部として起動します。そうでない場合には、新しいタスクが開始されます。
+ +
allowTaskReparenting 属性
+
{@code allowTaskReparenting} 属性が "{@code true}" に設定されているアクティビティは、そのアクティビティと親和性のあるタスクがフォアグラウンドに移ったときに、アクティビティを開始したタスクから親和性のあるタスクに移動できます。たとえば、旅行アプリケーションの一部として、選択された都市の天気予報を表示するアクティビティが定義されているとします。このアクティビティには、同じアプリケーション内の他のアクティビティと同じ親和性(デフォルトの親和性)が割り当てられていますが、その親の割り当てを変更することも可能です。あるアクティビティが天気予報アクティビティを開始すると、その時点では開始側のアクティビティと同じタスクに属した状態になります。しかし、次に旅行アプリケーションがフォアグラウンドに移ると、天気予報アクティビティの割り当てが変更され、旅行アプリケーションのタスクの一部として表示されます。
+
+ +

+ユーザーから見て複数の「アプリケーション」が 1 つの {@code .apk} ファイルに含まれている場合は、それぞれのアプリケーションに関連付けられているアクティビティに別々の親和性を割り当てることをおすすめします。 +

+ + +

起動モード

+ +

+launchMode 属性の {@code <activity>} 要素には、以下の 4 種類の起動モードを割り当てることができます: +

+ +

"{@code standard}"(デフォルト モード)
"{@code singleTop}"
"{@code singleTask}"
"{@code singleInstance}"

+ +

+これらのモードは、それぞれが以下の 4 つの点で異なります: +

+ + + +

+既存のアクティビティで新しいインテントを処理することになった場合は、{@link android.app.Activity#onNewIntent onNewIntent()} の呼び出しによって Intent オブジェクトがアクティビティに渡されます(最初にアクティビティを開始したインテント オブジェクトは {@link android.app.Activity#getIntent getIntent()} を呼び出して取得できます)。 +

+ +

+なお、新しいインテントを処理するためにアクティビティの新しいインスタンスが作成された場合、ユーザーは [[]戻る] キーを押して 1 つ前の状態(1 つ前のアクティビティ)に戻ることができます。しかし、アクティビティの既存のインスタンスで新しいインテントを処理する場合は、[[]戻る] キーを押しても、新しいインテントが届く前にそのインスタンスで処理していた作業に戻ることはできません。 +

+ +

+起動モードについて詳しくは、<activity> 要素の説明をご覧ください。 +

+ + +

スタックのクリア

+ +

+ユーザーがタスクを長時間放置すると、タスクのルート アクティビティを除くすべてのアクティビティがクリアされます。ユーザーがタスクに戻ると、タスクは以前のように表示されますが、残っているのは最初のアクティビティだけです。つまり、一定の時間が経過していればユーザーは以前の作業を放棄していて、新しい作業をするためにそのタスクに戻ってきたと考えるわけです。 +

+ +

+これがデフォルトです。この動作を変更したい場合は、以下のアクティビティ属性を使用します: +

+ +
+
alwaysRetainTaskState 属性
+
タスクのルート アクティビティでこの属性を "{@code true}" に設定すると、上で説明したデフォルトの動作は発生しません。長時間経過しても、タスク内のすべてのアクティビティはそのまま残されます。
+ +
clearTaskOnLaunch 属性
+
タスクのルート アクティビティでこの属性を "{@code true}" に設定した場合、ユーザーがいったんタスクを離れると、戻ったときにはルートを含むすべてのアクティビティがクリアされています。つまり、{@code alwaysRetainTaskState} の正反対の動作になります。ユーザーが一瞬でもタスクを離れると、最初の状態からやり直すことになります。
+ +
finishOnTaskLaunch 属性
+
この属性は {@code clearTaskOnLaunch} に似ていますが、タスク全体ではなく単一のアクティビティに作用します。また、ルート アクティビティを含むどのアクティビティもクリアの対象となりえます。この属性が "{@code true}" に設定されたアクティビティは、現在のセッションの間のみタスクの一部を形成します。ユーザーがいったんそのタスクから離れてから、再度タスクに戻ると、このアクティビティはクリアされています
+
+ +

+アクティビティをスタックから削除する方法は他にもあります。Intent オブジェクトに {@link +android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP FLAG_ACTIVITY_CLEAR_TOP} フラグが含まれており、そのインテントを処理すべきタイプのアクティビティのインスタンスが対象タスクのスタック内に存在する場合は、そのインスタンスがスタックの最上位になってインテントに応答できるよう、それより上位のアクティビティはすべてクリアされます。指定されたアクティビティの起動モードが "{@code standard}" である場合は、そのアクティビティもスタックから削除され、新しいインスタンスが起動してインテントを処理します。起動モード "{@code standard}" では、新しいインテントを処理する際、常に新しいインスタンスが作成されるためです。 +

+ +

+{@code FLAG_ACTIVITY_CLEAR_TOP} は、ほとんどの場合 {@code FLAG_ACTIVITY_NEW_TASK} と組み合わせて使用します。これらのフラグを組み合わせると、別のタスクに既に存在しているアクティビティを探し、それをインテントに応答できる位置に配置できます。 +

+ + +

タスクの開始

+ +

+アクティビティをタスクのエントリ ポイントとして設定するには、アクションとして "{@code android.intent.action.MAIN}"、カテゴリとして "{@code android.intent.category.LAUNCHER}" を指定したインテント フィルタをアクティビティに追加します(このタイプのフィルタの例については、インテント フィルタをご覧ください)。このタイプのフィルタを追加すると、アクティビティのアイコンとラベルがアプリケーション ランチャに表示されます。これにより、ユーザーがタスクを起動するための手段を提供できるだけでなく、起動後はいつでもそのタスクに戻れるようにすることができます。 +

+ +

+この 2 番目の機能、つまりユーザーがいったんタスクを離れても後で戻ることができるようにする点が重要です。この理由から、アクティビティに {@code MAIN} と {@code LAUNCHER} フィルタが指定されている場合は、必ずタスクが開始される起動モード("{@code singleTask}" または "{@code singleInstance}")を使用する必要があります。たとえば、このフィルタを指定しなかった場合を考えてみましょう。インテントが "{@code singleTask}" アクティビティを起動し、新しいタスクが開始され、ユーザーがしばらくの間このタスクで作業を行います。その後、ユーザーが [ホーム] キーを押したとします。ホーム画面が表示され、先ほどのタスクはバックグラウンドに移動します。しかし、このタスクはアプリケーション ランチャには表示されていないため、ユーザーがタスクに戻るための手段がありません。 +

+ +

+{@code FLAG_ACTIVITY_NEW_TASK} フラグにも、これと同じような難しさがあります。このフラグを指定したアクティビティでは、新しいタスクを開始した後にユーザーが [ホーム] キーを押してそのタスクを離れた場合に備え、タスクに戻るための手段を用意しておく必要があります。一部のエンティティ(たとえば通知マネージャ)は、アクティビティを常に外部タスクとして開始します。エンティティの一部として開始することはないため、{@code startActivity()} に渡すインテントには必ず {@code FLAG_ACTIVITY_NEW_TASK} を指定します。外部エンティティから呼び出すことのできるアクティビティでこのフラグが使用されている可能性がある場合は、開始されたタスクにユーザーが戻るための手段を別途提供するようにしてください。 +

+ +

+ユーザーがアクティビティに戻ることができるようにしない場合は、{@code <activity>} 要素の {@code finishOnTaskLaunch} を "{@code true}" に設定します。詳しくは、スタックのクリアをご覧ください。 +

+ + +

プロセスとスレッド

+ +

+Android では、最初のアプリケーション コンポーネントを実行する必要が生じると、そのための Linux プロセスを単一の実行スレッドで開始します。デフォルトでは、アプリケーションのすべてのコンポーネントがそのプロセスとスレッドで実行されます。 +

+ +

+ただし、コンポーネントが他のプロセスで実行されるようにしたり、特定のプロセスに使用する追加スレッドを生成したりすることも可能です。 +

+ + +

プロセス

+ +

+コンポーネントを実行するプロセスは、マニフェスト ファイルで管理します。コンポーネントの各要素({@code <activity>}、{@code <service>}、{@code <receiver>}、および {@code <provider>})には {@code process} 属性があり、そのコンポーネントをどのプロセスで実行すべきかを指定できるようになっています。これらの属性の設定によって、それぞれのコンポーネントを専用のプロセスで実行したり、一部のコンポーネントだけでプロセスを共有したりできます。また、別々のアプリケーションのコンポーネントが、同じプロセスで実行されるように設定することもできます。この場合は、それらのアプリケーションが同じ Linux ユーザー ID を共有し、同じ認証機関によって署名されている必要があります。{@code <application>} 要素にも {@code process} 属性があり、すべてのコンポーネントに適用されるデフォルト値を設定できます。 +

+ +

+すべてのコンポーネントは指定されたプロセスのメイン スレッドでインスタンス化され、コンポーネントに対するシステム コールはそのスレッドからディスパッチされます。1 つのインスタンスに対して、複数のスレッドが作成されることはありません。したがって、システム コールに応答するメソッド(たとえば、後ほどコンポーネント ライフサイクルで説明するライフサイクル通知や、ユーザーのアクションを報告する {@link android.view.View#onKeyDown View.onKeyDown()} のようなメソッド)は、常にそのプロセスのメイン スレッドで実行されます。つまり、コンポーネントがシステムから呼び出されたときに、プロセス内の他のコンポーネントの実行を妨げないよう、実行に時間がかかる処理や他の妨げになることの多い処理(ネットワーク処理、ループ計算など)をできる限り避ける必要があるということです。時間がかかる処理には別のスレッドを生成できます。詳しくは、次のスレッド セクションをご覧ください。 +

+ +

+状況によっては、Android がプロセスを終了させるべきと判断する場合があります。たとえば、メモリが不足してきた場合や、他のプロセスでユーザーにすばやく応答する必要がある場合です。プロセスが終了すると、そのプロセス内で実行されているアプリケーション コンポーネントは破棄されます。それらのコンポーネントで処理する作業がもう一度発生すると、そのためのプロセスが再び開始されます。 +

+ +

+Android では、どのプロセスを終了させるかを判断するため、ユーザーにとっての相対的な重要度を重み付けして管理します。たとえば、アクティビティがまだ画面に表示されているプロセスを終了させるよりも、アクティビティが画面に表示されていないプロセスを終了させる方が合理的です。したがって、プロセスを終了させるかどうかは、そのプロセスで実行されているコンポーネントの状態に応じて判断されるということです。コンポーネントの状態については、後ほどコンポーネントのライフサイクルで詳しく説明します。 +

+ + +

スレッド

+ +

+アプリケーションを単一のプロセスに限定したとしても、バックグラウンドでの処理にスレッドが必要になることはよくあります。ユーザー インターフェースはユーザーのアクションに対して常にすばやく応答できなければならないため、アクティビティをホストするスレッドで、ネットワーク ダウンロードのような時間のかかる処理を一緒にホストしないようにする必要があります。すぐに完了しない可能性のあるすべての処理は、別のスレッドに割り当てるようにしてください。 +

+ +

+スレッドは、標準の Java {@link java.lang.Thread} オブジェクトを使用してコード内で作成します。Android には、スレッドを管理するための便利なクラスが数多く用意されています。たとえば、スレッド内でメッセージ ループを実行するための {@link android.os.Looper}、メッセージを処理するための {@link android.os.Handler}、メッセージ ループでスレッドを設定するための {@link android.os.HandlerThread} などがあります。 +

+ + +

リモート プロシージャ コール

+ +

+Androidは軽量な仕組みのリモート・プロシージャ・コール (RPC) を採用しています。RPC とは、メソッドをローカルで呼び出しますが、実行はリモート(別のプロセス)で行い、その結果を呼び出し側に返します。そのためには、メソッド呼び出しとそれに付随するデータをオペレーティングシステムが解釈できるレベルまで分解してから、それらをローカルのプロセスとアドレス空間からリモートのプロセスとアドレス空間に転送し、リモートで呼び出しを再構築する必要があります。戻り値は、反対方向に転送しなければなりません。Android にはこの処理を行うためのコードがすべて用意されているため、RPC インターフェースを定義して実装するだけで RPC を利用できます。 +

+ +

+RPC インターフェースに含めることができるのはメソッドのみです。すべてのメソッドは、戻り値がない場合でも同期的に実行されます(つまり、リモート メソッドが完了するまでローカル メソッドがブロックされます)。 +

+ +

+このメカニズムを簡単に説明すると次のようになります。まず、シンプルなインターフェース定義言語(IDL)を使用して、実装したい RPC インターフェースを宣言します。aidl ツールにより、RPC インターフェースの宣言から Java インターフェース定義が生成されます。この定義は、ローカルとリモートの両方のプロセスで使用する必要があります。定義には、次の図に示すように 2 つの内部クラスが含まれています: +

+ +

+RPC のメカニズム +

+ +

+これらの内部クラスには、IDL で宣言したインターフェースのリモート プロシージャ コールを管理するために必要なコードがすべて含まれています。どちらの内部クラスも {@link android.os.IBinder} インターフェースを実装します。一方の内部クラスは、ローカルのシステムで内部的に使用しますが、記述するコードでは無視しても構いません。もう一方の内部クラスはスタブと呼ばれ、{@link android.os.Binder} クラスを拡張します。スタブには、IPC(プロセス間通信)呼び出しを発生させるための内部コードに加え、IDL で宣言した RPC インターフェース内のメソッドの宣言が含まれます。これらのメソッドを実装するには、図に示すようにスタブをサブクラス化します。2つの内部クラスのうちの一方は、システムがローカルかつ内部的に使用するので、開発者が記述するコードでは無視してかまいません。... リモート側では、図のようにスタブをサブクラス化して、これらのメソッドを実装する必要があります。 +

+ +

+ 通常、リモート プロセスはサービスで管理します。サービスなら、プロセスや他のプロセスへの接続に関する情報をシステムに伝えることができるからです。サービスには、{@code aidl} ツールで生成されたインターフェース ファイルと、RPC メソッドを実装するスタブ サブクラスの両方を持たせることになります。サービスのクライアントには、{@code aidl} ツールで生成されたインターフェース ファイルのみを持たせます。 +

+ +

+以下に、サービスとそのクライアントの間の接続がどのように設定されるかを示します: +

+ + + +

+ここでは、説明を簡単にするため、RPC メカニズムの細かい点は省略しています。詳しくは、Designing a Remote Interface Using AIDL、および {@link android.os.IBinder IBinder} クラスの説明をご覧ください。 +

+ + +

スレッドセーフなメソッド

+ +

+状況によっては実装したメソッドが複数のスレッドから呼び出されることもあるため、スレッドセーフな記述を心掛ける必要があります。 +

+ +

+前のセクションで説明した RPC のようにメソッドをリモートで呼び出すことができる場合は、このような状況が特に発生しやすくなります。IBinder オブジェクトに実装されているメソッドを IBinder と同じプロセスから呼び出すと、そのメソッドは呼び出し側のスレッドで実行されます。一方、別のプロセスからメソッドを呼び出した場合は、プロセスのメイン スレッドではなく、IBinder と同じプロセス内に保持されているスレッドのプールから選択されたスレッドで実行されます。たとえば、サービスの {@code onBind()} メソッドはそのサービスのプロセスのメイン スレッドから呼び出されるのに対し、{@code onBind()} から返されたオブジェクトに実装されているメソッド(たとえば RPC メソッドを実装するスタブ サブクラス)はプール内のスレッドから呼び出されます。サービスには複数のクライアントを割り当てることができるため、複数のプール スレッドを同じ IBinder に同時に割り当てることも可能です。したがって、IBinder メソッドはスレッドセーフになるように実装する必要があります。 +

+ +

+同様に、コンテンツ プロバイダも別のプロセスからのデータ リクエストを受け取ることができます。ContentResolver および ContentProvider クラスはプロセス間通信の管理の詳細を隠蔽しますが、それらのリクエストに応答する ContentProvider メソッド({@link android.content.ContentProvider#query query()}、{@link android.content.ContentProvider#insert insert()}、{@link android.content.ContentProvider#delete delete()}、{@link android.content.ContentProvider#update update()}、および {@link android.content.ContentProvider#getType getType()} メソッド)は、プロセスのメイン スレッドではなく、コンテンツ プロバイダのプロセス内のスレッドのプールから呼び出されます。これらのメソッドを同時に呼び出すことのできるメソッドの数に制限はありません。したがって、これらのメソッドもスレッドセーフになるように実装する必要があります。 +

+ + +

コンポーネントのライフサイクル

+ +

+アプリケーション コンポーネントにはライフサイクルがあります。ライフサイクルは、インテントへ応答することでのインスタンス化で始まり、そのインスタンスの破棄で終わります。この間、コンポーネントがアクティブなときとアクティブでないときがあり、アクティビティであればユーザーから見えるときと見えないときがあります。このセクションでは、アクティビティ、サービス、およびブロードキャスト レシーバのライフサイクルについて説明します。具体的には、それぞれがライフタイムの間に取ることのできる状態、状態の遷移を通知する方法、およびそれらの状態が、コンポーネントを実行しているプロセスが終了させられたり、インスタンスが破棄されたりする可能性への影響などについて説明します。 +

+ + +

アクティビティのライフサイクル

+ +

アクティビティは、基本的に以下の 3 つの状態を取ります:

+ + + +

+システムが一時停止または停止しているアクティビティをメモリから削除する場合は、アクティビティの {@link android.app.Activity#finish finish()} メソッドを呼び出して終了を要求するか、単純のそのプロセスを強制終了します。そのアクティビティをもう一度ユーザーに表示する際は、完全に再起動して以前の状態に復元する必要があります。 +

+ +

+アクティビティがある状態から別の状態に遷移すると、以下の protected メソッドに対する呼び出しによって変更が通知されます: +

+ +

{@code void onCreate(Bundle savedInstanceState)}
{@code void onStart()}
{@code void onRestart()}
{@code void onResume()}
{@code void onPause()}
{@code void onStop()}
{@code void onDestroy()}

+ +

+これらのメソッドはすべて、状態が変化したときに適切な処理を行うためにオーバーライドできるフックです。オブジェクトが初めてインスタンス化されたときに初期設定を行うため、すべてのアクティビティには {@link android.app.Activity#onCreate onCreate()} を実装する必要があります。多くのアクティビティには、データの変更をコミットするための {@link android.app.Activity#onPause onPause()} も実装します。これを実装しない場合は、何らかの方法でユーザーとの対話を停止できるようにしておく必要があります。 +

+ + + + +

+これら 7 つのメソッドを使用すると、アクティビティのライフサイクル全体を定義できます。これらを実装することで、ネストされた 3 つのループからなるアクティビティのライフサイクルを監視できます: +

+ + + +

+次の図に、これらのループとアクティビティの遷移経路を示します。色の付いた楕円は、アクティビティが取ることのできる主な状態です。長方形は、アクティビティが状態間を遷移するときに処理を実行するために実装できるコールバック メソッドを表します。 +

+ +

+ +

+次の表では、各メソッドについて詳しく説明し、ライフサイクル全体における位置付けを示します: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
メソッド 説明 強制終了 次
{@link android.app.Activity#onCreate onCreate()}アクティビティが初めて作成されるときに呼び出されます。通常の静的な設定(ビューの作成、リストへのデータのバインドなど)は、すべてのこのメソッドで行う必要があります。このアクティビティの 以前の状態が保存されていた場合、このメソッドにはその状態を保持している Bundle オブジェクトが引数として(詳しくは、後述のアクティビティの状態の保存をご覧ください)。 +

この後には、必ず {@code onStart()} が呼び出されます。

不可{@code onStart()}
    {@link android.app.Activity#onRestart +onRestart()}アクティビティが停止した後、それをもう一度開始する直前に呼び出されます。 +

この後には、必ず {@code onStart()} が呼び出されます。

不可{@code onStart()}
{@link android.app.Activity#onStart onStart()}アクティビティがユーザーから見えるようになる直前に呼び出されます。 +

その後、アクティビティがフォアグラウンドに表示された場合は {@code onResume()} が、他のアクティビティの後ろに隠れた場合は {@code onStop()} が呼び出されます。

不可{@code onResume()}
または
{@code onStop()}
    {@link android.app.Activity#onResume onResume()}アクティビティがユーザーとの対話を開始する直前に呼び出されます。この時点で、アクティビティはアクティビティ スタックの最上位にあり、ユーザーからの入力はこのアクティビティに対して行われます。 +

この後には、必ず {@code onPause()} が呼び出されます。

不可{@code onPause()}
{@link android.app.Activity#onPause onPause()}システムが別のアクティビティを開始しようとしているときに呼び出されます。このメソッドは、保存されていない変更を永続データにコミットする場合や、アニメーションのように CPU を大量に消費する処理を停止する場合に使用するのが一般的です。このメソッドが終了するまでは次のアクティビティが開始されたないため、できる限り短時間で実行できるようにしておく必要があります。 +

その後、アクティビティがフォアグラウンドに戻った場合は {@code onResume()} が、ユーザーから見えなくなった場合は {@code onStop()} が呼び出されます。

可能{@code onResume()}
または
{@code onStop()}
{@link android.app.Activity#onStop onStop()}アクティビティがユーザーから見えなくなったときに呼び出されます。見えなくなる状況としては、アクティビティが破棄された場合や、再開された別のアクティビティ(既存か新規かを問わず)によって隠された場合が考えられます。 +

その後、アクティビティがユーザーとの対話に戻った場合は {@code onRestart()} が、アクティビティが完全に終了する場合は {@code onDestroy()} が呼び出されます。

可能{@code onRestart()}
または
{@code onDestroy()}
{@link android.app.Activity#onDestroy +onDestroy()}アクティビティが破棄される前に呼び出されます。これが、アクティビティが受け取る最後の呼び出しとなります。このメソッドが呼び出される状況としては、アクティビティが完了する場合({@link android.app.Activity#finish + finish()} が呼び出されたとき)や、システムが領域を確保するために一時的にそのアクティビティのインスタンスを破棄する場合が考えられます。これらの 2 つの状況は、{@link + android.app.Activity#isFinishing isFinishing()} メソッドを使用して識別できます。可能なし
+ +

+表の強制終了列に注目してください。この列は、メソッドが終了した後であれば、システムがアクティビティのコードの別の行を実行することなくいつでもアクティビティを実行しているプロセスを強制終了できるかどうかを示しています。{@code onPause()}、{@code onStop()}、および {@code onDestroy()} メソッドの 3 つは「可能」となっています。1 番目に挙げた {@code onPause()} だけは、プロセスが強制終了する前に必ず呼び出されます。{@code onStop()} と {@code onDestroy()} は、必ず呼び出されるとは限りません。したがって、永続データ(たとえばユーザーによる編集)をストレージに書き込む際は {@code onPause()} を使用する必要があります。 +

+ +

+強制終了列が「不可」になっているメソッドは、それらが呼び出された瞬間から、アクティビティを実行しているプロセスを保護して強制終了されないようにします。したがって、アクティビティが強制終了可能な状態にあるのは、たとえば {@code onPause()} が返されてから {@code onResume()} が呼び出されるまでの間ということです。その後は、もう一度 {@code onPause()} が返されるまで、強制終了できる状態には戻りません。 +

+ +

+後述のプロセスとライフサイクルのセクションで詳しく説明しますが、ここでの定義で技術的には「強制終了可能」でないアクティビティでも、システムによって強制終了させられる可能性はありますが、他に利用できるリソースがないなど、極端に急を要する場合に限られます。 +

+ + +

アクティビティの状態の保存

+ +

+メモリ不足を補うためにユーザーではなくシステムがアクティビティを終了させた場合には,ユーザがそのアクティビティに戻ったときに、以前の状態のままであることを期待するでしょう。 +

+ +

+アクティビティが強制終了させられる前の状態を保存しておきたい場合は、アクティビティに {@link android.app.Activity#onSaveInstanceState +onSaveInstanceState()} メソッドを実装します。このメソッドは、アクティビティが破棄されやすい状態になる前(つまり {@code onPause()} が呼び出される前)に呼び出されます。その際、アクティビティの動的な状態を名前/値ペアとして記録できる {@link android.os.Bundle} オブジェクトが渡されます。アクティビティがもう一度開始されると、Bundle は {@code onCreate()} だけでなく、{@code onStart()} の後に呼び出される {@link +android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} メソッドにも渡され、保存されている状態をそのどちらかまたは両方で復元できます。 +

+ +

+{@code onSaveInstanceState()} および {@code onRestoreInstanceState()} メソッドは、これまでに説明した {@code onPause()} などとは異なり、ライフサイクル メソッドではありません。これらのメソッドは、常に呼び出されるわけではありません。たとえば、{@code onSaveInstanceState()} は、システムによってアクティビティが破棄しやすい状態にされる前には呼び出されますが、ユーザーのアクション(たとえば [[]戻る] キー)によってインスタンスが実際に破棄されるときには呼び出されません。そのような場合は、ユーザーがそのアクティビティに戻ることを想定する必要はないため、状態を保存する理由がないのです。 +

+ +

+{@code onSaveInstanceState()} は常に呼び出されるとは限らないため、アクティビティの一時的な状態を記録する目的のみに使用し、永続データの格納には使用しないようにしてください。この目的には {@code onPause()} を使用します。 +

+ + +

アクティビティの協調

+ +

+あるアクティビティが別のアクティビティを開始すると、両方のアクティビティのライフサイクル状態が遷移します。一方が一時停止または停止し、もう一方が開始されます。場合によっては、これらの協調させる必要があります。 +

+ +

+ライフサイクルのコールバックの順序は明確に定義されており、特に 2 つのアクティビティが同じプロセス内に存在する場合は次のようになります: +

+ +
    +
  1. 現在のアクティビティの {@code onPause()} メソッドが呼び出されます。
  2. + +
  3. 続いて、開始されるアクティビティの {@code onCreate()}、{@code onStart()}、および {@code onResume()} メソッドが順番に呼び出されます。
  4. + +
  5. その後、開始されたアクティビティが画面上で見えなくなると、その {@code onStop()} メソッドが呼び出されます。
  6. +
+ + +

サービスのライフサイクル

+ +

+サービスは、以下の 2 つの方法で使用できます: +

+ + + +

+これら 2 つのモードは、完全に分離されているわけではありません。{@code startService()} で開始されたサービスにバインドすることも可能です。たとえば、再生する曲を指定した Intent オブジェクトで {@code startService()} を呼び出して音楽再生サービスを開始したとします。その後、たとえばユーザーがプレーヤーを操作したい場合や再生中の曲に関する情報を入手したい場合には、アクティビティから {@code bindService()} を呼び出してサービスとの接続を確立できます。このような場合、最後のバインドが閉じられるまでは、{@code stopService()} を呼び出してもサービスは停止しません。 +

+ +

+アクティビティと同様、サービスにもライフサイクル メソッドがあり、これらを実装することでサービスの状態の変化を監視できます。ただし、protected ではなく public で、以下の 3 つしかありません: +

+ +

{@code void onCreate()}
{@code void onStart(Intent intent)}
{@code void onDestroy()}

+ +

+これらのメソッドを実装することで、ネストされた 2 つのループからなるサービスのライフサイクルを監視できます: +

+ + + +

+{@code onCreate()} および {@code onDestroy()} メソッドは、サービスを {@link android.content.Context#startService Context.startService()} または {@link android.content.Context#bindService Context.bindService()} のどちらで開始したかに関係なく、すべてのサービスで呼び出されます。一方、{@code onStart()} は、サービスを {@code startService()} で開始した場合のみ呼び出されます。 +

+ +

+サービスが他からのバインドを許可している場合は、以下のコールバック メソッドを追加で実装できます: +

+ +

{@code IBinder onBind(Intent intent)}
{@code boolean onUnbind(Intent intent)}
{@code void onRebind(Intent intent)}

+ +

+{@link android.app.Service#onBind onBind()} コールバックには {@code bindService()} に渡された Intent オブジェクトが渡され、{@link android.app.Service#onUnbind onUnbind()} には {@code unbindService()} 渡された Intent オブジェクトが渡されます。サービスがバインドを許可している場合は、クライアントがサービスと対話する通信チャネルを {@code onBind()} で返します。{@code onUnbind()} メソッドは、サービスに新しいクライアントが接続した場合に {@link android.app.Service#onRebind onRebind()} の呼び出しを要求できます。 +

+ +

+次の図に、サービスのコールバック メソッドを示します。なお、{@code startService()} で作成されたサービスと、{@code bindService()} で作成されたサービスを分けて記述していますが、作成された方法に関係なく,すべてのサービスはクライアントからのバインドを許可できます。したがって、どのサービスも {@code onBind()} および{@code onUnbind()} メソッドの呼び出しを受け取る可能性はあります。 +

+ +

+ + +

ブロードキャスト レシーバのライフサイクル

+ +

+ブロードキャスト レシーバのコールバック メソッドは次の 1 つのみです: +

+ +

{@code void onReceive(Context curContext, Intent broadcastMsg)}

+ +

+レシーバにブロードキャスト メッセージが届くと、{@link android.content.BroadcastReceiver#onReceive onReceive()} メソッドが呼び出され、メッセージを保持する Intent オブジェクトが渡されます。ブロードキャスト レシーバは、このメソッドの実行中のみアクティブと見なされます。{@code onReceive()} 終了すると、ブロードキャスト レシーバはアクティブでなくなります。 +

+ +

+ブロードキャスト レシーバがアクティブになっているプロセスは、強制終了しないよう保護されます。一方、アクティブでないコンポーネントのみからなるプロセスは、それが消費しているメモリが他のプロセスで必要になった場合は、いつでも強制終了される可能性があります。 +

+ +

+この点は、ブロードキャスト メッセージへの応答に時間がかかるため、ユーザー インターフェースの他のコンポーネントを実行しているメイン スレッドとは別のスレッドで何らかの処理を行う必要がある場合に問題になります。{@code onReceive()} が新しいスレッドを生成して終了した場合、プロセス内に他にアクティブなアプリケーション コンポーネントがなければ、そのスレッドを含めたプロセス全体がアクティブでないと判断されて強制終了させられるおそれがあります。この問題を回避するには、{@code onReceive()} でサービスを開始し、そのサービスにジョブを実行させます。これにより、プロセス内にまだアクティブなコンポーネントがあると見なされます。 +

+ +

+次のセクションでは、プロセスが強制終了される可能性が高くなる状況についてさらに詳しく説明します。 +

+ + +

プロセスとライフサイクル

+ +

Android は、プロセスをできるだけ長い間維持しようとします。しかし、最終的にメモリが不足したときには、古いプロセスを削除しなければならなくなります。Android では、どのプロセスを維持し、どのプロセスを強制終了させるかを判断するため、プロセス内で実行されているコンポーネントと各コンポーネントの状態に基づいて、各プロセスを「重要度の階層」の位置づけます。まず最も重要度の低いプロセスが削除され、次は 2 番目に重要度の低いプロセス、その次に 3 番目、というように判断されます。階層は 5 つのレベルで構成されます。以下では、重要度の高いものから順に説明します: +

+ +
    + +
  1. フォアグラウンド プロセスは、ユーザーがその時点で行っている作業に必要なプロセスです。以下のいずれかの条件を満たしているプロセスは、フォアグラウンド プロセスと見なされます: + + + +

    +同時に存在するフォアグラウンド プロセスは少数に限られています。フォアグラウンド プロセスは、メモリが極端に不足し、すべてのフォアグラウンド プロセスの実行を継続できない場合の最終手段として強制終了させられます。通常、その時点でデバイスはメモリ ページングの状態に達しており、ユーザー インターフェースを応答可能な状態に維持するためには、フォアグラウンド プロセスの一部を強制終了させなければならない状況に陥っています。 +

  2. + +
  3. 可視プロセスは、フォアグラウンド コンポーネントではないものの、ユーザーが見ている画面に影響を及ぼすことのできるプロセスです。以下のいずれかの条件を満たしているプロセスは、可視プロセスと見なされます:

    + + + +

    +可視プロセスは、非常に重要なプロセスと見なされ、すべてのフォアグラウンド プロセスの実行を維持するために必要でない限り、強制終了させられることはありません。 +

  4. + +
  5. サービス プロセスは、{@link android.content.Context#startService startService()} メソッドで開始されたサービスを実行しているプロセスのうち、より重要度の高い 2 つのレベルのどちらにも該当しないプロセスです。サービス プロセスは、ユーザーに見えるものとの直接的な関係はありませんが、たとえばバックグラウンドでの MP3 の再生、ネットワークからのデータのダウンロードなど、ユーザーが気にかけている処理であることが一般的です。したがって、すべてのフォアグラウンド プロセスと可視プロセスに加え、これらのサービス プロセスの実行を維持するだけのメモリが確保できる限り、強制終了させられることはありません。 +

  6. + +
  7. バックグラウンド プロセスは、その時点でユーザーから見えないアクティビティを保持している(Activity オブジェクトの {@link android.app.Activity#onStop onStop()} メソッドが呼び出されている)プロセスです。これらのプロセスは、ユーザー エクスペリエンスに直接的には影響しておらず、フォアグラウンド、可視、サービス プロセスからメモリが要求された場合はいつでも強制終了する可能性があります。通常は数多くのバックグラウンド プロセスが実行されているため、それらを LRU(least recently used)リストに登録し、ユーザーが一番最近見たアクティビティのプロセスが最後に強制終了するような仕組みになっています。アクティビティにライフサイクル メソッドが正しく実装されており、現在の状態が正しく保存されていれば、プロセスを強制終了してもユーザー エクスペリエンスに悪影響が及ぶことはありません。 +

  8. + +
  9. 空のプロセスは、アクティブなアプリケーション コンポーネントを保持していないプロセスです。このようなプロセスを維持しておく唯一の理由は、これをキャッシュとして使用し、次回コンポーネントを実行するときの起動時間を短くするためです。多くの場合、システムはこれらのプロセスを強制終了させて、プロセス キャッシュとその基礎となるカーネル キャッシュの間でシステム リソース全体のバランスを取ります。

  10. + +
+ +

+各プロセスは、その時点でアクティブなコンポーネントの重要度に基づいて、そのプロセスが取りうる最も高いレベルにランク付けされます。たとえば、あるプロセスがサービスと可視アクティビティをホストしている場合、そのプロセスはサービス プロセスではなく可視プロセスとしてランク付けされます。 +

+ +

+また、あるプロセスに他のプロセスが依存しているために、そのプロセスのランクが引き上げられる可能性もあります。他のプロセスから依存されているプロセスが、依存しているプロセスよりも低いレベルにランク付けされることはありません。たとえば、プロセス A 内のコンテンツ プロバイダにプロセス B 内のクライアントが依存している場合や、プロセス A 内のサービスがプロセス B 内のコンポーネントにバインドされている場合、プロセス A は常にプロセス B よりは重要度が高いと見なされます。 +

+ +

+サービスを実行しているプロセスは、バックグラウンド アクティビティを実行しているプロセスよりも高くランク付けされます。したがって、時間のかかる処理を実行する場合、特にその処理がアクティビティよりも長く続くような場合は、単にスレッドを生成するのではなく、その処理用のサービスを開始することをおすすめします。たとえば、バックグラウンドで音楽を再生する場合や、カメラで撮影した写真を Web サイトにアップロードする場合などはこれに当たります。サービスを使用することで、アクティビティがどのような状況にあっても、処理の重要度として「サービス プロセス」レベル以上を維持できます。ブロードキャスト レシーバのライフサイクルのセクションでも説明しましたが、ブロードキャスト レシーバにおいてもこれと同じ理由で、処理に時間がかかる場合はスレッドではなくサービスを使用することをおすすめします。 +

diff --git a/docs/html/intl/ja/guide/tutorials/hello-world.jd b/docs/html/intl/ja/guide/tutorials/hello-world.jd new file mode 100644 index 0000000000000..31857cee8c1f4 --- /dev/null +++ b/docs/html/intl/ja/guide/tutorials/hello-world.jd @@ -0,0 +1,375 @@ +page.title=Hello, World +@jd:body + +
+
+

このドキュメントの内容

+
    +
  1. AVD の作成
  2. +
  3. プロジェクトを作成する
  4. +
  5. UI を構築する
  6. +
  7. コードを実行する
  8. +
  9. UI を XML レイアウトにアップグレードする
  10. +
  11. プロジェクトをデバッグする
  12. +
  13. Eclipse を使用せずにプロジェクトを作成する
  14. +
+
+
+ +

デベロッパーにとって、開発フレームワークの第一印象は、どれだけ簡単に「Hello, World」を記述できるかで決まります。Android では、非常に簡単に記述できます。総合開発環境として Eclipse を使用している場合には、開発は特に簡単です。プロジェクトの作成と管理に使用できる便利なプラグインが用意されており、開発サイクルを大幅にスピードアップできるためです。

+ +

Eclipse を使用していない場合でも問題ありません。Developing in Other IDEsに慣れてから、このチュートリアルに戻り、Eclipse に関する部分以外を参考にしてください。

+ +

開始する前に、最新の SDK がインストールされている必要があります。また、Eclipse を使用する場合には、ADT プラグインもインストールされている必要があります。これらのプログラムがインストールされていない場合は、「Installing the Android SDK」を参考にインストールを実行して、完了後にこのチュートリアルに戻ってください。

+ +

AVD の作成

+ + + +

このチュートリアルでは、開発したアプリケーションを Android エミュレータで実行します。エミュレータを起動するには、事前に Android 仮想デバイス(AVD)を作成する必要があります。AVD は、エミュレータが使用するシステム イメージとデバイスの設定を定義するものです。

+ +

AVD を作成するには、Android SDK に含まれている「android」ツールを使用します。コマンド プロンプトまたはターミナルを開き、SDK パッケージの中の tools/ ディレクトリに移動して、次のコマンドを実行します。 +

+android create avd --target 2 --name my_avd
+
+ +

カスタム ハードウェア プロファイルを作成するかどうかを尋ねられます。ここではひとまず、リターン キーを押してスキップします(デフォルトの回答は「No」となっています)以上で AVD の作成は終了です。この作業により、Android 1.5 プラットフォームを使用する「my_avd」という名前の AVD が構成されました。これで、AVD をエミュレータで使用できる状態になりました。

+ +

上記のコマンドで使用した --target オプションは、エミュレータを実行する配備ターゲットを指定するもので、必須オプションです。--name オプションは新規 AVD の名前を定義するもので、これも必須オプションです。

+ + +

新規 Android プロジェクトを作成する

+ +

AVD を作成したら、次は Eclipse 内で新規 Android プロジェクトを開始します。

+ +
    +
  1. Eclipse で、[[]ファイル(File)] > [[]新規(New)] > [[]プロジェクト(Project)] を選択します。 +

    ADT Plugin for Eclipse が正常にインストールされていれば、表示されるダイアログに、「Android」というラベルの付いたフォルダと、その中の「Android プロジェクト(Android Project)」が表示されます(1 つまたは複数の Android プロジェクトを作成した後は、「Android XML File」というエントリも表示されるようになります)。

    +
  2. + +
  3. 「Android プロジェクト(Android Project)」を選択して、[[]次へ(Next)] をクリックします。
    +
  4. + +
  5. プロジェクトの詳細項目に以下の値を入力します。 + +

    [[]完了(Finish)] をクリックします。

    + + + +

    各フィールドの説明は以下のとおりです。

    + +
    +
    プロジェクト名(Project Name)
    +
    Eclipse のプロジェクト名。プロジェクト ファイルを格納するディレクトリの名前です。
    +
    アプリケーション名(Application Name)
    +
    アプリケーション名はユーザーにわかりやすいアプリケーションのタイトルにします。この名前が Android 携帯端末に表示されます。
    +
    パッケージ名(Package Name)
    +
    作成したすべてのソース コードを格納するパッケージ ネームスペースです(Java プログラミング言語で作成するパッケージと同じルールに従います)。また、これにより、スタブ Activity が生成されるパッケージの名前も設定されます。 +

    パッケージ名は Android システムにインストールされたすべてのパッケージに共通して固有のものでなければなりません。このため、作成するアプリケーションに標準的なドメイン スタイルのパッケージを使用することが非常に重要です。上記の例では、「com.example」というネームスペースを使用しています。これはサンプル ドキュメント用のネームスペースです。実際にアプリケーションを作成する際には、所属する組織または法人に適切なネームスペースを使用します。

    +
    アクティビティを作成(Create Activity)
    +
    プラグインによって生成されるクラス スタブの名前です。クラス スタブは Android の {@link android.app.Activity} クラスのサブクラスとなります。アクティビティとは単に、実行して何らかの処理を行うことができるクラスを意味します。選択に応じて UI を作成することもできます(ただし必須ではありません)。チェックボックスになっていることからわかるように、これは任意選択の項目です。しかし、実際にはほとんどのアプリケーションでは、アクティビティをアプリケーションの基盤として使用しています。
    +
    SDK の最小バージョン(Min SDK Version)
    +
    作成するアプリケーションが必要とする最小 API レベルを指定する値です。ここに入力した API レベルが、選択可能なターゲットのいずれかで提供される API レベルと一致する場合は、ビルド ターゲットが自動的に選択されます(この例では、API レベルに「2」と入力するとターゲット Android 1.1 が選択されます)。Android システム イメージと Android SDK それぞれの新しいバージョンでは、API に追加または変更が加えられている可能性があります。追加または変更が加えられている場合、新しい API レベルがシステム イメージに割り当てられ、どのアプリケーションの実行を許可するかが規制されます。アプリケーションで必要な API レベルがデバイスでサポートされるレベルよりも高い場合、アプリケーションはインストールされません。
    +
    + +

    その他のフィールド: 「デフォルト ロケーションの使用」チェックボックスでは、プロジェクトのファイルが生成され保存されるディスク上の場所を変更することができます。「ビルド ターゲット」は、作成するアプリケーションがコンパイルされるときにターゲットとするプラットフォームです(この項目は [[]SDK の最小バージョン(Min SDK Version)] の入力値に基づいて自動的に選択されます)。

    + +

    ここで、選択した「ビルド ターゲット」で Android 1.1 プラットフォームが使用されることに注目してください。これは、作成するアプリケーションが Android 1.1 プラットフォーム ライブラリをターゲットとしてコンパイルされることを意味します。先ほど作成した AVD は Android 1.5 プラットフォームで実行されます。バージョンの数字が一致しませんが、Android アプリケーションには上方互換性があるため、1.1 プラットフォーム ライブラリをターゲットとして構築されたアプリケーションでも 1.5 プラットフォームで正常に動作します。ただしその逆の場合は正常に動作しません。

    +
  6. +
+ +

さて、これで Android プロジェクトを使用できる状態になりました。プロジェクトは左側のパッケージ エクスプローラー(Package Explorer)で表示できます。「HelloAndroid」 > 「src」 > 「com.example.helloandroid」 の中にある HelloAndroid.java ファイルを開きます。ファイルの内容は次のようになっています。

+ +
+package com.example.helloandroid;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+public class HelloAndroid extends Activity {
+    /** Called when the activity is first created. */
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.main);
+    }
+}
+ +

クラスが {@link android.app.Activity} クラスに基づいていることに注目してください。アクティビティ(Activity)とは、処理を実行するために使用される単体のアプリケーション エンティティです。1 つのアプリケーションにはいくつものアクティビティが含まれる場合がありますが、ユーザーが一度に操作するのは 1 つのアクティビティです。アクティビティが開始すると、Android システムによって {@link android.app.Activity#onCreate(Bundle) onCreate()} メソッドが呼び出されます。このタイミングですべての初期化と UI セットアップを実行します。アクティビティにユーザー インターフェースは必須ではありませんが、通常はユーザー インターフェースを装備します。

+ +

では、コードを変更してみましょう。

+ + +

UI を構築する

+ +

下記の変更済みのコードを参照して、お手元の HelloAndroid クラスに同じ変更を加えてみてください。太字の部分が追加された行です。

+ +
+package com.android.helloandroid;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.widget.TextView;
+
+public class HelloAndroid extends Activity {
+   /** Called when the activity is first created. */
+   @Override
+   public void onCreate(Bundle savedInstanceState) {
+       super.onCreate(savedInstanceState);
+       TextView tv = new TextView(this);
+       tv.setText("Hello, Android");
+       setContentView(tv);
+   }
+}
+ +

ヒント: プロジェクトにインポート パッケージを簡単に追加できる方法として、Ctrl+Shift+O(Mac では コマンド+Shift+O)を押す方法があります。これは、コードの記述に基づいて足りないパッケージを特定して追加する Eclipse のショートカット キーです。

+ +

Android のユーザー インターフェースは、「ビュー(Views)」と呼ばれるオブジェクトの階層で構成されています。{@link android.view.View} は、UI レイアウト内でボタン、画像、または(このサンプルのように)テキスト ラベルといった要素として使用される、描画可能なオブジェクトです。これらのオブジェクトのそれぞれが View クラスのサブクラスであり、テキストを処理するサブクラスは {@link android.widget.TextView} です。

+ +

この変更では、クラス コンストラクタを使用して TextView を作成します。このクラス コンストラクタは、パラメータとして Android {@link android.content.Context} インスタンスを受け入れます。Context とは、システムへのハンドルであり、リソースの解決、データベースや設定へのアクセスの取得などのサービスを提供します。Activity クラスは Context を継承します。作成する HelloAndroid クラスは、Activity のサブクラスであるため、Context でもあります。したがって、this を Context 参照として TextView に引き渡すことができます。

+ +

次に、{@link android.widget.TextView setText(CharSequence) setText()} を使用してテキスト コンテンツを定義します。

+ +

最後に、そのコンテンツが Activity UI のコンテンツとして表示されるように、TextView を {@link android.app.Activity#setContentView(View) setContentView()} に引き渡します。Activity によってこのメソッドが呼び出されなければ、UI は表示されず、空白の画面が表示されます。

+ +

これで、Android で「Hello, World」が表示されるようになりました。次の手順はもちろん、アプリケーションの実行です。

+ + +

アプリケーションを実行する

+ +

Eclipse プラグインでは、非常に簡単にアプリケーションを実行できます。

+ +
    +
  1. [[]実行] > [[]実行] を選択します。
  2. +
  3. 「Android Application」を選択します。
  4. +
+ + + +

Eclipse ADT によって自動的にプロジェクトの新規起動構成が作成され、Android エミュレータが自動的に起動します。エミュレータが起動した後、少し経つとアプリケーションが表示されます。次のような画面が表示されます。

+ + + +

グレーのバーに表示されている「Hello, Android」は、アプリケーションのタイトルです。このタイトルは Eclipse プラグインによって自動的に作成されます(文字列は res/values/strings.xml ファイル内で定義され、AndroidManifest.xml によって参照されます)。タイトルの下のテキストは、先ほど TextView オブジェクトで作成した実際のテキストです。

+ +

これで「Hello World」についての基本的なチュートリアルは終了ですが、この続きもぜひ読んでください。Android アプリケーションの開発に関するさらに有益な情報を紹介しています。

+ + +

UI を XML レイアウトにアップグレードする

+ +

先ほど作成した「Hello, World」のサンプルは、「プログラマティック」と呼ばれる UI レイアウトを使用しています。「プログラマティック」とは、アプリケーションの UI を直接ソース コードで作成および構築することを意味します。UI プログラミングの経験が豊富な方であればおそらく、このようなアプローチが時にいかに脆弱になり得るかをよくご存じでしょう。レイアウトの軽微な変更のたびに、ソース コード全体に関わる大きな問題が発生する可能性があるからです。また、複数のビューを適切に結びつけることも忘れられがちであるため、これによりレイアウトにエラーが発生し、コードのデバッグで時間が無駄になる場合があります。

+ +

その理由から、Android では、XML ベースのレイアウト ファイルを使用する別の UI 構築モデルを用意しています。この概念を簡単に説明するには、サンプルを紹介するのが一番です。ここに示すのは、上記の「プログラマティック」に構築したサンプルと同じように動作する XML レイアウト ファイルです。

+ +
<?xml version="1.0" encoding="utf-8"?>
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+  android:layout_width="fill_parent"
+  android:layout_height="fill_parent"
+  android:text="@string/hello"/>
+ +

Android XML レイアウト ファイルの全般的な構造はシンプルです。XML 要素がツリー構造になっており、含まれた各ノードが View クラスの名前を表しています(このサンプルでは View 要素が 1 つのみですが)。XML レイアウト内の要素として、{@link android.view.View} を拡張する任意のクラスの名前を使用できます。これには作成するコードの中で定義するカスタム View クラスも含まれます。この構造により、プログラマティックなレイアウトよりもシンプルな構造と構文を使用して、迅速な UI 構築を非常に簡単に行うことができます。このモデルは、アプリケーションの表示(つまり UI)を、データの取得と入力に使用されるアプリケーション ロジックから切り離すことができる Web 開発モデルからヒントを得て考案されました。

+ +

上記の XML サンプルには、TextView という View 要素 1 つのみが含まれています。この要素は 4 つの XML 属性を持っています。下表に、これらの 4 つの属性の説明をまとめました。

+ + + + + + + + + + + + + + + + + + + + + + + + +
+ 属性 + + 説明 +
+ xmlns:android + + Android ネームスペースで定義された共通の属性を参照することを Android ツールに伝える XML ネームスペース宣言です。すべての Android レイアウト ファイル内の最初と最後のタグはこの属性を持つ必要があります。
+
+ android:layout_width + + 該当の View が画面の利用可能な幅のうちどれくらいを占めるかを定義します。このサンプルでは、この View しかないため、「fill_parent」という値を使用して画面全体を占めることにします。
+
+ android:layout_height + + android:layout_width とよく似た属性で、幅ではなく高さを表します。 +
+ android:text + + TextView が表示するテキストを設定します。このサンプルでは、ハードコード記述された文字列値ではなく文字列リソースを使用します。文字列「hello」は res/values/strings.xml ファイル内で定義されます。アプリケーションに文字列を挿入する場合にはこの方法が推奨されます。レイアウト ファイルのハードコードを直接変更する必要がないため、アプリケーションの他の言語へのローカライズがスムーズに進むからです。詳しくは、「リソースと国際化」を参照してください。 +
+ + +

これらの XML レイアウト ファイルは、作成するプロジェクトの res/layout/ ディレクトリ内に置かれます。「res」は「resources」の略で、アプリケーションに必要なコード以外のすべてのアセットがこのディレクトリに格納されます。リソースには、レイアウト ファイルの他に、画像、音声、ローカライズされた文字列などのアセットがあります。

+ + + +

Eclipse プラグインでは、このようなレイアウト ファイルの 1 つである「main.xml」が自動的に作成されます。先ほど「Hello World」アプリケーションを作成した際には、このファイルは無視してプログラマティックにレイアウトを作成しました。この作成方法は Android フレームワークについてより深く理解していただくことを意図したもので、実際にはほとんどの場合レイアウトはコードではなく XML ファイルで定義します。以下の手順では、既存のアプリケーションを変更して XML レイアウトが使用されるようにする方法を説明します。

+ +
    +
  1. Eclipse のパッケージ エクスプローラー(Package Explorer)で、/res/layout/ フォルダを展開し、main.xml を開きます(開いた後、場合によっては XML ソースを見るのにウィンドウ下部にある「main.xml」タブをクリックする必要があります)。ファイルの内容を以下の XML に置き換えます。 + +
    <?xml version="1.0" encoding="utf-8"?>
    +<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    +  android:layout_width="fill_parent"
    +  android:layout_height="fill_parent"
    +  android:text="@string/hello"/>
    +

    ファイルを保存します。

    +
  2. + +
  3. res/values/ フォルダ内の strings.xml を開きます。このファイルは、作成するユーザー インターフェースのためのすべてのデフォルトのテキスト文字列を保存するものです。Eclipse を使用している場合、ADT によってあらかじめ hello と app_name という 2 つの文字列が用意された状態になります。hello を何か別の文字列に書き換えてみましょう。たとえば「Hello, Android! I am a string resource!」としてみましょう。変更後のファイルの全体は次のようになります。 +
    +<?xml version="1.0" encoding="utf-8"?>
    +<resources>
    +    <string name="hello">Hello, Android! I am a string resource!</string>
    +    <string name="app_name">Hello, Android</string>
    +</resources>
    +
    +
  4. + +
  5. 次に、HelloAndroid クラスを開いて、XML レイアウトを使用して変更します。ファイルを編集して次のような内容にします。 +
    +package com.example.helloandroid;
    +
    +import android.app.Activity;
    +import android.os.Bundle;
    +
    +public class HelloAndroid extends Activity {
    +    /** Called when the activity is first created. */
    +    @Override
    +    public void onCreate(Bundle savedInstanceState) {
    +        super.onCreate(savedInstanceState);
    +        setContentView(R.layout.main);
    +    }
    +}
    + +

    この変更を行う際に、コードを手入力してコード補完機能を試してみましょう。「R.layout.main」と入力しようとすると、プラグインによって入力候補が表示されます。この機能の便利さは、開発中に何回も実感すると思います。

    + +

    View オブジェクトに setContentView() を引き渡す代わりに、レイアウト リソースへの参照を付与します。リソースは R.layout.main として識別されます。これは、/res/layout/main.xml で定義されたレイアウトを、コンパイルされたオブジェクトで表したものです。Eclipse プラグインでは、この参照がプロジェクトの R.java クラス内に自動的に作成されます。Eclipse を使用していない場合、Ant を実行してアプリケーションのビルドを行う際に R.java クラスが生成されます(R クラスについて詳しくは後ほど説明します)。

    +
  6. +
+ +

ここで、アプリケーションを再実行します。起動構成は作成済みであるため、ここでは緑色の矢印アイコンをクリックして実行するか、または [[]実行(Run)] > [[]ヒストリーの実行(Run History)] > [[]Android Activity] を選択するだけです。TextView 文字列に加えた変更を除けば、アプリケーションは同じに見えます。ここでポイントとなるのは、2 つの異なるレイアウト編集方法を使用して同じ結果が得られるということです。

+ +

ヒント: ショートカット キーCtrl+F11(Mac では コマンド+Shift+F11)を使用して、現在表示されているアプリケーションを実行することができます。

+ +

ここからは、デバッグの基礎知識と、他の総合開発環境に関する補足情報について説明します。さらに詳しく学習したい場合は、「アプリケーションの基礎」を参照してください。Android アプリケーションが動作するためのすべての要素について説明しています。また、「デベロッパー ガイド」の導入ページを参照して、デベロッパー ガイド ドキュメントの概要を確認してください。

+ + +
+

R クラス

+

Eclipse で、R.java という名前のファイル(gen/(「生成された Java ファイル(Generated Java Files)」フォルダ内)を開きます。ファイルの内容は次のようになっています。

+ +
+package com.example.helloandroid;
+
+public final class R {
+    public static final class attr {
+    }
+    public static final class drawable {
+        public static final int icon=0x7f020000;
+    }
+    public static final class layout {
+        public static final int main=0x7f030000;
+    }
+    public static final class string {
+        public static final int app_name=0x7f040001;
+        public static final int hello=0x7f040000;
+    }
+}
+
+ +

プロジェクトの R.java ファイルは、ファイル内で定義されたすべてのリソースへのインデックスです。ソース コード内では、プロジェクトに含めたすべてのリソースを参照するための簡略形式としてこのクラスを使用します。これは、Eclipse などの総合開発環境のコード補完機能とともに使用すると特に便利です。探している特定の参照をすばやくインタラクティブに見つけることができるからです。

+ +

お手元のファイルはこれとは若干異なる可能性があります(おそらく 16 進値が異なるためです)。ここでは、「layout」という名前の内部クラスと、そのメンバーであるフィールド「main」に注目します。Eclipse プラグインにより main.xml という名前の XML レイアウト ファイルが認識され、ここにそのためのクラスが生成されたものです。プロジェクトに他のリソース(res/values/string.xml ファイル内の文字列や res/drawable/ ディレクトリ内の描画可能オブジェクトなど)を追加すると、R.java に最新の変更が反映されます。

+

Eclipse を使用していない場合は、(Ant ツールを使用した)ビルド時にこのクラス ファイルが生成されます。

+

くれぐれもこのファイルを手動で編集しないようにしてください。

+
+ +

プロジェクトをデバッグする

+ +

Android Plugin for Eclipse は、Eclipse のデバッガと優れた連動性を発揮します。このメリットを確認するため、作成したコードにバグを埋め込んでみましょう。作成した HelloAndroid ソース コードを次のように変更します。

+ +
+package com.android.helloandroid;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+public class HelloAndroid extends Activity {
+    /** Called when the activity is first created. */
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Object o = null;
+        o.toString();
+        setContentView(R.layout.main);
+    }
+}
+ +

この変更は、単にコードに NullPointerException を発生させるものです。アプリケーションを再度実行すると、最終的に次のような画面が表示されます。

+ + + +

「強制終了」を押してアプリケーションを終了し、エミュレータ ウィンドウを閉じます。

+ +

エラーの詳細を確認するには、ソース コード内の Object o = null; 行にブレークポイントを設定します(該当するソース コード行の横にあるマーカー バーをダブルクリックします)。次に、メニューから [[]実行(Run)] > [[]デバッグ ヒストリー(Debug History)] > [[]Hello, Android] を選択して、デバッグ モードに入ります。エミュレータでアプリケーションが再起動されますが、今度は、先ほど設定したブレークポイントに到達した時点で中断されます。その後 Eclipse のデバッグ パースペクティブ(Debug Perspective)で、他のアプリケーションで通常行うように、コードの内容を確認できます。

+ + + + +

Eclipse を使用せずにプロジェクトを作成する

+ +

Eclipse を使用していない場合(普段から使用している総合開発環境がある場合や、シンプルにテキスト エディタやコマンド ライン ツールを使用している場合など)は、Eclipse プラグインを利用することはできません。しかし心配は無用です。Eclipse を使用していないからといって何らかの機能が失われることはありません。

+ +

Android Plugin for Eclipse は、単に Android SDK に含まれるツール セットをまとめたものに過ぎません(エミュレータ、aapt、adb、ddms などの個別のツールについては、こちらで別途説明しています)。このため、これらのツールを別のツール、たとえば「Ant」のビルド ファイルなどでまとめることも可能です。

+ +

Android SDK には、「android」という名前のツールが含まれています。このツールを使用すると、作成するプロジェクトのソース コードとディレクトリ スタブすべて、および Ant と互換性のある build.xml ファイルを作成することができます。これにより、プロジェクトをコマンド ラインで作成したり、普段使用している総合開発環境と統合したりすることができます。

+ +

たとえば、Eclipse で作成されるものと同様の HelloAndroid プロジェクトを作成するには、次のコマンドを使用します。

+ +
+android create project \
+    --package com.android.helloandroid \
+    --activity HelloAndroid \ 
+    --target 2 \
+    --path <path-to-your-project>/HelloAndroid 
+
+ +

これにより、path で定義された場所に、プロジェクトに必要なフォルダとファイルが作成されます。

+ +

SDK ツールを使用してプロジェクトを作成および構築する方法について詳しくは、「Developing in Other IDEs」を参照してください。

diff --git a/docs/html/intl/ja/index.jd b/docs/html/intl/ja/index.jd new file mode 100644 index 0000000000000..5a64ff62ce72f --- /dev/null +++ b/docs/html/intl/ja/index.jd @@ -0,0 +1,152 @@ +home=true +@jd:body + + +
+
+
+
+
+

デベロッパーへのお知らせ

+
+
+ + Google I/O Developer Conference 2009 +
+

Google I/O は、サンフランシスコの Moscone Center で 5 月 27~28 日に開催された開発者会議です。このイベントに参加できなかった方は、各アンドロイド向けセッションを、YouTube ビデオやプレゼンテーションのスライド資料で体験する事が可能です。

+

Mobile のセッションを参照してください »

+
+
+
+ +
+ +
 
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

ダウンロード

+

Android SDK には、優れたアプリケーションの作成に必要となるツール、サンプル コード、ドキュメントが含まれています。

+

詳細 »

+
 
+

公開

+

Android マーケットは、アプリケーションを携帯端末に配信するためのオープン サービスです。

+

詳細 »

+
 
+

貢献

+

Android オープンソース プロジェクトでは、プラットフォーム全体のソースコードを公開しています。

+

詳細 »

+
 
+

再生

+ +

その他の Android 動画 »

+
+
+
+ + + + + + diff --git a/docs/html/intl/ja/sdk/1.5_r2/installing.jd b/docs/html/intl/ja/sdk/1.5_r2/installing.jd new file mode 100644 index 0000000000000..bcb1ffba6355a --- /dev/null +++ b/docs/html/intl/ja/sdk/1.5_r2/installing.jd @@ -0,0 +1,212 @@ +page.title=Android SDK のインストール +@jd:body + + +

このページでは、Android SDK をインストールして、開発環境を設定する方法について説明します。SDK をまだダウンロードしていない場合は、[ダウンロード] ページからダウンロードしてください。SDK をダウンロードした後に、このページの手順を行ってください。

+ +

インストール中に問題が発生した場合は、このページの下部にあるインストールに関する注意事項を参照してください。

+ +

アップグレードする場合

+

SDK の以前のバージョンを使用してアプリケーションを既に開発している場合は、このページの代わりに、SDK のアップグレード をご覧ください。 +

+ + +

インストールの準備

+ +

インストールを始める前に、開発用マシンがシステム要件を満たしていることを確認してください。 +

+ +

Eclipse 環境に Android Development Tools(ADT)プラグインを組み込んだ開発環境は、Android 向け開発の初心者に最適です。プラグインを利用する場合は、コンピュータに Eclipse の適切なバージョン(3.3 以降)がインストールされていることを確認してください。Eclipse のインストールが必要な場合は、次の場所からダウンロードできます:

+ +

http://www.eclipse.org/downloads/

+ +

Eclipse の Java バージョンまたは RCP バージョンをおすすめします。

+ +

SDK のインストール

+ +

SDK のダウンロード後、お使いのマシンの適切な場所に .zip アーカイブを展開します。デフォルトでは、SDK ファイルは android_sdk_<platform>_<release> ディレクトリに展開されます。このディレクトリには、ドキュメントのローカル コピー(ブラウザで documentation.html を開くと参照できます)と、tools/、add-ons/、platforms/ などのサブディレクトリが含まれます。platforms/ のサブディレクトリ内には、プラットフォームの各バージョンに固有のコードのサンプルが含まれる samples/ があります。

+ +

システム上に展開した SDK ディレクトリの名前とパスをメモしておきましょう。Android プラグインの設定時や、SDK ツールの使用時にこの SDK ディレクトリを参照する必要があります。

+ +

SDK のプライマリディレクトリである tools のパスを、システム PATH に追加することをおすすめします。tools/ プライマリディレクトリは、SDK フォルダのルートにあります。tools をパスに追加すると、Android Debug Bridge(adb)やその他のコマンド ライン ツールを、ツールの格納されたディレクトの完全なパスを指定せずに実行できるようになります。

+ + +

今後 SDK をアップグレードする際は、PATH の設定を更新することを忘れないでください。別のディレクトリに SDK を展開する場合は、その新しい場所を PATH に設定する必要があります。

+ +

Eclipse IDE を開発環境として使用する場合、Android Development Tools プラグインをインストールして Eclipse を設定する方法について、次のセクションの情報を参照してください。Eclipse を使用しない場合は、別の IDE を使用して Android アプリケーションを開発してから、SDK に含まれているツールを使用してコンパイル、デバッグ、配布を行うことができます(この場合は、次のステップに進んでください)。

+ + +

Eclipse 用 ADT プラグインのインストール

+ +

Android では、Android Development Tools(ADT)という Eclipse IDE 用のカスタム プラグインを提供しています。このプラグインは、Android アプリケーションの構築を可能にするために設計された、強力な統合環境です。プラグインによって Eclipse の機能が拡張され、新しい Android プロジェクトの設定、アプリケーションの UI の作成、Android Framework API に基づくコンポーネントの追加、Android SDK ツールを使用したアプリケーションのデバッグが可能になります。さらに、アプリケーションを配布するための署名済み(または未署名)の APK のエクスポートも簡単にできるようになります。

+ +

一般的な Android 開発において、ADT を組み込んだ Eclipse の使用は強く推奨されており、Android 初心者に最も効率的な開発環境を提供します。(Eclipse 以外の IDE で作業する場合は、Eclipse や ADT をインストールする必要はありません。代わりに、SDK ツールを直接使用してアプリケーションを構築し、デバッグを行います)。

+ +

インストールの準備で説明した手順に従って Eclipse をインストールした後は、次の手順に従って操作して ADT プラグインをダウンロードし、それぞれの Eclipse 環境にインストールします。

+ + + + + + + +
Eclipse 3.3(Europa)Eclipse 3.4(Ganymede)
+ +
    +
  1. Eclipse を起動し、[ヘルプ] > [ソフトウェアの更新] > [検索とインストール] を選択します。
  2. +
  3. 表示されるダイアログで [インストールする新規フィーチャーを検索] を選択して [次へ] をクリックします。
  4. +
  5. [新規リモートサイト] をクリックします。
  6. +
  7. 表示されるダイアログ ボックスで、リモート サイトの名前(例: 「Android Plugin」)を入力し、URL を入力します: +
    https://dl-ssl.google.com/android/eclipse/
    +

    プラグインが入手できない場合は、URL の「https」の代わりに「http」を使用してみてください(セキュリティ上の理由からは、https をおすすめします)。

    +

    [OK] をクリックします。

  8. +
  9. 検索リストに新しいサイトが追加されており、チェックボックスがオンの状態で表示されるはずです。[終了] をクリックします。
  10. +
  11. 次の [検索結果] ダイアログボックスで、「Android Plugin」のチェックボックスをオンにします。これにより、そこに含まれているツール「Android DDMS」と「Android Development Tools」も自動的にオンになります。[次へ] をクリックします。
  12. +
  13. 使用許諾契約を読み、同意して、[次へ] をクリックします。
  14. +
  15. 次のインストール ウィンドウで [終了] をクリックします。
  16. +
  17. ADT プラグインはデジタル署名されていません。[すべてインストール] をクリックしてインストールを許可します。
  18. +
  19. Eclipse を再起動します。
  20. +
+ +
+ + +
    +
  1. Eclipse を起動し、[ヘルプ] > [ソフトウェアの更新] を選択します。
  2. +
  3. 表示されるダイアログで [使用可能なソフトウェア] タブをクリックします。
  4. +
  5. [サイトの追加] をクリックします。
  6. +
  7. 次の場所を入力します: +
    https://dl-ssl.google.com/android/eclipse/
    +

    プラグインが入手できない場合は、場所の URL の「https」の代わりに「http」を使用してみてください(セキュリティ上の理由からは、https をおすすめします)。

    +

    [OK] をクリックします。

  8. +
  9. [使用可能なソフトウェア] のタブに戻ると、上記の URL によるプラグインとその中に含まれる「Developer Tools」が表示されているはずです。「Developer Tools」の横のチェックボックスをオンにし、[インストール] をクリックします。
  10. +
  11. 次のインストール ウィンドウで、「Android DDMS」と「Android Development Tools」の両方のチェックボックスがオンになっていることを確認します。[次へ] をクリックします。
  12. +
  13. 使用許諾契約を読み、同意して、[終了] をクリックします。
  14. +
  15. Eclipse を再起動します。
  16. +
+ +
+ +

次に、Eclipse の設定を変更して、Android SDK ディレクトリを指すように変更します:

+
    +
  1. [ウィンドウ] > [設定] を選択して、[設定] パネルを開きます(Mac 上では [Eclipse] > [設定])。
  2. +
  3. 左側のパネルで [Android] を選択します。
  4. +
  5. メイン パネルの [SDK Location] で [参照] をクリックし、ダウンロードした SDK ディレクトリを探します。
  6. +
  7. [適用] をクリックして、[OK] をクリックします。
  8. +
+ +

これで完了です。問題なく完了した場合は、Android アプリケーション開発を始める準備が整っています。開発を始めるヒントについては、次のステップのセクションをご覧ください。

+ + +

ADT のインストールでのトラブルシューティング

+

+上記の手順で、ADT プラグインのダウンロードに問題が生じた場合のヒントは次のとおりです:

+ + +

+それでも Eclipse を使用して ADT プラグインをリモート更新サイトとしてダウンロードできない場合は、ADT zip ファイルをローカル マシン上にダウンロードして、手動でインストールすることができます: +

+
    +
  1. ADT zip ファイルをダウンロードします(展開はしないでください)。
  2. +
  3. デフォルトのインストール手順(上記)のステップ 1 と 2 のとおりに操作します。
  4. +
  5. Eclipse 3.3 では [新規アーカイブ・サイト] をクリックします。
    Eclipse 3.4 では [サイトの追加] をクリックして、[アーカイブ] をクリックします。
  6. +
  7. ダウンロードした zip ファイルを参照して選択してください。
  8. +
  9. 上記のステップ 5 から残りの手順に従って操作します。
  10. +
+

zip ファイルからインストールしたプラグインを後でアップデートする場合は、デフォルトのアップデート手順の代わりに、もう一度この手順どおりに操作する必要があります。

+ +

その他のインストール エラー

+ +

オプションの Eclipse コンポーネント(WST など)を必要とする ADT の機能があります。ADT のインストール時にエラーが発生した場合、お使いの Eclipse インストール環境にこうしたコンポーネントが含まれていない可能性があります。必要なコンポーネントを Eclipse インストール環境に簡単に追加する方法について詳しくは、トラブルシューティング トピック ADT インストールエラー: "requires plug-in org.eclipse.wst.sse.ui" をご覧ください。

+ +

Linux ユーザーの場合

+

Eclipse 用 ADT プラグインのインストール時に、次のエラーが発生する場合があります。 +

+An error occurred during provisioning.
+Cannot connect to keystore.
+JKS
+

+この場合、お使いの開発用マシンに適切な Java VM が搭載されていません。Sun Java 6 をインストールするとこの問題が解決し、ADT プラグインを再インストールすることができます。

+ + +

次のステップ

+

インストールを完了すると、アプリケーションの開発を始める準備が整います。開発を始める方法をいくつか紹介します:

+ +

Android の詳細の学習

+ + +

SDK の探索

+ + +

サンプル コードの参照

+ + +

Android デベロッパー グループへのアクセス

+ + + +

インストールに関する注意事項

+ +

Ubuntu Linux に関する注意事項

+ + + +

その他の Linux に関する注意事項

+ + + + + diff --git a/docs/html/intl/ja/sdk/1.5_r3/installing.jd b/docs/html/intl/ja/sdk/1.5_r3/installing.jd new file mode 100644 index 0000000000000..bcb1ffba6355a --- /dev/null +++ b/docs/html/intl/ja/sdk/1.5_r3/installing.jd @@ -0,0 +1,212 @@ +page.title=Android SDK のインストール +@jd:body + + +

このページでは、Android SDK をインストールして、開発環境を設定する方法について説明します。SDK をまだダウンロードしていない場合は、[ダウンロード] ページからダウンロードしてください。SDK をダウンロードした後に、このページの手順を行ってください。

+ +

インストール中に問題が発生した場合は、このページの下部にあるインストールに関する注意事項を参照してください。

+ +

アップグレードする場合

+

SDK の以前のバージョンを使用してアプリケーションを既に開発している場合は、このページの代わりに、SDK のアップグレード をご覧ください。 +

+ + +

インストールの準備

+ +

インストールを始める前に、開発用マシンがシステム要件を満たしていることを確認してください。 +

+ +

Eclipse 環境に Android Development Tools(ADT)プラグインを組み込んだ開発環境は、Android 向け開発の初心者に最適です。プラグインを利用する場合は、コンピュータに Eclipse の適切なバージョン(3.3 以降)がインストールされていることを確認してください。Eclipse のインストールが必要な場合は、次の場所からダウンロードできます:

+ +

http://www.eclipse.org/downloads/

+ +

Eclipse の Java バージョンまたは RCP バージョンをおすすめします。

+ +

SDK のインストール

+ +

SDK のダウンロード後、お使いのマシンの適切な場所に .zip アーカイブを展開します。デフォルトでは、SDK ファイルは android_sdk_<platform>_<release> ディレクトリに展開されます。このディレクトリには、ドキュメントのローカル コピー(ブラウザで documentation.html を開くと参照できます)と、tools/、add-ons/、platforms/ などのサブディレクトリが含まれます。platforms/ のサブディレクトリ内には、プラットフォームの各バージョンに固有のコードのサンプルが含まれる samples/ があります。

+ +

システム上に展開した SDK ディレクトリの名前とパスをメモしておきましょう。Android プラグインの設定時や、SDK ツールの使用時にこの SDK ディレクトリを参照する必要があります。

+ +

SDK のプライマリディレクトリである tools のパスを、システム PATH に追加することをおすすめします。tools/ プライマリディレクトリは、SDK フォルダのルートにあります。tools をパスに追加すると、Android Debug Bridge(adb)やその他のコマンド ライン ツールを、ツールの格納されたディレクトの完全なパスを指定せずに実行できるようになります。

+ + +

今後 SDK をアップグレードする際は、PATH の設定を更新することを忘れないでください。別のディレクトリに SDK を展開する場合は、その新しい場所を PATH に設定する必要があります。

+ +

Eclipse IDE を開発環境として使用する場合、Android Development Tools プラグインをインストールして Eclipse を設定する方法について、次のセクションの情報を参照してください。Eclipse を使用しない場合は、別の IDE を使用して Android アプリケーションを開発してから、SDK に含まれているツールを使用してコンパイル、デバッグ、配布を行うことができます(この場合は、次のステップに進んでください)。

+ + +

Eclipse 用 ADT プラグインのインストール

+ +

Android では、Android Development Tools(ADT)という Eclipse IDE 用のカスタム プラグインを提供しています。このプラグインは、Android アプリケーションの構築を可能にするために設計された、強力な統合環境です。プラグインによって Eclipse の機能が拡張され、新しい Android プロジェクトの設定、アプリケーションの UI の作成、Android Framework API に基づくコンポーネントの追加、Android SDK ツールを使用したアプリケーションのデバッグが可能になります。さらに、アプリケーションを配布するための署名済み(または未署名)の APK のエクスポートも簡単にできるようになります。

+ +

一般的な Android 開発において、ADT を組み込んだ Eclipse の使用は強く推奨されており、Android 初心者に最も効率的な開発環境を提供します。(Eclipse 以外の IDE で作業する場合は、Eclipse や ADT をインストールする必要はありません。代わりに、SDK ツールを直接使用してアプリケーションを構築し、デバッグを行います)。

+ +

インストールの準備で説明した手順に従って Eclipse をインストールした後は、次の手順に従って操作して ADT プラグインをダウンロードし、それぞれの Eclipse 環境にインストールします。

+ + + + + + + +
Eclipse 3.3(Europa)Eclipse 3.4(Ganymede)
+ +
    +
  1. Eclipse を起動し、[ヘルプ] > [ソフトウェアの更新] > [検索とインストール] を選択します。
  2. +
  3. 表示されるダイアログで [インストールする新規フィーチャーを検索] を選択して [次へ] をクリックします。
  4. +
  5. [新規リモートサイト] をクリックします。
  6. +
  7. 表示されるダイアログ ボックスで、リモート サイトの名前(例: 「Android Plugin」)を入力し、URL を入力します: +
    https://dl-ssl.google.com/android/eclipse/
    +

    プラグインが入手できない場合は、URL の「https」の代わりに「http」を使用してみてください(セキュリティ上の理由からは、https をおすすめします)。

    +

    [OK] をクリックします。

  8. +
  9. 検索リストに新しいサイトが追加されており、チェックボックスがオンの状態で表示されるはずです。[終了] をクリックします。
  10. +
  11. 次の [検索結果] ダイアログボックスで、「Android Plugin」のチェックボックスをオンにします。これにより、そこに含まれているツール「Android DDMS」と「Android Development Tools」も自動的にオンになります。[次へ] をクリックします。
  12. +
  13. 使用許諾契約を読み、同意して、[次へ] をクリックします。
  14. +
  15. 次のインストール ウィンドウで [終了] をクリックします。
  16. +
  17. ADT プラグインはデジタル署名されていません。[すべてインストール] をクリックしてインストールを許可します。
  18. +
  19. Eclipse を再起動します。
  20. +
+ +
+ + +
    +
  1. Eclipse を起動し、[ヘルプ] > [ソフトウェアの更新] を選択します。
  2. +
  3. 表示されるダイアログで [使用可能なソフトウェア] タブをクリックします。
  4. +
  5. [サイトの追加] をクリックします。
  6. +
  7. 次の場所を入力します: +
    https://dl-ssl.google.com/android/eclipse/
    +

    プラグインが入手できない場合は、場所の URL の「https」の代わりに「http」を使用してみてください(セキュリティ上の理由からは、https をおすすめします)。

    +

    [OK] をクリックします。

  8. +
  9. [使用可能なソフトウェア] のタブに戻ると、上記の URL によるプラグインとその中に含まれる「Developer Tools」が表示されているはずです。「Developer Tools」の横のチェックボックスをオンにし、[インストール] をクリックします。
  10. +
  11. 次のインストール ウィンドウで、「Android DDMS」と「Android Development Tools」の両方のチェックボックスがオンになっていることを確認します。[次へ] をクリックします。
  12. +
  13. 使用許諾契約を読み、同意して、[終了] をクリックします。
  14. +
  15. Eclipse を再起動します。
  16. +
+ +
+ +

次に、Eclipse の設定を変更して、Android SDK ディレクトリを指すように変更します:

+
    +
  1. [ウィンドウ] > [設定] を選択して、[設定] パネルを開きます(Mac 上では [Eclipse] > [設定])。
  2. +
  3. 左側のパネルで [Android] を選択します。
  4. +
  5. メイン パネルの [SDK Location] で [参照] をクリックし、ダウンロードした SDK ディレクトリを探します。
  6. +
  7. [適用] をクリックして、[OK] をクリックします。
  8. +
+ +

これで完了です。問題なく完了した場合は、Android アプリケーション開発を始める準備が整っています。開発を始めるヒントについては、次のステップのセクションをご覧ください。

+ + +

ADT のインストールでのトラブルシューティング

+

+上記の手順で、ADT プラグインのダウンロードに問題が生じた場合のヒントは次のとおりです:

+ + +

+それでも Eclipse を使用して ADT プラグインをリモート更新サイトとしてダウンロードできない場合は、ADT zip ファイルをローカル マシン上にダウンロードして、手動でインストールすることができます: +

+
    +
  1. ADT zip ファイルをダウンロードします(展開はしないでください)。
  2. +
  3. デフォルトのインストール手順(上記)のステップ 1 と 2 のとおりに操作します。
  4. +
  5. Eclipse 3.3 では [新規アーカイブ・サイト] をクリックします。
    Eclipse 3.4 では [サイトの追加] をクリックして、[アーカイブ] をクリックします。
  6. +
  7. ダウンロードした zip ファイルを参照して選択してください。
  8. +
  9. 上記のステップ 5 から残りの手順に従って操作します。
  10. +
+

zip ファイルからインストールしたプラグインを後でアップデートする場合は、デフォルトのアップデート手順の代わりに、もう一度この手順どおりに操作する必要があります。

+ +

その他のインストール エラー

+ +

オプションの Eclipse コンポーネント(WST など)を必要とする ADT の機能があります。ADT のインストール時にエラーが発生した場合、お使いの Eclipse インストール環境にこうしたコンポーネントが含まれていない可能性があります。必要なコンポーネントを Eclipse インストール環境に簡単に追加する方法について詳しくは、トラブルシューティング トピック ADT インストールエラー: "requires plug-in org.eclipse.wst.sse.ui" をご覧ください。

+ +

Linux ユーザーの場合

+

Eclipse 用 ADT プラグインのインストール時に、次のエラーが発生する場合があります。 +

+An error occurred during provisioning.
+Cannot connect to keystore.
+JKS
+

+この場合、お使いの開発用マシンに適切な Java VM が搭載されていません。Sun Java 6 をインストールするとこの問題が解決し、ADT プラグインを再インストールすることができます。

+ + +

次のステップ

+

インストールを完了すると、アプリケーションの開発を始める準備が整います。開発を始める方法をいくつか紹介します:

+ +

Android の詳細の学習

+ + +

SDK の探索

+ + +

サンプル コードの参照

+ + +

Android デベロッパー グループへのアクセス

+ + + +

インストールに関する注意事項

+ +

Ubuntu Linux に関する注意事項

+ + + +

その他の Linux に関する注意事項

+ + + + + diff --git a/docs/html/sdk/1.5_r3/index.jd b/docs/html/sdk/1.5_r3/index.jd new file mode 100644 index 0000000000000..3364f932f24f5 --- /dev/null +++ b/docs/html/sdk/1.5_r3/index.jd @@ -0,0 +1,87 @@ +sdk.version=1.5 +sdk.rel.id=3 +sdk.date=July 2009 + +sdk.win_download=android-sdk-windows-1.5_r3.zip +sdk.win_bytes=191477853 +sdk.win_checksum=1725fd6963ce69102ba7192568dfc711 + +sdk.mac_download=android-sdk-mac_x86-1.5_r3.zip +sdk.mac_bytes=183024673 +sdk.mac_checksum=b1bafdaefdcec89a14b604b504e7daec + +sdk.linux_download=android-sdk-linux_x86-1.5_r3.zip +sdk.linux_bytes=178117561 +sdk.linux_checksum=350d0211678ced38da926b8c9ffa4fac + +page.title=Android 1.5 SDK, Release 3 +@jd:body + +

For more information on this SDK release, read the +Release Notes.

+ +

SDK Contents

+ +

Development tools

+ +

The SDK includes a full set of tools for developing and debugging application code and designing an application UI. You can read about the tools in the +Dev Guide and access them in the <sdk>/tools/ directory. + +

The tools package in this SDK includes updates from those provided in the previous SDK. The tools also require a different project structure. To use the new tools, you need to migrate your applications to the new development environment. For more information about how to migrate, see Upgrading the SDK. + +

For more information about the new tools features, see the SDK Release Notes. + +

Android Platforms

+ +

This SDK includes multiple Android platform versions that you use to develop applications. For each version, both a fully compliant Android library and system image are provided. The table below lists the platform versions included in this SDK. For more information about a platform version — features, applications included, localizations, API changes, and so on — see its Version Notes.

+ + + + + + + + + + + + + + + + + + +
PlatformAPI LevelNotesDescription
Android 1.53Version NotesIncludes a standard Android 1.5 library and system image with a set of development applications. Does not include any external libraries (such as the Maps external library).
Android 1.12Version NotesIncludes a compliant Android 1.1 library and system image with a set of development applications. Also includes the Maps external library (due to legacy build system issues).
+ +

SDK Add-Ons

+ +

An SDK add-on provides a development environment for an Android external library or a customized (but fully compliant) Android system image. This SDK includes the SDK add-on listed below. The Android system API Level required by the add-on is noted.

+ + + + + + + + + + + +
Add-OnAPI LevelNotesDescription
Google APIs3 Includes the com.google.android.maps external library, a compliant +system image, a {@link android.location.Geocoder Geocoder} +backend service implementation, documentation, and sample code.
+ +

Sample Code and Applications

+ +

You can look at a variety of tutorials and samples in the Dev Guide and access the sample code itself +in the <sdk>/platforms/android-1.5/samples/ directory of the SDK package. Note the new location — the SDK now includes multiple platform versions that you can develop against and each has its own sample code directory.

+ +

Documentation

+ +

The SDK package includes a full set of local documentation. To view it, open the <sdk>/documentation.html file in a web browser. If you are developing in an IDE such as Eclipse, you can also view the reference documentation directly in the IDE.

+ +

The most current documentation is always available on the Android Developers site:

+ +

http://developer.android.com/

+ diff --git a/docs/html/sdk/1.5_r3/installing.jd b/docs/html/sdk/1.5_r3/installing.jd new file mode 100644 index 0000000000000..8c3e8ee841864 --- /dev/null +++ b/docs/html/sdk/1.5_r3/installing.jd @@ -0,0 +1,332 @@ +sdk.version=1.5 +sdk.rel.id=3 +sdk.date=April 2009 + +page.title=Installing the Android SDK +@jd:body + + +

This page describes how to install the Android SDK and set up your +development environment. If you haven't downloaded the SDK, you can +do so from the +Download page. Once you've downloaded +the SDK, return here.

+ +

If you encounter any problems during installation, see the +Installation Notes at the bottom of +this page.

+ +

Upgrading?

+

If you have already developed applications using an earlier version +of the SDK, please read +Upgrading the +SDK, instead. +

+ + +

Preparing for Installation

+ +

Before you begin, take a moment to confirm that your development machine meets the +System Requirements. +

+ +

If you will be developing on Eclipse with the Android Development +Tools (ADT) Plugin — the recommended path if you are new to +Android — make sure that you have a suitable version of Eclipse +installed on your computer (3.3 or newer). If you need to install Eclipse, you can +download it from this location:

+ +

http://www.eclipse.org/downloads/

+ +

A Java or RCP version of Eclipse is recommended.

+ +

Installing the SDK

+ +

After downloading the SDK, unpack the .zip archive to a suitable location on your machine. +By default, the SDK files are unpacked into a directory named +android_sdk_<platform>_<release>. +The directory contains a local copy of the documentation (accessible by opening +documentation.html in your browser) and the subdirectories +tools/, add-ons/, platforms/, and others. Inside +each subdirectory of platforms/ you'll find samples/, which includes +code samples that are specific to each version of the platform.

+ +

Make a note of the name and location of the unpacked SDK directory on your system — you +will need to refer to the SDK directory later, when setting up the Android plugin or when +using the SDK tools.

+ +

Optionally, you may want to add the location of the SDK's primary tools directory +to your system PATH. The primary tools/ directory is located at the root of the +SDK folder. Adding tools to your path lets you run Android Debug Bridge (adb) and +the other command line tools without +needing to supply the full path to the tools directory.

+ + +

Note that, if you update your SDK in the future, you +should remember to update your PATH settings to point to the new location, if different.

+ +

If you will be using the Eclipse IDE as your development environment, +the next section describes how to install the Android Development Tools plugin and set up Eclipse. +If you choose not to use Eclipse, you can +develop Android applications in an IDE of your choice and then compile, debug and deploy using +the tools included in the SDK (skip to Next Steps).

+ + +

Installing the ADT Plugin for Eclipse

+ +

Android offers a custom plugin for the Eclipse IDE, called Android +Development Tools (ADT), that is designed to give you a powerful, +integrated environment in which to build Android applications. It +extends the capabilites of Eclipse to let you quickly set up new Android +projects, create an application UI, add components based on the Android +Framework API, debug your applications using the Android SDK tools, and even export +signed (or unsigned) APKs in order to distribute your application.

+ +

In general, using Eclipse with ADT is a highly recommended +approach to Android development and is the fastest way to get started. +(If you prefer to work in an IDE other than Eclipse, +you do not need to install Eclipse or ADT, instead, you can directly +use the SDK tools to build and debug your application.)

+ +

Once you have Eclipse installed, as described in Preparing for +Installation, follow the steps below to +download the ADT plugin and install it in your respective Eclipse +environment.

+ + + + + + + +
Eclipse 3.3 (Europa)Eclipse 3.4 (Ganymede)
+ +
    +
  1. Start Eclipse, then select Help > Software Updates +> Find and Install....
  2. +
  3. In the dialog that appears, select Search for new features to install +and click Next.
  4. +
  5. Click New Remote Site.
  6. +
  7. In the resulting dialog box, enter a name for the remote site (e.g. "Android Plugin") and + enter the URL: +
    https://dl-ssl.google.com/android/eclipse/
    +

    If you have trouble aqcuiring the plugin, try using "http" in the URL, + instead of "https" (https is preferred for security reasons).

    +

    Click OK.

  8. +
  9. You should now see the new site added to the search list (and checked). + Click Finish.
  10. +
  11. In the subsequent Search Results dialog box, select the checkbox for the + "Android Plugin". + This will select the nested tools: "Android DDMS" and "Android Development Tools". + Click Next.
  12. +
  13. Read and accept the license agreement, then click Next.
  14. +
  15. On the following Installation window, click Finish.
  16. +
  17. The ADT plugin is not digitally signed. Accept the installation anyway + by clicking Install All.
  18. +
  19. Restart Eclipse.
  20. +
+ +
+ + +
    +
  1. Start Eclipse, then select Help > Software Updates....
  2. +
  3. In the dialog that appears, click the Available Software tab.
  4. +
  5. Click Add Site...
  6. +
  7. Enter the Location: +
    https://dl-ssl.google.com/android/eclipse/
    +

    If you have trouble aqcuiring the plugin, try using "http" in the Location URL, + instead of "https" (https is preferred for security reasons).

    +

    Click OK.

  8. +
  9. Back in the Available Software view, you should see the plugin listed by the URL, + with "Developer Tools" nested within it. Select the checkbox next to + Developer Tools and click Install...
  10. +
  11. On the subsequent Install window, "Android DDMS" and "Android Development Tools" + should both be checked. Click Next.
  12. +
  13. Read and accept the license agreement, then click Finish.
  14. +
  15. Restart Eclipse.
  16. +
+ +
+ +

Now modify your Eclipse preferences to point to the Android SDK directory:

+
    +
  1. Select Window > Preferences... to open the Preferences + panel (Mac: Eclipse > Preferences).
  2. +
  3. Select Android from the left panel.
  4. +
  5. For the SDK Location in the main panel, click Browse... and +locate your downloaded SDK directory.
  6. +
  7. Click Apply, then OK.
  8. +
+ +

Done! If you haven't encountered any problems, then you're ready to +begin developing Android applications. See the +Next Steps section for suggestions on how to start.

+ + +

Troubleshooting ADT Installation

+

+If you are having trouble downloading the ADT plugin after following the steps above, here are +some suggestions:

+ + +

+If you are still unable to use Eclipse to download the ADT plugin as a remote update site, you +can download the ADT zip file to your local machine and manually install the it: +

+
    +
  1. Download the ADT zip file (do not unpack it).
  2. +
  3. Follow steps 1 and 2 in the default install instructions (above).
  4. +
  5. In Eclipse 3.3, click New Archive Site....
    + In Eclipse 3.4, click Add Site..., then Archive...
  6. +
  7. Browse and select the downloaded zip file.
  8. +
  9. Follow the remaining procedures, above, starting from steps 5.
  10. +
+

To update your plugin once you've installed using the zip file, you will have to +follow these steps again instead of the default update instructions.

+ +

Other install errors

+ +

Note that there are features of ADT that require some optional +Eclipse components (for example, WST). If you encounter an error when +installing ADT, your Eclipse installion might not include these components. +For information about how to quickly add the necessary components to your +Eclipse installation, see the troubleshooting topic +ADT +Installation Error: "requires plug-in org.eclipse.wst.sse.ui".

+ +

For Linux users

+

If you encounter this error when installing the ADT Plugin for Eclipse: +

+An error occurred during provisioning.
+Cannot connect to keystore.
+JKS
+

+...then your development machine lacks a suitable Java VM. Installing Sun +Java 6 will resolve this issue and you can then reinstall the ADT +Plugin.

+ + +

Next Steps

+

Once you have completed installation, you are ready to +begin developing applications. Here are a few ways you can get started:

+ +

Learn about Android

+ + +

Explore the SDK

+ + +

Explore some code

+ + +

Visit the Android developer groups

+ + + +

Installation Notes

+ +

Ubuntu Linux Notes

+ + + +

Other Linux Notes

+ + + + + diff --git a/docs/html/sdk/1.5_r3/requirements.jd b/docs/html/sdk/1.5_r3/requirements.jd new file mode 100644 index 0000000000000..4ed38a741261c --- /dev/null +++ b/docs/html/sdk/1.5_r3/requirements.jd @@ -0,0 +1,39 @@ +page.title=System Requirements +@jd:body + +

The sections below describe the system and software requirements for developing Android applications using the Android SDK tools included in Android SDK, Release .

+ +

Supported Operating Systems

+ + +

Supported Development Environments

+ + +

Note: If JDK is already installed on your development computer, please take a moment to make sure that it meets the version requirements listed above. In +particular, note that some Linux distributions may include JDK 1.4 or Gnu Compiler for Java, both of which are not supported for Android development.

\ No newline at end of file diff --git a/docs/html/sdk/1.5_r3/upgrading.jd b/docs/html/sdk/1.5_r3/upgrading.jd new file mode 100644 index 0000000000000..a0a62a20c021a --- /dev/null +++ b/docs/html/sdk/1.5_r3/upgrading.jd @@ -0,0 +1,395 @@ +page.title=Upgrading the SDK +sdk.version=1.5_r3 +@jd:body + + +
+
+ +

Upgrading the SDK

+ + +

In this document

+
    +
  1. Install the SDK
  2. +
  3. Update Your Eclipse ADT Plugin
  4. +
  5. Update Your Projects +
      +
    1. Eclipse Users
    2. +
    3. Ant Users
    4. +
    +
  6. +
  7. Migrate Your Applications +
    1. Future-proof your apps
    +
  8. +
+ +

Migrating references

+
    +
  1. Android 1.5 API Differences
  2. +
  3. Future-Proofing +Your Apps »
  4. +
  5. UI +framework changes in Android 1.5 »
  6. +
+ +
+
+ +

This document describes how to move your development environment and existing +Android applications from an Android 1.0 or 1.1 SDK to the Android 1.5 SDK. +If you are migrating applications from an SDK older than 1.0, please also read the upgrading +document available in the Android 1.0 SDK package.

+ +

There are several compelling reasons to upgrade, such as new SDK tools +that make developing more efficient and new APIs that allow you to expand the feature-set +of your applications. However, even if you or your applications don't require these enhancements, +it's important that you upgrade to ensure that your applications run properly on the +Android 1.5 platform.

+ +

The Android 1.5 platform will soon be deployable to devices around the world. +If you have already released Android applications to the public, you should +test the forward-compatibility of your applications on the latest version of the platform +as soon as possible. It's unlikely that you'll encounter breakage in your applications, but +in the interest of maintaining the best user experience, you should take no risks. +So, please install the new Android SDK and test your applications on Android 1.5.

+ +

For more information on new SDK features and system changes, +see the Android 1.5 Version Notes.

+ + +

Install the SDK

+ +

If you haven't yet downloaded the SDK, download from here +and unpack it into a safe location.

+ +

Before you begin: +If you had previously setup your PATH variable to point to the SDK tools directory, +then you need to update it to point to the new SDK. For example, for a +.bashrc or .bash_profile file:

+
export PATH=$PATH:<your_sdk_dir>/tools
+ +

If you don't use Eclipse for development, +skip to Update Your Projects.

+ + +

Update Your Eclipse ADT Plugin

+ +

If you installed ADT-0.9_pre with the early look 1.5 SDK, there have been +additional changes, so please continue with this guide and update to the final ADT 0.9.

+ +

A new ADT plugin (version 0.9) is required for the Android 1.5 SDK. +Because the component structure has been changed since Android 1.1, +the Android 1.5 SDK does not work with ADT 0.8 (or older) and previously installed SDKs will not +work with ADT 0.9. However, the Android 1.5 SDK includes an Android 1.1 SDK image that you +can build against while using ADT 0.9.

+ +

For information about using different system images (such as Android 1.1) +while running this SDK, see Developing +In Eclipse, with ADT or In +Other IDEs, as appropriate for your development environment.

+ +

In order to upgrade your Eclipse IDE to use the new 0.9 ADT, follow the steps below +for your respective version of Eclipse.

+ +

Uninstall your previous ADT plugin

+ +

You must uninstall your existing ADT plugin (0.8 or older). If you do not uninstall it, +you will get a conflict with the Android Editors when installing the new ADT. +(If you have already installed ADT-0.9_pre with the early look 1.5 SDK, you can skip this +uninstall procedure and continue to Install the 0.9 ADT plugin).

+ + + + + + + +
Eclipse 3.3 (Europa)Eclipse 3.4 (Ganymede)
+ +
    +
  1. Select Help > Software Updates > + Manage Configuration.
  2. +
  3. Expand the list in the left panel to reveal the installed tools.
  4. +
  5. Right-click "Android Editors" and click Uninstall. Click OK + to confirm.
  6. +
  7. Restart Eclipse. +

    (Do not uninstall "Android Development Tools".)

  8. +
+
+ +
    +
  1. Select Help > Software Updates.
  2. +
  3. Select the Installed Software tab.
  4. +
  5. Select "Android Editors". Click Uninstall.
  6. +
  7. In the next window, be sure "Android Editors" is checked, then click Finish + to uninstall.
  8. +
  9. Restart Eclipse. +

    (Do not uninstall "Android Development Tools".)

  10. +
+
+ + +

Install the 0.9 ADT plugin

+ +

Only install the new plugin once you've completed the procedure to +Uninstall your previous ADT plugin.

+ + + + + + + +
Eclipse 3.3 (Europa)Eclipse 3.4 (Ganymede)
+ +
    +
  1. Select Help > Software Updates > + Find and Install.
  2. +
  3. Select Search for new features to install.
  4. +
  5. Select the Android plugin entry by checking the box next to it, + then click Finish. +

    (Your original entry for the plugin should still be here. If not, see the guide + to Installing the ADT Plugin.) +

  6. +
  7. In the results, expand the entry for the Android plugin and + be sure that "Developer Tools" is checked, then click Next. + (This will install "Android DDMS" and "Android Development Tools".)
  8. +
  9. Read and accept the license agreement, then click Next. +
  10. In the next window, click Finish to start installation.
  11. +
  12. The ADT plugin is not digitally signed. Accept the installation anyway by clicking + Install All.
  13. +
  14. Restart Eclipse.
  15. +
+
+ +
    +
  1. Select Help > Software Updates.
  2. +
  3. Select the Available Software tab.
  4. +
  5. Expand the entry for the Andriod plugin (may be listed as the location URL) + and select "Developer Tools" by checking the box next to it, then click + Install.
  6. +
  7. On the next window, "Android DDMS" and "Android Development Tools" + should both be checked. Click Finish.
  8. +
  9. Restart Eclipse.
  10. +
+
+ +

If you encounter problems, ensure your ADT is fully uninstalled and then +follow the guide to +Installing the ADT Plugin +for Eclipse.

+ +

Update your Eclipse SDK Preferences

+ +

The last step is to update your Eclipse preferences to point to the new SDK directory:

+
    +
  1. Select Window > Preferences to open the Preferences + panel (Mac: Eclipse > Preferences).
  2. +
  3. Select Android from the left panel.
  4. +
  5. For the SDK Location in the main panel, click Browse + and locate your SDK directory.
  6. +
  7. Click Apply, then OK.
  8. +
+ + +

Update Your Projects

+ +

You will now need to update any and all Android projects that you have +developed using a previous version of the Android SDK.

+ + +

Eclipse users

+ +

If you use Eclipse to develop applications, use the following procedure to +update each project:

+ +
    +
  1. Right-click on the individual project (in the Package Explorer) + and select Properties.
  2. +
  3. In the properties, open the Android panel and select a "build target" to compile + against. This SDK offers the Android 1.1 and Android 1.5 platforms to choose from. When + you are initially updating your projects to the new SDK, we recommend that you select a build + target with the Android 1.1 platform. Click Apply, then + OK.
  4. +
+ +

The new plugin creates a gen/ folder in your project, in which it puts the +R.java file +and all automatically generated AIDL java files. If you get an error such as +The type R is already defined, +then you probably need to delete your old R.java or your old auto-generated +AIDL Java files in the src/ folder. +(This does not apply to your own hand-crafted parcelable AIDL java files.)

+ +

Note that, with the Android 1.5 SDK, there is a new process for running +applications in the Android Emulator. +Specifically, you must create an Android Virtual Device (AVD) before you can launch an instance +of the Emulator. Before attempting to run your applications with the new SDK, +please continue with the section below to +Migrate Your Applications.

+ + +

Ant users

+ +

If you build your projects using the Ant tool (rather than with Eclipse), note the +following changes with the new SDK tools.

+ +

build.xml has changed

+ +

You must re-create your build.xml file.

+ +

If you had customized your build.xml, first make a copy of it:

+ +
+$ cd my-project
+$ cp build.xml build.xml.old
+
+ +

Now use the new android tool (located in your_sdk/tools/) +to create a new build.xml that references +a specific platform target:

+ +
$ android update project --path /path/to/my-project --target 1
+ +

The "target" corresponds to an Android platform library (including any add-ons, such as +Google APIs) that you would like to build your project against. You can view a list of available +targets (and their corresponding integer ID) with the command, android list targets. +When you are initially updating your projects to the new SDK, we recommend that you select the +first target ("1"), which uses the Android 1.1 platform library.

+ +

A gen/ folder will be created the first time you build and your R.java and +your AIDL Java files will be generated in here. You must remove +the old R.java and old auto-generated AIDL java files from the +src/ folder. (This +does not apply to your own hand-crafted parcelabe AIDL java files.)

+ +

Note: The "activitycreator" tool has been replaced +by the new "android" tool. For information on creating new projects with the android tool, +see the documentation about Developing +In Other IDEs.

+ +

Note that, with the Android 1.5 SDK, there is a new process for running +applications in the Android Emulator. +Specifically, you must create an Android Virtual Device (AVD) before you can launch an instance +of the Emulator. Before attempting to run your applications with the new SDK, +please continue with the section below to +Migrate Your Applications.

+ + +

Migrate Your Applications

+ +

After you have completed the process above to Update Your +Projects, you are strongly encouraged to run each of your applications in an instance +of the emulator running the Android 1.5 system image. It's possible (however, unlikely) +that you'll encounter some breakage in your application when you run your applications on +the Android 1.5 system image. Whether you believe your application will be affected by +platform changes or not, it's very important that you test the application's +forward-compatibility on Android 1.5.

+ +

To test forward-compatibility, simply run your existing application (as-is) on an Android +Emulator that's running the Android 1.5 system image. The following procedure will guide +you through the process to running your existing applications on an emulator. Please read +the following guide completely before you begin.

+ +

To test your application on an emulator running Android 1.5:

+
    +
  1. Update Your Project (you should have done this + already, in the section above).
  2. +
  3. Run your existing project, as-is, on an emulator running the Android 1.5 system image. +

    As mentioned in the guide to Update Your Projects, + you should have selected a "build + target" of "1", which compiles your application against the Android 1.1 system image, so there + should be no new errors in your code.

    +

    Eclipse users: follow the + Eclipse guide to + Running Your Application.

    +

    Ant users: follow the + Ant guide to + Running Your Application +

    During the procedure to Running Your Application, select a "deployment target" + for the AVD that includes the Android 1.5 platform. + If your application utilizes the Google Maps APIs (i.e., + MapView), be certain to select a target that includes the Google APIs.

    +

    Once you complete the procedures to run your application in your respective environment, + linked above, return here.

    +
  4. +
  5. With your application running in the emulator, perform all regular testing on the application + to ensure that it functions normally (in both landscape and portrait orientations).
  6. +
+ +

Chances are, your application runs just fine on the Android 1.5 platform — +new devices will be able to safely install and run your application and +current users who update their devices will be able to continue using your application as usual. +However, if something doesn't work the way you expect, then you might need to revisit +your project and make any necessary changes to your code.

+ +

You can check for code breakages caused by API changes by opening your project +in Eclipse, changing the "build target" to one using the Android 1.5 platform, +and see where the ADT identifies errors in your code.

+ + +

Future-proof your apps

+ +

There have been several API additions made for this release, but there have been +very few actual API changes. Only a couple (relatively unused) elements +have been removed and a few have been deprecated, so your applications written with the +Android 1.1 system library should work just fine. However, +your application is more likely to encounter problems on Android 1.5 +if it performs any of the following:

+ + + +

Please read our blog post on Future-Proofing +Your Apps for more information on the issues mentioned above.

+ +

For information +about other changes made to Android 1.5, refer to the following documents:

+ + +

If you have additional trouble updating your code, visit the +Android Developers Group +to seek help from other Android developers.

diff --git a/docs/html/sdk/RELEASENOTES.jd b/docs/html/sdk/RELEASENOTES.jd index f3a1951f71fbc..a3361d5fd758c 100644 --- a/docs/html/sdk/RELEASENOTES.jd +++ b/docs/html/sdk/RELEASENOTES.jd @@ -5,7 +5,6 @@ page.title=SDK Release Notes releases. For the latest known issues, please ensure that you're viewing this page at http://developer.android.com/sdk/RELEASENOTES.html.

-

Android 1.5 SDK, Release 2

This SDK release provides the same developer tools as the Android 1.5 SDK, diff --git a/docs/html/sdk/preview/features.html b/docs/html/sdk/preview/features.html index a2f085cdce342..941c96dc35274 100644 --- a/docs/html/sdk/preview/features.html +++ b/docs/html/sdk/preview/features.html @@ -172,7 +172,7 @@

Redirecting to - + /sdk/android-1.5-highlights.html

diff --git a/docs/html/sdk/sdk_toc.cs b/docs/html/sdk/sdk_toc.cs index ce1ee6e084ab1..bcf32b006191d 100644 --- a/docs/html/sdk/sdk_toc.cs +++ b/docs/html/sdk/sdk_toc.cs @@ -4,13 +4,39 @@ if:android.whichdoc != "online" ?>

Android SDK, r

-

Current SDK Release

Current SDK Release + Aktuelle SDK-Version + Versión actual del SDK + Version actuelle du SDK + Release SDK attuale + 現在リリースされている SDK + 当前的 SDK 版本 + 目前 SDK 發行版本 + @@ -20,7 +46,15 @@
  • -

    System Image Version Notes

    +

    System Image Version Notes + Versionshinweise zum Systemabbild + Notas de la versión de System Image + Notes de version de l'image système + Note sulla versione dell'immagine
    di sistema
    + システム イメージ バージョンに関する
    注意事項
    + 系统图片版本说明 + 系統影像版本資訊 +

  • -

    Previous SDK Releases

    +

    + Previous SDK Releases + Frühere SDK-Releases + Versiones anteriores del SDK + Anciennes versions du SDK + Release SDK precedenti + SDK の過去のリリース + 以前的 SDK 版本 + 較舊的 SDK 發行版本 +