Android Appの基本要素(二)


四、明細書書類
Androidシステムがアプリケーションコンポーネントを起動する前に、システムはアプリケーションのAndroid Manifestを通過しなければならない.xmlファイル(インベントリファイルmanifest)は、コンポーネントが存在するかどうかを知っています.アプリケーションは、アプリケーションエンジニアリングのルートディレクトリの下に置く必要があるすべてのコンポーネントをこのファイルに宣言する必要があります.
アプリケーションコンポーネントを宣言するだけでなく、manifestは次のような多くの機能を完了します.

  •  
    インターネットアクセスやユーザー連絡先へのアクセスなど、アプリケーションに必要なユーザー権限を決定します.

  • アプリケーションの最小化の宣言
    API
    レベル(
    API Level
    )を使用して、ユーザーが使用できるものを特定します.
    APIs
    .

  • カメラ、Bluetoothデバイス、マルチタッチスクリーンなど、アプリケーションが使用するハードウェアおよびソフトウェアの特徴を宣言します.

  • リンクが必要な
    API
    ライブラリ(
    Android
    フレーム
    APIs
    Googleのグラフィックライブラリ(
    Google Maps library
    ).

  • その他の情報.

  • 宣言コンポーネント
    manifestの主なタスクは、アプリケーションのコンポーネントについてシステムに通知することです.たとえば、manifestファイルは、activityを次のように宣言できます.
    <?xml version="1.0" encoding="utf-8"?> 
    <manifest ... > 
        <application android:icon="@drawable/app_icon.png" ... > 
            <activity android:name="com.example.project.ExampleActivity" 
                      android:label="@string/example_label" ... > 
            </activity> 
            ... 
        </application> 
    </manifest> 
     <application>android:icon 
     <activity>android:name         Activityandroid:label           activitylabel)。 
     
    
     l  Activity <activity>   
    
     l  Service <service> 
    
     l  Broadcast Receiver <receiver> 
    
     l  Content Provider <provider>   

    ソースコードのActivityの場合、サービスとContent Providerはmanifestファイルで宣言されていませんが、システムは見つかりません.そのため、実行されません.ただし、Broadcast Receiverは、manifestファイルで宣言するもよいし、BroadcastReceiver のようなコードで動的に作成してregisterReceiver()を呼び出すようにしてもよい.システムに登録します.
    アプリケーションでmanifestファイルを作成する方法について、The AndroidManifestに参加します.xml Fileドキュメント.
    コンポーネント機能の宣言
    コンポーネントのアクティブ化セクションで説明したように、Intentを使用してactivity、service、broadcast receiverを起動できます.Intentでターゲットコンポーネント(コンポーネントクラス名を使用)を明確に指定できます.しかし、Intentの実際の機能はintent動作にある.intentアクションを使用すると、完了したいアクションタイプ(動作を完了したいデータ、オプション)を宣言し、システムがデバイス上で動作を完了できるコンポーネントを探して起動することができます.複数のコンポーネントがintentという動作を完了できる場合、ユーザーは1つの使用を選択します.
    システムは、受信したintentとデバイス上の他のアプリケーションのmanifestファイルに提供されるintent filter(意図フィルタ)との比較により、Intentに応答できるコンポーネントを識別する.
    アプリケーションmanifestファイルでコンポーネントを宣言すると、コンポーネント機能を宣言するintent filterを任意に含めることができるので、他のアプリケーションからのintentに応答することができます.<intent-filter>要素を追加することで、コンポーネント宣言要素のサブセットとしてコンポーネントにintent filterを宣言できます.
    たとえば、Email Appの新しいメールを作成するactivityは、manifestにintent filterを宣言して、「送信」intent(emailを送信するため)に応答することができます.アプリケーションのactivityで「送信」アクション(ACTION_SEND)のintentを作成できます.startActivity() intent , (activity)。を使用すると、このintentとEmail Appの「送信」activityが一致します.
    intent filterの作成に関する詳細は、Intents and Intent Filtersドキュメントに参加します.
    アプリケーション要件の宣言
    ここには様々なAndroidがサポートするデバイスがあり、すべてが同じ特徴と機能を提供しているわけではありません.必要な特徴が欠けているデバイスにアプリケーションがインストールされないように、manifestファイルでデバイスとソフトウェアのニーズを宣言するには、アプリケーションがサポートするデバイスのタイプを明確に定義することが重要です.これらの声明の多くは情報性にすぎず、システムは読み取れないが、グーグルストア(Google Play)のような外部サービスは、ユーザーにフィルタを提供するために、ユーザーが検索アプリケーションを適用する場合に読み取る.
    たとえば、アプリケーションがカメラを要求し、Android 2.1(API 7)を参照する場合は、manifestファイルで宣言する必要があります.これにより、カメラがないデバイスやAndroidバージョンが2.1未満ではGoogle Playからアプリケーションをインストールできません.
    しかし、カメラの使用を宣言することもできますが、必要ありません.この場合、アプリケーションは、デバイスにカメラがあるかどうかを決定し、使用できない場合にカメラを使用するすべてのフィーチャーを無効にするために、実行時にチェックを完了する必要があります.
    ここでは、アプリケーションの設計と開発に際して考慮すべき重要な設備の特徴です.
    スクリーンサイズと密度(density)
    Androidは、スクリーンタイプによってデバイスを分類するために、スクリーンサイズ(スクリーンの物理サイズ)とスクリーン密度(スクリーン上の画素の物理密度またはdpi-dot per inchインチあたり)の2つの特徴を2つのデバイスごとに定義します.異なるタイプの画面の構成を簡素化するために、Androidシステムはいくつかの選択したグループに要約され、より容易に取得できます.
    スクリーンサイズは、小(small)、正常(normal)、大(large)、超大(extra large)です.
    スクリーン密度は、低密度(low density)、中密度(medium)、高密度(high)、超高密度(extra high)である.
    デフォルトでは、AndroidシステムがUI(ユーザーインタフェース)のレイアウトと画像リソースを適切に調整しているため、あなたのアプリケーションはすべての画面サイズと画面密度に適しています.しかし、あるスクリーンサイズに対して専用のレイアウトを作成し、あるスクリーン密度に対して専用の画像を提供し、選択可能なレイアウトリソースを使用し、manifestファイルで<supports-screens>要素を定義することで、アプリケーションがどのスクリーンサイズをサポートするかを正確に宣言する必要があります.
    詳細については、Supporting Multiple Screensドキュメントに参加してください.
    構成の入力
    多くのデバイスは、エンティティキーボード、トラックボール、または5方向のナビゲーションキーなどの異なるタイプのユーザー入力メカニズムを提供しています.アプリケーションに特定の入力ハードウェアが必要な場合は、manifestファイルで<uses-configuration>要素で宣言する必要があります.しかしながら、アプリケーションが特定の入力構成を必要とすることは少ない.
    デバイスフィーチャー
    Androidをサポートするデバイスでは、カメラ、光センサー、Bluetooth、特定のバージョンのOpenGL、タッチスクリーン精度など、多くのハードウェアやソフトウェアの特徴が存在するか、存在しない可能性があります.Android標準ライブラリの可用性を除いて、あるフィーチャーがすべてのAndroidデバイスで使用可能であると仮定することはできません.そのため、<uses-feature>要素でアプリケーションが使用するすべてのフィーチャーを宣言する必要があります.
    プラットフォームのバージョン
    Android 1.6やAndroid 2.3のような異なるバージョンのAndroidプラットフォームは、デバイスによってよく実行されます.各連続バージョンには、以前のバージョンではAPIsが使用できなかったバージョンが含まれることが多い.利用可能なAPIsセットを示すために、プラットフォームバージョンごとにAPIレベルが指定される(例えば、Android 1.0はAPI 1、Android 2.3はAPI 9).バージョン1.0以降に追加されたAPIsを使用する場合は、<uses-sdk>要素で最小APIレベルを宣言する必要があります.
    Google Playでアプリケーションを公開する場合、各デバイスでどのアプリケーションが利用可能かを判断するために、これらの要件をアプリケーションに宣言することが重要です.そのため、アプリケーションのニーズを満たすデバイスがアプリケーションを使用することができます.
    Google Playがこれらのニーズに基づいてアプリケーションをフィルタリングする方法については、Filters on Google Playドキュメントに参加してください.
    五、応用資源
    Androidにはコードだけでなく、画像、オーディオファイルなどのコードから分離されたリソース、および必要な視覚画像に関するすべてのリソースが必要です.たとえば、XMLファイルでアニメーション、メニュー、スタイル、カラー、UI Activityのレイアウトを定義する必要があります.アプリケーション・リソースを使用すると、コードを変更する必要がなく、選択可能なリソースを提供するだけで、異なる構成のデバイスに対してアプリケーションを最適化することができます.(異なる言語とスクリーンサイズ).
    Androidエンジニアリングに含まれる各リソースは、SDKが一意の整数IDを定義し、アプリケーションコードまたは他のXMLで定義されたリソースからIDでリソースを参照できます.例えば、アプリケーションにlogoという名前がある場合.png(/res/drawable/ディレクトリに保存)では、SDKはR.drawable.logoという リソースIDを生成し、リソースを参照してUIに挿入することができます.
    リソースとコードを分ける最も重要な側面は、異なる構成のデバイスのために異なるリソースを選択できることです.たとえば、XMLでUI文字列(string)を定義すると、これらの文字列を他の言語に翻訳し、それぞれのファイルに保存できます.その後、res/values-fr/フランス語文字列値の格納などのリソースディレクトリに言語限定子(qualifier)を追加することができます.このディレクトリとユーザー言語設定に基づいて、AndroidシステムはUI上で適切な文字列を使用します.
    Androidは、選択可能なリソースに複数の異なる制限子をサポートします.制限子は、異なる構成のデバイスがどのリソースを使用すべきかを明確にするために、リソースディレクトリの短い文字列です.同様に、デバイスの画面方向とサイズに基づいてactivityの異なるレイアウトを作成する必要があります.たとえば、デバイスの画面が縦(高さ)の場合、垂直に配置されたボタンレイアウトが必要ですが、画面が横(幅)の場合、ボタンは水平に配置されます.方向に応じてレイアウトを変更するには、2つの異なるレイアウトを定義し、各レイアウトディレクトリ名に適切な制限子を適用する必要があります.そして、システムは現在の設備に基づいて適切なレイアウトを自動的に運用する.
    アプリケーションに含まれる異なるリソースと、異なる構成のデバイスに対して選択可能なリソースを作成する方法については、Application Resources開発ドキュメントを参照してください.
    2012/9/15朱鋒
    原文参加
    Application Fundamentals | Android Developers