Android の設定

Android プラットフォームでは、アプリケーション記述子の android エレメントを使用して、Android のアプリケーションマニフェストに情報を追加できます。このマニフェストは、Android オペレーティングシステムで使用されるアプリケーションのプロパティファイルです。ADT では、APK パッケージを作成すると、Android Manifest.xml ファイルが自動的に生成されます。AIR では、いくつかのプロパティが、特定の機能を動作させるために必要な値に設定されます。AIR アプリケーション記述子の Android セクションで設定されるその他のプロパティは、Manifest.xml ファイルの対応するセクションに追加されます。

注意: ほとんどの AIR アプリケーションでは、android エレメント内のアプリケーションで要求される Android 権限を設定する必要がありますが、通常は、その他のプロパティを設定する必要はありません。

ストリング、整数またはブール値を使用する属性だけを設定できます。参照をアプリケーションパッケージ内のリソースに設定することは、サポートされていません。

注意: ランタイムには、SDK バージョン 14 以上が必要です。以降のバージョンのみに対応するアプリケーションを作成する場合は、マニフェストに正しいバージョンの <uses-sdk android:minSdkVersion=""></uses-sdk> を含める必要があります。

予約された Android マニフェストの設定

AIR は、生成された Android マニフェストドキュメントに複数のマニフェストエントリを設定して、アプリケーションとランタイム機能が正しく動作するようにします。次の設定を定義することはできません。

manifest エレメント

manifest エレメントの次の属性を設定することはできません。

  • package

  • android:versionCode

  • android:versionName

  • xmlns:android

アクティビティエレメント

メインアクティビティエレメントの次の属性を設定することはできません。

  • android:label

  • android:icon

application エレメント

application エレメントの次の属性を設定することはできません。

  • android:theme

  • android:name

  • android:label

  • android:windowSoftInputMode

  • android:configChanges

  • android:screenOrientation

  • android:launchMode

Android 権限

Android セキュリティモデルでは、セキュリティまたはプライバシーと関連する機能を使用するために、各アプリケーションが権限を要求する必要があります。これらの権限は、アプリケーションをパッケージ化するときに指定する必要があり、実行時には変更できません。Android オペレーティングシステムは、ユーザーがアプリケーションをインストールするときに、アプリケーションがどの権限を要求しているかをユーザーに通知します。ある特定の機能に必要な権限が要求されないと、Android オペレーティングシステムは、アプリケーションがその機能にアクセスするときに、例外をスローする場合があります。ただし、例外が必ずスローされるとは保証されません。例外は、ランタイムによってアプリケーションに送信されます。サイレント障害の場合、権限に関するエラーメッセージが Android システムログに追加されます。

AIR では、アプリケーション記述子の android エレメントに Android 権限を指定します。次のフォーマットは、権限を追加する場合に使用されます(PERMISSION_NAME は Android 権限の名前です)。

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <uses-permission android:name="android.permission.PERMISSION_NAME" /> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

manifest エレメント内の uses-permissions ステートメントは、Android マニフェストドキュメントに直接追加されます。

次の権限は、様々な AIR 機能を使用するために必要になります。

ACCESS_COARSE_LOCATION
アプリケーションが、Geolocation クラスを介して Wi-Fi およびセルラーネットワーク位置データにアクセスすることを許可します。

ACCESS_FINE_LOCATION
アプリケーションが Geolocation クラスを介して GPS データにアクセスすることを許可します。

ACCESS_NETWORK_STATE and ACCESS_WIFI_STATE
アプリケーションが、NetworkInfo クラスを介して ネットワーク情報にアクセスすることを許可します。

CAMERA
アプリケーションがカメラにアクセスすることを許可します。
注意: ユーザーがカメラ機能を使用するための権限を要求するとき、Android では、アプリケーションもカメラを要求していると見なされます。カメラがアプリケーションのオプションの機能である場合、カメラのマニフェストに uses-feature エレメントを追加し、必要な属性を false に設定します。Android の互換性フィルターを参照してください。

INTERNET
アプリケーションがネットワーク要求を行うことを許可します。また、リモートデバッグも許可します。

READ_PHONE_STATE
AIR ランタイムが、ユーザーの電話中にオーディオをミュートすることを許可します。この権限は、アプリケーションがバックグラウンド状態の間にオーディオを再生する場合に設定します。

RECORD_AUDIO
アプリケーションがマイクにアクセスすることを許可します。

WAKE_LOCK および DISABLE_KEYGUARD
アプリケーションが、SystemIdleMode クラス設定を使用してデバイスのスリープ状態を防ぐことを許可します。

WRITE_EXTERNAL_STORAGE
アプリケーションがデバイスの外部メモリカードへ書き込むことを許可します。

例えば、強制的にすべての権限を要求するアプリケーションに対する権限を設定するために、アプリケーション記述子に以下を追加できます。

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
                            <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
                            <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
                            <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
                            <uses-permission android:name="android.permission.CAMERA" /> 
                            <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> 
                            <uses-permission android:name="android.permission.INTERNET" /> 
                            <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
                            <uses-permission android:name="android.permission.RECORD_AUDIO" /> 
                            <uses-permission android:name="android.permission.WAKE_LOCK" /> 
                            <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

Android カスタム URI スキーム

カスタム URI スキームを使用して、Web ページまたはネイティブ Android アプリケーションから、AIR アプリケーションを起動できます。カスタム URI のサポートは、Android マニフェストに指定されているインテントフィルターに依存します。そのため、カスタム URI を他のプラットフォームで使用することはできません。

カスタム URI を使用するには、<android> ブロック内のアプリケーション記述子に intent-filter を追加します。次の例の intent-filter エレメントを両方指定する必要があります。<data android:scheme="my-customuri"/> ステートメントを編集して、カスタムスキームの URI ストリングを反映する必要があります。

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <application> 
                            <activity> 
                            <intent-filter> 
                            <action android:name="android.intent.action.MAIN"/> 
                            <category android:name="android.intent.category.LAUNCHER"/> 
                            </intent-filter> 
                            <intent-filter> 
                            <action android:name="android.intent.action.VIEW"/> 
                            <category android:name="android.intent.category.BROWSABLE"/> 
                            <category android:name="android.intent.category.DEFAULT"/> 
                            <data android:scheme="my-customuri"/> 
                            </intent-filter> 
                            </activity> 
                            </application> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

インテントフィルターは、Android オペレーティングシステムに対して、指定されたアクションをアプリケーションが実行できることを通知します。カスタム URI の場合、これは、ユーザーが該当する URI スキームを使用したリンクをクリックしたことを意味します(ブラウザーはその処理方法を認識していません)。

アプリケーションがカスタム URI を介して呼び出されると、NativeApplication オブジェクトは invoke イベントを送出します。クエリーパラメーターを含むリンクの URL は、InvokeEvent オブジェクトの arguments 配列に配置されます。任意の数の intent-filter を使用できます。

注意: StageWebView インスタンス内のリンクでは、カスタム URI スキームを使用する URL を開くことができません。

Android の互換性フィルター

Android オペレーティングシステムは、アプリケーションマニフェストファイル内の多くのエレメントを使用して、アプリケーションが指定のデバイスと互換性があるかどうかを判別します。この互換性に関する情報は、必要に応じてマニフェストに追加できます。これらのエレメントを含めない場合は、アプリケーションをどの Android デバイスにもインストールできます。ただし、すべての Android デバイスで適切に動作するとは限りません。例えば、カメラアプリケーションは、カメラがない電話では役に立ちません。

フィルターに使用できる Android マニフェストタグは次のとおりです。

  • supports-screens

  • uses-configuration

  • uses-feature

  • uses-sdk(AIR 3 以降)

カメラアプリケーション

アプリケーション用にカメラの権限を要求する場合、Android では、そのアプリケーションが利用可能なすべてのカメラ機能(オートフォーカスやフラッシュなど)を必要としていると見なします。アプリケーションが一部のカメラ機能を必要としている場合、またはカメラがオプションの機能である場合、カメラ用に様々な uses-feature エレメントを設定して、カメラ機能がオプションであることを示します。このように設定しない場合、ある特定の機能を備えていないデバイスまたはカメラがないデバイスを持つユーザーは、Android Market でアプリケーションを検索することができません。

次の例は、カメラの権限を要求し、すべてのカメラ機能をオプションとする方法を説明しています。

<android> 
                                <manifestAdditions> 
                                <![CDATA[ 
                                <manifest> 
                                <uses-permission android:name="android.permission.CAMERA" /> 
                                <uses-feature android:name="android.hardware.camera" android:required="false"/> 
                                <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/> 
                                <uses-feature android:name="android.hardware.camera.flash" android:required="false"/> 
                                </manifest> 
                                ]]> 
                                </manifestAdditions> 
                                </android>

オーディオ録音アプリケーション

オーディオを録音する権限を要求した場合、Android では、アプリケーションがマイクも要求していると見なします。オーディオ録音がアプリケーションのオプション機能である場合、uses-feature タグを追加して、マイクは必要ないことを指定できます。指定しないと、マイクがないデバイスのユーザーは、Android Market でこのアプリケーションを見つけることができません。

次の例は、マイクハードウェアをオプションとして設定しながら、マイクを使用する権限を要求する方法を説明しています。

<android> 
                                <manifestAdditions> 
                                <![CDATA[ 
                                <manifest> 
                                <uses-permission android:name="android.permission.RECORD_AUDIO" /> 
                                <uses-feature android:name="android.hardware.microphone" android:required="false"/> 
                                </manifest> 
                                ]]> 
                                </manifestAdditions> 
                                </android>

インストールの場所

manifest エレメントの installLocation 属性を auto または preferExternal に設定することで、アプリケーションを外部のメモリカードにインストールしたり移動することを許可できます。

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest android:installLocation="preferExternal"/> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

Android オペレーティングシステムでは、外部メモリへのアプリケーションのインストールは保証されません。ユーザーは、システム設定アプリケーションを使用して、アプリケーションを内部メモリと外部メモリの間で移動することもできます。

外部メモリにインストールした場合でも、アプリケーション記憶域ディレクトリの内容、共有オブジェクト、一時ファイルなどのアプリケーションキャッシュおよびユーザーデータは、内部メモリに保存されます。内部メモリを使用し過ぎないように、アプリケーション記憶域ディレクトリに保存するデータは慎重に選択してください。大量のデータは File.userDirectory または File.documentsDirectory の場所を使用して、SD カードに保存してください(これらの場所は両方とも Android の SD カードのルートにマッピングされます)。

StageWebView オブジェクトでの Flash Player プラグインおよびその他のプラグインの有効化

Android 3.0 以降では、StageWebView オブジェクトにプラグインコンテンツを表示するために、Android の application 要素でハードウェアアクセラレーションを有効にする必要があります。プラグインのレンダリングを有効にするには、application エレメントの android:hardwareAccelerated 属性を true に設定します。

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <application android:hardwareAccelerated="true"/> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

色深度

AIR 3 以降では、表示はランタイムによって 32 bit カラーでのレンダリングに設定されます。それよりも前のバージョンの AIR の場合、ランタイムでは 16 bit カラーが使用されます。アプリケーション記述子の <colorDepth> エレメントを使用すると、16 bit カラーを使用するようにランタイムに対して指示することができます。

<android> 
                            <colorDepth>16bit</colorDepth> 
                            <manifestAdditions>...</manifestAdditions> 
                            </android>

16 bit の色深度を使用すると、レンダリングのパフォーマンスを高めることができますが、色の再現性は低下します。