1. ホーム
  2. android

AndroidManifest.xmlの最も完全な詳細な説明

2022-02-18 23:48:46

AndroidManifest.xmlは、すべてのアンドロイドアプリケーションにおいて必須のファイルであり、プロジェクト全体のルートディレクトリに配置されています。私たちは毎日このファイルを使って、プログラムの実行に必要なコンポーネント、パーミッション、情報を設定しています。しかし、私たちはこのファイルについて本当にどれだけのことを知っているのでしょうか。具体的な意味や、なぜこのように設定する必要があるのかを理解せずに、単純な設定のままでいることはないでしょうか。今日は、このファイルの各パラメータの具体的な意味を詳しく学びましょう。アプリケーション全体の入り口となるファイルなので、Androidをより深く理解するのに役立ちます。

I. 概要

  AndroidManifest.xmlは、Androidアプリケーションのエントリーファイルで、パッケージで公開されるコンポーネント(アクティビティ、サービスなど)、それぞれの実装クラス、処理可能な各種データ、起動場所などを記述しています。アプリケーションのActivity、ContentProviders、Service、Intent Receiverを宣言するほか、パーミッションやInstrumentation(セキュリティ制御やテスト)についても指定します。 

II. アーキテクチャ図

<?xmlversion="1.0"encoding="utf-8"? >
<manifest>

    <use-sdk/> 
    <use-configuration/> 
    <use-feature/>  

    <uses-permission/>
    <permission/>
    <permission-tree/>
    <permission-group/>
    <instrumentation/> 

    <supports-screens/>

    <application> 
       <activity> 
           <intent-filter>
               <action/> 
               <category/> 
           </intent-filter> 
      </activity>
       <activity-alias> 
           <intent-filter> </intent-filter> 
           <meta-data/> 
      </activity-alias> 
       <service> 
           <intent-filter> </intent-filter> 
           <meta-data/> 
       </service>
       <receiver>
           <intent-filter> </intent-filter> 
           <meta-data/> 
       </receiver> 
       <provider> 
           <grant-uri-permission/>
           <meta-data/> 
       </provider> 
       <uses-library/> 
    </application>  

</manifest>


III. 詳細説明

1. マニフェスト:属性

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.somnus.yunyi"
          android:sharedUserId="string"
          android:sharedUserLabel="string resource"
          android:versionCode="integer"
          android:versionName="string"
          android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
</manifest>

A. xmlns:android

android名前空間を定義します。 http://schemas.android.com/apk/res/android これにより、Androidの様々な標準プロパティがファイル内で利用できるようになり、ほとんどの要素でデータを提供することができます。

B. パッケージ

アプリケーションプロセスのデフォルト名でもある、このアプリケーション内のメインjavaパッケージのパッケージ名を指定します。

C. sharedUserId

Androidはデフォルトで各APKにユニークなUserIDを割り当てるため、異なるAPKが共有データにアクセスすることはデフォルトで禁止されています。もしデータを共有したい場合、1つ目はShare Preferenceメソッド、2つ目はsharedUserIdを使い、異なるAPKのsharedUserIdを同じに設定すれば、これらのAPKは互いにデータを共有することができます。詳しくは、こちらをご覧ください。 http://wallage.blog.163.com/blog/static/17389624201011010539408/

D, sharedUserLabel

sharedUserId属性が設定されている場合にのみ意味を持つ共有ユーザー名です。

E. バージョンコード

は、アプリが何回更新されたかを表す整数値である必要があり、例えば、最初のバージョンは通常1であり、その後、バージョン2、3などに更新する場合、デバイスプログラムにバージョン(アップグレード)を識別するために使用されます。

F. バージョン名

この名前はユーザー用です。アプリのバージョン番号をバージョン1.1に設定し、その後のアップデートでバージョン1.2、2.0などに設定することが可能です。

G. インストール先

Android 2.2の新機能であるinstallパラメータ、installLocationは、internalOnly、auto、preferExternalの3つの値から選択することができます。

preferExternalを選択すると、システムはSDカードにAPKを優先的にインストールします(もちろん、エンドユーザーは内部ROMストレージを選択することができ、SDストレージが一杯の場合は、内部ストレージにもインストールされます)。

自動を選択すると、システムはストレージの空き容量に適応します。

internalOnlyを選択すると、内部にインストールされていないと動作しない

2. アプリケーション:属性

AndroidManifest.xmlには、各アプリケーション・コンポーネントとそのプロパティ(アイコン、ラベル、許可など)を宣言するApplicationタグが含まれている必要があります。

<application android:allowClearUserData=["true" | "false"]
             android:allowTaskReparenting=["true" | "false"]
             android:backupAgent="string"
             android:debuggable=["true" | "false"]
             android:description="string resource"
             android:enabled=["true" | "false"]
             android:hasCode=["true" | "false"]
             android:icon="drawable resource"
             android:killAfterRestore=["true" |"false"]
             android:label="string resource"
             android:manageSpaceActivity="string"
             android:name="string"
             android:commission="string"
             android:persistent=["true" | "false"]
             android:process="string"
             android:restoreAnyVersion=["true" | "false"]
             android:taskAffinity="string"
             android:theme="resource or theme" >
</application>


A. android:allowClearUserData('true' or 'false')

ユーザーが自分でデータ消去を選択できるかどうか。デフォルトはtrueで、プログラム・マネージャーには、ユーザーがデータを消去することを許可するかどうかの選択肢があります。trueの場合、ユーザーは自分でユーザーデータをクリアすることができ、逆の場合も同様です

B. android:allowTaskReparenting('true' or 'false')

ショートメッセージタスクからブラウザタスクへの切り替えなど、アクティビティによる依存タスクの変更を許可するかどうか

C. android:backupAgent

これはまた、Android 2.2の新機能は、アプリのバックアップを設定し、プロパティ値は、com.project.TestCaseなどの完全なクラス名でなければなりません、このプロパティは、デフォルト値を持っていない、とクラス名は(バックアップツールは、雲にデータのバックアップの操作)指定する必要がありますです。

D. android:debuggable

trueを設定すると、携帯電話でアプリをデバッグできることを示します。デフォルトはfalseで、falseの場合にアプリをデバッグすると、以下のエラーが報告されます。

Device XXX では、アプリケーションがマニフェストで明示的にデバッグ可能であることを宣言することが要求されます。

アプリケーション XXX は、そのマニフェストで 'debuggable' 属性が TRUE に設定されていないため、デバッグすることができません。

E. android:description/android:label(アンドロイドディスクリプション/アンドロイドラベル

どちらのプロパティもライセンスに対して提供され、ユーザーがライセンスのリスト(android:label)またはライセンスの詳細(android:description)を見るときに表示できる文字列リソースです。labelはできるだけ短く、ライセンスがどの機能を保護しているかをユーザーに伝えるのに十分であるべきです。説明は、プログラムが許可を得てできることを正確に記述するために使用でき、実際にユーザーが許可に同意した場合にプログラムができることを知らせます。通常、わたしたちはパーミッションを説明するために二つの文を使います。最初の文はパーミッションを説明し、二番目の文はユーザがパーミッションを承認した場合に何が起こるかを警告します。

F. android:enabled

Androidがアプリのコンポーネントをインスタンス化できるかどうか。trueの場合、各コンポーネントのenabled属性は、そのコンポーネントが有効化できるかどうかを決定します。

G. android:hasCode('true' or 'false')

アプリにコードが含まれているかどうかを示します。デフォルトはtrueで、falseの場合、コンポーネントの実行時にアプリのコードを読み込もうとしません。

アプリはそれ自身のコードを一切含みません。ただし、Activityクラスのような組み込みコンポーネントクラスはAliasActivityクラスを使用しますが、これはもちろんまれなケースです

(Android 2.3では標準的なC言語を使ってアプリを開発することができます。アプリ自体にはもうJAVAコードが含まれないので、androidManifest.xmlでこのプロパティをfalseに設定してください)

H. android:icon

これは簡単なもので、アプリ全体のアイコンを宣言するもので、画像は通常drawableフォルダに置かれます

I. android:killAfterRestore

J. android:manageSpaceActivity

K, android:name(アンドロイドネーム

は、アプリケーションが実装するApplicationサブクラスのフルネームです。アプリケーションのプロセスが開始されると、このクラスはすべてのアプリケーションコンポーネントの前にインスタンス化されます。

クラス(例えばandroidMainクラス)が宣言されたパッケージの下にある場合は、直接android:name="androidMain"と宣言できますが、パッケージ下のサブパッケージである場合は、フルパスまたはandroid: name="パッケージ名として宣言しなければなりません。サブパッケージ名は.androidMain"としてください。

L. android:パーミッション

このプロパティは、上で定義されていれば、アプリのすべてのコンポーネントのパーミッションを設定する便利な方法ですが、もちろん、各コンポーネントに設定されたパーミッションによってオーバーライドされます。

M, android:persistent

なぜなら、アプリは通常このフラグを設定すべきではなく、永続モードは特定のシステムアプリに対してのみ意味を持つからです。

N. android:process

アプリが実行されているプロセスの名前です。デフォルトは要素に設定されたパッケージ名ですが、もちろん各コンポーネントはこの属性を設定することでデフォルトを上書きすることができます。2つのアプリでプロセスを共有したい場合、android:processを同じにすることができますが、ユーザーIDを共有し、同じ認証情報を与えられた場合のみとなります

O. android:restoreAnyVersion

また、android 2.2の新機能として、バックアップがデバイス上の現在のものよりも新しいバージョンであっても、アプリがすべてのバックアップを復元しようとする準備ができているかどうかを示すために、デフォルトはfalseです。

P. android:taskAffinity

同じアフィニティーを持つアクティビティーは、理論的には同じタスクに属し、アプリのアフィニティのデフォルト名は、要素に設定されたパッケージ名です。

Q. android:theme

はリソーススタイルで、すべてのアクティビティに対するデフォルトのテーマスタイルを定義しています。

3. アクティビティ:プロパティ


<activity android:allowTaskReparenting=["true" | "false"]
          android:alwaysRetainTaskState=["true" | "false"]
          android:clearTaskOnLaunch=["true" | "false"]
          android:configChanges=["mcc", "mnc", "locale",
                                 "touchscreen", "keyboard", "keyboardHidden",
                                 "navigation", "orientation", "screenLayout",
                                 "fontScale", "uiMode"]
          android:enabled=["true" | "false"]
          android:excludeFromRecents=["true" | "false"]
          android:export=["true" | "false"]
          android:finishOnTaskLaunch=["true" | "false"]
          android:icon="drawable resource"
          android:label="string resource"
          android:launchMode=["multiple" | "singleTop" |
                              "singleTask" | "singleInstance"]
          android:multiprocess=["true" | "false"]
          android:name="string"
          android:noHistory=["true" | "false"]  
          android:permission="string"
          android:process="string"
          android:screenOrientation=["unspecified" | "user" | "behind" |
                                     "landscape" | "portrait" |
                                     "sensor" | "nosensor"]
          android:stateNotNeeded=["true" | "false"]
          android:taskAffinity="string"
          android:theme="resource or theme"
          android:windowSoftInputMode=["stateUnspecified",
                                       "stateUnchanged", "stateHidden",
                                       "stateAlwaysHidden", "stateVisible",
                                       "stateAlwaysVisible", "adjustUnspecified",
                                       "adjustResize", "adjustPan"] >   
</activity>


1. android:alwaysRetainTaskState(アンドロイド:常にタスクの状態を保持する)。

状態を変更せずに維持するかどうか。例えば、ホームに切り替えてから再び開き、アクティビティは最後の状態のままです。例えば、ブラウザに多くの状態があり(複数のTABが開いている場合)、ユーザーがそれらを失いたくない場合、このプロパティはtrueに設定することができます。

2. android:clearTaskOnLaunch 
例えば、Pはアクティビティ、QはPによって引き起こされるアクティビティで、その後ホームに戻り、Pを再開し、Qを表示するかどうかを決める

3. android:configChanges

例えば "locale|navigation|orientation"などの設定リストが変更されたときに onConfigurationChanged() メソッドを呼び出すかどうかです。 
こちらは、主にスマホの向きが変わるのを確認するために使っています。どうすればいいのでしょうか? 
通常の場合 携帯電話を回転させた場合。現在のActivityはkillされ、その後、方向に応じてActivityが再ロードされます。onCreateから再読み込みされます。 
このオプションを設定すると、携帯電話が回転するとき、現在のActivityはその後にonConfigurationChanged()メソッドを呼び出します。onCreateメソッドなどを実行するのではなく、です。

4. android:excludeFromRecents

最近開いたアクティビティーのリストに表示されるかどうか、デフォルトはfalse

5. android:finishOnTaskLaunch

ユーザーがこのタスクを再起動したときに、開いているアクティビティを閉じるかどうか、デフォルトはfalse

この属性とallowTaskReparentingがともにtrueの場合、この属性はaceとなります。アクティビティは再ペアレント化されずに破棄されました

6. android:launchMode(アクティビティのロードモード)

マルチActivityの開発では、自分のアプリ間でActivityをホップしたり、他のアプリで再利用可能なActivityを内包している場合があります。この場合、多数の重複するActivityを生成するのではなく、元のActivityインスタンスの1つにジャンプすることが望ましい場合があります。

Activityには4つのロードモードがあります。

standard、singleTop、singleTask、singleInstance(最初の2つはグループ、最後の2つはグループ)、standardがデフォルト

標準:つまり、インテントが新しいインスタンスに送信されるため、ジャンプごとに新しいアクティビティが生成されます。

singleTop: 新しいインスタンスを送りますが、標準とは異なり、要求されたActivityがスタックのちょうど一番上にある場合(singleTopとして構成されたActivity)、新しいインスタンスは構築されません。

singleTask: singleInstanceとsingleTaskはどちらもインスタンスを1つだけ作成します。インテントが届き、singleTaskに設定されたActivityを作成する必要がある場合、システムはスタック内にすでにそのActivityのインスタンスがあるかどうかをチェックします。もしあれば、直接そのインスタンスにインテントを送ります。

singleInstanceを使用します。

まず、タスクの概念を説明すると、タスクは複数のActivityに入れることができるスタックと考えることができます。例えば、アプリケーションを起動すると、Androidはタスクを作成し、アプリケーションのエントリActivityを起動し、そのタスクの中だけで他のActivityをインターフェイスで呼び出すことができます。一つのActivityを複数のタスクで共有する場合はどうでしょうか。例えば、ガイドサービスのアプリケーションを開いたとき、GOOGLEマップを開くActivityがあり、ホームボタンを押してメインメニューに戻り、GOOGLEマップアプリケーションを起動すると、表示は先ほどのマップですが、実は同じActivityであり、実はこれはsingleInstanceを導入しているのです。singleInstanceモードとは、Activityを単独でスタックに入れ、スタックの中にこのActivityだけがあるようにし、異なる意図のアプリケーションはこのActivityで受信して表示することで、共有するようにしたものです。もちろん、これらのアプリケーションは破棄されていないことが前提なので、HOMEキーが押されただけで、リターンキーが押された場合は無効となります

7. android:multiprocess

複数のプロセスを許可するかどうか、デフォルトはfalse

詳しくは、記事をご覧ください。 http://www.bangchui.org/simple/?t3181.html

8. android:noHistory

ユーザーがActivityから離れ、画面上に表示されなくなった時点で、Activityスタックからクリアされ終了するかどうか。デフォルトはfalseです。Activityは履歴を残しません

9. android:screenOrientation

アクティビティが表示されるモード

デフォルトは無指定:システムが自動的に表示方向を決定する

ランドスケープモード、横幅が縦幅より大きい

縦型 縦型は横幅より高さが大きい

ユーザーモード、ユーザーの現在の好みの向き

ビハインドモード:そのActivityの下にあるActivityと同じ方向(Activityスタック内)

センサーモード:これを決定する物理的なセンサーがあります。ユーザーがデバイスを回転させると、画面は水平と垂直に切り替わる

nosensorモード。物理センサーを無視し、ユーザーがデバイスを回転させても変化しないようにします。

10. android:stateNotNeeded (アンドロイドステートノットニード)

アクティビティが破棄されたとき、または再起動に成功したときに、状態を保存するかどうかを指定します。

11. android:windowSoftInputMode

Android 1.5以降の新機能である入力メソッドパネルのブロック問題を回避するために、アクティビティメインウィンドウとソフトキーボードのインタラクションモードを使用できます。

このプロパティは2つのことに影響します。

[A] フォーカス生成時にソフトキーボードを隠すか表示するか

[B] アクティブなメインウィンドウのサイズを小さくしてソフトキーボードのためのスペースを確保するかどうか

各値の意味

[A] stateUnspecified: ソフトキーボードの状態が指定されていない場合、システムは適切な状態またはテーマに依存する設定を選択します。

[B] stateUnchanged: このアクティビティが表示されると、ソフトキーボードは非表示、表示にかかわらず、前のアクティビティと同じ状態のままです。

[C] stateHidden: ユーザーがアクティビティを選択すると、ソフトキーボードは常に非表示になります。

[D] stateAlwaysHidden: アクティビティのメインウィンドウにフォーカスが当たった場合、ソフトキーボードも常に非表示になる

[E] stateVisible: ソフトキーボードは通常表示されています。

[F] stateAlwaysVisible: ユーザーがアクティビティを選択すると、ソフトキーボードが常に表示される状態です。

[G] adjustUnspecified: デフォルトの設定で、通常はシステム自身によって隠されたり表示されたりします。

[H] adjustResize: ソフトキーボードのスペースを確保するために、アクティビティは常にスクリーンのサイズを変更します。

[I] adjustPan: 現在のウィンドウのコンテンツが自動的に移動し、現在のフォーカスがキーボードで覆われることがなく、ユーザーは常に入力部分を見ることができます。

4. intent-filter: 属性

構造図です。

<intent-filter android:icon="drawable resource"
               android:label="string resource"
               android:priority="integer" >

      <action />

      <category />

      <data />

</intent-filter> 



intent-filter の属性

android:priority(説明: 優先順位はpriorityプロパティを設定することで決定され、範囲は-1000から1000で、数字が大きくなるほど優先順位が高くなる)

Intentフィルターに設定される情報は、アクション、データ、カテゴリーである。つまり、フィルターはインテントに含まれるこの3種類の情報とのみ比較します。

アクションプロパティ

アクションはシンプルで、android:name属性のみを持っています。一般的なandroid:nameの値はandroid.intent.action.MAINで、これはこの活動がアプリケーションのエントリポイントとして動作していることを示します。android:nameに利用可能な値の詳細については、このURLを参照してください。 http://hi.baidu.com/linghtway/blog/item/83713cc1c2d053170ff477a7.html

カテゴリ属性

また、カテゴリはandroid:nameプロパティのみを持ちます。一般的な android:name の値は android.intent.category.LAUNCHER (アプリがプログラムリストに表示されるかどうかを決定する) です。

android:nameの具体的な値については、こちらのURLを参照してください。 http://chroya.javaeye.com/blog/685871

データ属性

5. メタデータ:属性

<meta-data android:name="string"
           android:resource="resource specification"
           android:value="string"/>


これが要素の基本構造です。4つの要素に含まれることがあります。

android:name(説明:メタデータ項目の名前、この名前がユニークであることを保証するために、Javaスタイルの命名規則が使用されます、例:com.wody.project.ried)

android:resource (説明: リソースへの参照。この項目に割り当てられた値はリソースのIDです。このIDはメタデータからBundle.getInt()メソッドで見つけることができます)

android:value(説明: このアイテムに割り当てられた値です。値を指定できるバンドルメソッドと、その値を取得するためにコンポーネントが使用するメソッド。[getString]、[getInt]、[getFloat]、[getString]、[getBoolean])

6. activity-alias: 属性

<activity-alias android:enabled=["true" | "false"]
                android:exported=["true" | "false"]
                android:icon="drawable resource"
                android:label="string resource"
                android:name="string"
                android:permission="string"
                android:targetActivity="string">

<intent-filter/> 
<meta-data/>
</activity-alias>


は、次の例のようにアクティビティのショートカットを作成するためのものです。


<activity android:name=".shortcut">

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

            </intent-filter>

</activity>

 <activity-alias android:name=".CreateShortcuts" android:targetActivity=".shortcut" android:label="@string /shortcut">

    <intent-filter>

             <action android:name="android.intent.action.CREATE_SHORTCUT" />

             <category android:name="android.intent.category.DEFAULT" />

     </intent-filter>

 </activity-alias>


ここで、android.targetActivityは対応するショートカットを指すアクティビティで、例えば上記のショートカット(this Activity name)のようなものです。

android:labelはショートカットの名前、ショートカットのアイコンはデフォルトで指定されたアプリケーションのアイコンです。

7. サービス

[1] サービスはアクティビティと同じレベルである。アクティビティと違い、勝手に起動することはできず、バックグラウンドで動作します。アプリケーションを終了しても、サービスプロセスは終了せず、バックグラウンドで実行されます。例えば、音楽を聴く、ネットワークからデータをダウンロードするなどは、サービスによって実行されます。

onDestroy()メソッドは、一度起動したサービスを再度起動する際に、onCreate()メソッドを実行せず、onStart()メソッドを直接実行します。

[3] サービスとアクティビティ間の通信

サービスのバックエンドのデータは、最終的にフロントエンドのActivityの上に表示されます。これは、サービスを起動すると、システムが新しいプロセスを再開するので、異なるプロセス間の通信(AIDL)を伴うためで、Activityとサービス間の通信は、主にIBinderで処理されます。詳しくは、以下をご参照ください。 http://zhangyan1158.blog.51cto.com/2487362/491358

[4].

<service android:enabled=["true" | "false"]

         android:exported[="true" | "false"]

         android:icon="drawable resource"

         android:label="string resource"

         android:name="string"

         android:permission="string"

         android:process="string">

</service>

serviceタグの中の属性については、以前にも説明しましたので、ここでは繰り返しません〜。

8. レシーバ

受信機はサービスと同じプロパティを持ちますが、ここでは表示しません。

BroadcastReceiverです。ブロードキャストを送信するために使用します。ブロードキャストは、アプリケーション間で情報を転送するためのメカニズムであり、BroadcastReceiverは、送信されたブロードキャストをフィルタリングして受け入れ、応答するコンポーネントのクラスであり、以下のように説明されています。 http://kevin2562.javaeye.com/blog/686787

9. プロバイダ:プロパティ



<provider android:authorities="list"

          android:enabled=["true" | "false"]

          android:exported=["true" | "false"]

          android:grantUriPermissions=["true" | "false"]

          android:icon="drawable resource"

          android:initOrder="integer"

          android:label="string resource"

          android:multiprocess=["true" | "false"]

          android:name="string"

          android:permission="string"

          android:process="string"

          android:readPermission="string"

          android:syncable=["true" | "false"]

          android:writePermission="string">

           <grant-uri-permission/>

           <meta-data/>

</provider>

contentProvider (データストア)

[1] android:authorities。

はこのContentProviderを識別し、呼び出し側はこの識別子で見つけることができます。

[2] android:grantUriPermission.

URIに対して付与されるパーミッション

[3] android:initOrder

10. 使用ライブラリ

カスタマイズ可能なユーザーライブラリ。全てのアンドロイドパッケージが参照可能

11. サポートスクリーン



<supports-screens android:smallScreens=["true" | "false"] 
                  android:normalScreens=["true" | "false"] 
                  android:largeScreens=["true" | "false"] 
                  android:anyDensity=["true" | "false"] />


アンドロイド1.6以降の新機能で、マルチスクリーン機構をサポートします。

各プロパティの意味:この4つのプロパティ、大画面に対応するかどうか、中画面に対応するかどうか、小画面に対応するかどうか、多くの異なる密度に対応するかどうか

12. use-configurationとuse-featureはどちらも似たような性能を持っている

<uses-configuration android:reqFiveWayNav=["true" | "false"] 
                    android:reqHardKeyboard=["true" | "false"]
                    android:reqKeyboardType=["undefined" | "nokeys" | "qwerty" | "twelvekey"]
                    android:reqNavigation=["undefined" | "nonav" | "dpad" | "trackball" | "wheel"]
                    android:reqTouchScreen=["undefined" | "notouch" | "stylus" | "finger"] />

<use-feature android:glEsVersion="integer"
              android:name="string"
              android:required=["true" | "false"] />


どちらも、アプリが必要とするハードウェアとソフトウェアの機能を記述し、その機能を持たない端末にアプリがインストールされないようにするためのものである。

13. use-sdk

<uss-sdk android:minSdkVersion="integer"
          android:targetSdkVersion="integer"
          android:maxSdkVersion="integer"/>

アプリに必要なapiレベルを記述します。バージョンとは、現在アンドロイド2.2=8、アンドロイド2.1=7、アンドロイド1.6=4、アンドロイド1.5=3です。

この属性では、サポートする最小、目標、最大のバージョンを指定することができます。

14. インストルメンテーション


<Instrumentation android:functionalTest=["true" | "false"]
                 android:handleProfiling=["true" | "false"]
                 android:icon="drawable resource"
                 android:label="string resource"
                 android:name="string"
                 android:targetPackage="string"/>

アプリケーションのパフォーマンスをプローブし、分析するためのいくつかのクラスと、アプリケーションを監視できるその他の関連するものを定義します。Instrumentation クラスは、個々のアプリケーションコンポーネントの前にインスタンス化されます。

android:functionalTest(解釈:Instrumentationクラスが機能テストを実行できるかどうか、デフォルトはfalse)。

15. パーミッション、uses-permission、permission-tree、permission-groupの違いについて〜。

最も一般的なものは、パーミッションを取得する必要があるときに、マニフェスト ファイルで宣言する必要があるということです。これは他のものと同じレベルです。特定のパーミッションのリストについては、こちらを参照してください。

通常、他のアプリケーションが呼び出すためのコードやデータを提供しない限り、私たちのアプリケーションのパーミッションを宣言する必要はありません。そんなときにこのタグを使う必要があります。明らかにこのタグは、私たち自身のパーミッションを宣言することができます。例えば


<application . . . >
        <activity android:name="XXX" . . . > android:commission="com.teleca.project.MY_SECURITY"> </activity>

 </application>


もちろん、自分で宣言したパーミッションだけではダメで、やはり必要だと宣言したものを使う必要があります

は、パーミッションのセットを表すタグを宣言するのではなく、パーミッションのセットのための名前空間を宣言することです。

IV. いくつかの共通メソッドを共有する

/* Get the app version number
     * @param context
     * @return
     */
    public static String getAppVersion(Context context) {
         try {
            // Get an instance of packageManager
            PackageManager packageManager = context.getPackageManager();
            // getPackageName() is the name of your current class package, 0 means get version information
            PackageInfo packInfo = packageManager.getPackageInfo(context.getPackageName(),0);
            String version = packInfo.versionName;
            return version;
        } catch (NameNotFoundException e) {
            e.printStackTrace();
        }
         return null;
    }

    /**
     * get android os version no
     * @return
     */
    public static float getAndroidVersion() {
        return Float.valueOf(android.os.Build.VERSION;)
    }

    /**VERSION.
     * get device model
     * @return
     */
    public String getDeviceModel () {
        return android.os.Build.MODEL;
    }

    /* get android os sdk version 2.2 = 8,2.3
     * get android os sdk version 2.2 = 8,2.3 = 9,4.2.1 = 17
     * @return sdk version
     */
    public static int getSDKVersion(){
        return android.os.Build.VERSION.SDK_INT;
    }