【知識点】task process関係
6175 ワード
1.同一Apkにおける同一パッケージにおけるActivity呼び出し時のプロセス状況検証[1]Project:projectname:FirstProjectpackage:comを作成する.demoデフォルトActivity:MainActivity[2]新しいActivity:name:SecondActivity[3]レイアウトの変更を追加します.MainActivityレイアウトにButtonを追加し、このButtonをクリックするとSecondActivityを起動します.SecondActivityのレイアウトにTextviewを配置し、SecondActivityが起動していることを確認します.[4]プログラムを実行し、このApプロセスの状況を表示する:USER:app_36 PID:8360 NAME:com.demoボタンをクリックし、SecondActivityを起動し、プロセス状況を再度表示します:USER:app_36 PID:8360 NAME:com.demoプロセスリストは変更されず、2つのActivityは同じプロセスで実行されます.
2.同一Apkにおける異なるパケットのActivity呼び出し時のプロセス状況検証[1]SecondActivityをパケットcomに移行する.demo.secondで行って、それに応じてAndroidManifestを修正します.xmlのnameは:com.demo.second.SecondActivity[2]プログラムを実行し、この時点のプロセス状況を表示する:USER:app_36 PID:10593 NAME:com.demo[3]ボタンをクリックしてSecondActivityを起動し、この時点のプロセス状況を表示する:USER:app_36 PID:10593 NAME:com.demoプロセスリストは変更されず、2つのActivityは同じプロセスで実行されます.つまりプロセス名はAndroidManifestのみである.xmlのmanifsetノードのpackageプロパティが影響します.
3.同一ApkにおけるActivity process属性修正後のプロセス状況検証[1]SecondActivityにprocess属性を追加し、その値は「:abc」であり、他のものでも構わない」「先頭の文字列、よくあるのは「:remote」:
Xmlコード
[2]プログラムを実行し、プロセス状況を表示する:USER:app_36 PID:12137 NAME:com.demo[3]ボタンをクリックし、SecondActivityを起動し、プロセス状況を表示する:USER:app_36 PID:12137 NAME:com.demoUSER:app_36 PID:12303 NAME:com.demo:abcプロセステーブルに1つ追加されました.2つのActivityにはそれぞれ1つのプロセスがあり、SecondActivityのプロセス名はパッケージ名+接尾辞です.
4.異なるApkにおける異なるパッケージ名のActivityプロセス状況検証[1]FirstProjectの実行:USER:app_36 PID:12137 NAME:com.demo[2]SecondProject:project name:SecondProjectpackage:comを作成する.demo 2デフォルトActivity:MainActivity[3]実行SecondProject:USER:app_37 PID:14191 NAME:com.demo 2プロセステーブルに1つ追加されました.2つのActivityにはそれぞれ1つのプロセスがあり、同時にそのプロセスのユーザー名、パッケージ名も異なり、互いに影響しません.
5.異なるApk、署名が同じ、パッケージ名が同じActivityプロセス状況検証[1]SecondProjectを修正するパッケージもcomである.demo、それに応じてAndroidManifestを修正します.xmlコンテンツ.[2]SecondProjectを実行し、プロセス状況を表示する:USER:app_36 PID:14944 NAME:com.demoプロセステーブルは1つしかありませんが、実際にはFirstProjectはこの時点で上書きされ、システムにはSecondProjectしか存在しません.シミュレータのデバッグ時にapkが使用する署名keyは同じなので、システムはkeyを見て、パッケージ名は同じようにこのパッケージがFirstProjectで上書きされたと考えられています.DDMSで/data/system/packagesをコピーできます.xmlは内容を確認します.
Xmlコード
このファイルではpackage nameが一意であり、ユーザー名がuserIdによって決定されていることがわかります.
6.Apkによって署名が異なり、パッケージ名が同じActivityプロセス状況検証[1]EclipseのPackage ExplorerナビゲーションツリーでFirstProjectを選択し、右クリックします.[2]Android tools->Export Signed Application Packageは、ウィザードに従って指定したkeyで署名したapkパッケージを作成します.[3]同様にSecondプロジェクトをエクスポートする.[4]ウィンドウをシミュレータに切り替え、ホームキーを押す->Menuキーを押す->設定->アプリケーション->アプリケーションの管理->アプリケーション->SecondProject->アンインストール.これはコマンドラインインストールの準備のためです.[5]コマンドラインウィンドウを起動し、adb install firstprojectを実行する.apkでは、インストールに成功したことを示すメッセージが表示されます.[6]adb install secondprojectを実行する.apk、インストールに失敗したことを示す.デフォルトのApkでは、インストール時に新しいUserIdが割り当てられます.つまり、FirstProjectとSecondProjectのUserIdは異なると考えられます.パッケージ名が異なる場合、署名keyが同じかどうかは関係なく、両方のapkがインストールできます.【4番目の実験】包名が同じで、署名keyが同じであれば【5番目の実験】をカバーする.署名が異なると、2番目のapkのインストールに失敗します.【6番目の実験】
7.異なるApk、Share User Idは同じで、パッケージ名が異なるプロセス状況分析[1]firstproject、secondprojectのAndroidManifestを修正する.xmlのmanifsetノード、属性を追加
Xmlコード android:sharedUserId=”com.demouser”
[2]secondprojectのパッケージをcomに変更する.demo 2、そうでないとfirsetprojectが上書きされます.[3]firsetproject、secondprojectを実行し、プロセスリストを表示する:USER:app_35 PID:19993 NAME:com.demo2USER:app_35 PID:20045 NAME:com.demo 2には2つのプロセスが残っています.プロセスのユーザー名と同様に、shareUserIdが有効であることを示しますが、プロセス名は異なります.再エクスポート/data/system/packages.xml、その内容を表示します:
Xmlコード
Xmlコード
両方の項目のUserIdが10035であることがわかりますが、確かに同じです.
8.異なるApk、Share User Idは同じ、パッケージ名が異なる、Activityを指定するprocess属性プロセス状況分析[1]SecondProjectのMainActivityのprocess属性を修正し、プロセス名comにバインドすることを指定する.demoのプロセス:
Xmlコード android:label=”@string/app_name” android:process=”com.demo”>
[2]firstProject、SecondProjectを実行し、プロセス状況を表示する:USER:app_35 PID:21387 NAME:com.demo 2つのActivityは同じプロセスで実行されます.
9.異なるApk、Share User Idは同じで、パッケージ名が異なって、署名keyは異なって実験を経て、2番目のapkをインストールする時INSTALL_を提示しますFAILED_UPDATE_INCOMPATIBLEエラー、インストールに失敗しました.
まとめ:UserIdが異なる:パケット名が異なる:プロセス属性が設定されていない場合、それぞれのActivityはそれぞれのプロセスにあります.プロセスがパケット名を指定しても、別のユーザの同名パケットとプロセスを共有しません.パッケージ名が同じ:署名が同じ:古い同じパッケージ名apkを上書きします.署名が異なる:新しいapkはインストールに失敗します.【署名キーは一般に異なる】UserIdと同時:パケット名が異なる:プロセス属性が設定されていない場合、それぞれのActivityはそれぞれのプロセスにある.プロセス属性指定では、プロセスを共有できます.パッケージ名が同じ:署名が同じ:古い同じパッケージ名apkを上書きします.署名が異なる:新しいapkはインストールに失敗します.【サインキーは普通違う】
2.同一Apkにおける異なるパケットのActivity呼び出し時のプロセス状況検証[1]SecondActivityをパケットcomに移行する.demo.secondで行って、それに応じてAndroidManifestを修正します.xmlのnameは:com.demo.second.SecondActivity[2]プログラムを実行し、この時点のプロセス状況を表示する:USER:app_36 PID:10593 NAME:com.demo[3]ボタンをクリックしてSecondActivityを起動し、この時点のプロセス状況を表示する:USER:app_36 PID:10593 NAME:com.demoプロセスリストは変更されず、2つのActivityは同じプロセスで実行されます.つまりプロセス名はAndroidManifestのみである.xmlのmanifsetノードのpackageプロパティが影響します.
3.同一ApkにおけるActivity process属性修正後のプロセス状況検証[1]SecondActivityにprocess属性を追加し、その値は「:abc」であり、他のものでも構わない」「先頭の文字列、よくあるのは「:remote」:
Xmlコード
<activity android:name="com.demo.second.SecondActivity" android:process=":abc"></activity>
[2]プログラムを実行し、プロセス状況を表示する:USER:app_36 PID:12137 NAME:com.demo[3]ボタンをクリックし、SecondActivityを起動し、プロセス状況を表示する:USER:app_36 PID:12137 NAME:com.demoUSER:app_36 PID:12303 NAME:com.demo:abcプロセステーブルに1つ追加されました.2つのActivityにはそれぞれ1つのプロセスがあり、SecondActivityのプロセス名はパッケージ名+接尾辞です.
4.異なるApkにおける異なるパッケージ名のActivityプロセス状況検証[1]FirstProjectの実行:USER:app_36 PID:12137 NAME:com.demo[2]SecondProject:project name:SecondProjectpackage:comを作成する.demo 2デフォルトActivity:MainActivity[3]実行SecondProject:USER:app_37 PID:14191 NAME:com.demo 2プロセステーブルに1つ追加されました.2つのActivityにはそれぞれ1つのプロセスがあり、同時にそのプロセスのユーザー名、パッケージ名も異なり、互いに影響しません.
5.異なるApk、署名が同じ、パッケージ名が同じActivityプロセス状況検証[1]SecondProjectを修正するパッケージもcomである.demo、それに応じてAndroidManifestを修正します.xmlコンテンツ.[2]SecondProjectを実行し、プロセス状況を表示する:USER:app_36 PID:14944 NAME:com.demoプロセステーブルは1つしかありませんが、実際にはFirstProjectはこの時点で上書きされ、システムにはSecondProjectしか存在しません.シミュレータのデバッグ時にapkが使用する署名keyは同じなので、システムはkeyを見て、パッケージ名は同じようにこのパッケージがFirstProjectで上書きされたと考えられています.DDMSで/data/system/packagesをコピーできます.xmlは内容を確認します.
Xmlコード
<package name="com.demo" codePath="/data/app/com.demo.apk" system="false" ts="1279955425000" version="1" userId="10036">
このファイルではpackage nameが一意であり、ユーザー名がuserIdによって決定されていることがわかります.
6.Apkによって署名が異なり、パッケージ名が同じActivityプロセス状況検証[1]EclipseのPackage ExplorerナビゲーションツリーでFirstProjectを選択し、右クリックします.[2]Android tools->Export Signed Application Packageは、ウィザードに従って指定したkeyで署名したapkパッケージを作成します.[3]同様にSecondプロジェクトをエクスポートする.[4]ウィンドウをシミュレータに切り替え、ホームキーを押す->Menuキーを押す->設定->アプリケーション->アプリケーションの管理->アプリケーション->SecondProject->アンインストール.これはコマンドラインインストールの準備のためです.[5]コマンドラインウィンドウを起動し、adb install firstprojectを実行する.apkでは、インストールに成功したことを示すメッセージが表示されます.[6]adb install secondprojectを実行する.apk、インストールに失敗したことを示す.デフォルトのApkでは、インストール時に新しいUserIdが割り当てられます.つまり、FirstProjectとSecondProjectのUserIdは異なると考えられます.パッケージ名が異なる場合、署名keyが同じかどうかは関係なく、両方のapkがインストールできます.【4番目の実験】包名が同じで、署名keyが同じであれば【5番目の実験】をカバーする.署名が異なると、2番目のapkのインストールに失敗します.【6番目の実験】
7.異なるApk、Share User Idは同じで、パッケージ名が異なるプロセス状況分析[1]firstproject、secondprojectのAndroidManifestを修正する.xmlのmanifsetノード、属性を追加
Xmlコード
android:sharedUserId="com.demouser"
[2]secondprojectのパッケージをcomに変更する.demo 2、そうでないとfirsetprojectが上書きされます.[3]firsetproject、secondprojectを実行し、プロセスリストを表示する:USER:app_35 PID:19993 NAME:com.demo2USER:app_35 PID:20045 NAME:com.demo 2には2つのプロセスが残っています.プロセスのユーザー名と同様に、shareUserIdが有効であることを示しますが、プロセス名は異なります.再エクスポート/data/system/packages.xml、その内容を表示します:
Xmlコード
<package name="com.demo" codePath="/data/app/com.demo.apk" system="false" ts="1279957484000" version="1" sharedUserId="10035">
Xmlコード
<package name="com.demo2" codePath="/data/app/com.demo2.apk" system="false" ts="1279957473000" version="1" sharedUserId="10035">
両方の項目のUserIdが10035であることがわかりますが、確かに同じです.
8.異なるApk、Share User Idは同じ、パッケージ名が異なる、Activityを指定するprocess属性プロセス状況分析[1]SecondProjectのMainActivityのprocess属性を修正し、プロセス名comにバインドすることを指定する.demoのプロセス:
Xmlコード
<activity android:name=".MainActivity"
android:label="@string/app_name" android:process="com.demo">
[2]firstProject、SecondProjectを実行し、プロセス状況を表示する:USER:app_35 PID:21387 NAME:com.demo 2つのActivityは同じプロセスで実行されます.
9.異なるApk、Share User Idは同じで、パッケージ名が異なって、署名keyは異なって実験を経て、2番目のapkをインストールする時INSTALL_を提示しますFAILED_UPDATE_INCOMPATIBLEエラー、インストールに失敗しました.
まとめ:UserIdが異なる:パケット名が異なる:プロセス属性が設定されていない場合、それぞれのActivityはそれぞれのプロセスにあります.プロセスがパケット名を指定しても、別のユーザの同名パケットとプロセスを共有しません.パッケージ名が同じ:署名が同じ:古い同じパッケージ名apkを上書きします.署名が異なる:新しいapkはインストールに失敗します.【署名キーは一般に異なる】UserIdと同時:パケット名が異なる:プロセス属性が設定されていない場合、それぞれのActivityはそれぞれのプロセスにある.プロセス属性指定では、プロセスを共有できます.パッケージ名が同じ:署名が同じ:古い同じパッケージ名apkを上書きします.署名が異なる:新しいapkはインストールに失敗します.【サインキーは普通違う】