2013年7月27日土曜日

Android 4.3 で追加されたAppOpsの調査

Android4.3で追加されているAppOpsを確認しました。
アプリケーションのパーミッションの管理ができるかもしれません。


ポイント

AppOpsのポイントです。
  • AppOpsManager、AppOpsServiceが追加された
  • アプリケーションで使うには、getSystemService(Context.LAYOUT_INFLATER_SERVICE)をコール
  • アプリケーションのパーミッションの抑制ができる
  • framewokrs内の各サービスは、AppOpsServiceから設定値を取得して動作ON/OFFを決定
(AppOpsManager.MODE_ALLOWED / MODE_IGNOREDなどでgrepすればOK)


簡易クラス図



AppOpsServiceが生成されるタイミング

ActivityManagerServiceのコンストラクタで、AppOpsServiceが生成されます。

 
    private ActivityManagerService() {
        File systemDir = new File(dataDir, "system");
            :
        mAppOpsService = new AppOpsService(new File(systemDir, "appops.xml"));
            :
    }


AppOpsManagerの設定データ

AppOpsの設定値は次のように保存されています。
格納ディレクトリは上記のとおり、Systemディレクトリでファイル名はappops.xmlです。
設定値のR/Wは次のように、AppOpsServiceで処理されています。詳しく知りたい方はソースを確認しましょう。

 
public class AppOpsService extends IAppOpsService.Stub {
    public AppOpsService(File storagePath) {
        mFile = new AtomicFile(storagePath);
        mHandler = new Handler();
        readState();
    }

    void readState() {

    }
    void writeState() {

    }
}


ソース

android-4.3_r2.1のソースを確認すると、次のソースがAppOpsに該当します。
以下のソースは要チェックです。

Settingsアプリ
packages/apps/Settings/src/com/android/settings/applications
- AppOpsCategory.java
- AppOpsDetails.java
- AppOpsState.java
- AppOpsSummary.java


Frameworks
frameworks/base/core/java/android/app/ContextImpl.java
frameworks/base/core/java/android/app/AppOpsManager.java
frameworks/base/services/java/com/android/server/AppOpsService.java
frameworks/base/services/java/com/android/server/am/ActivityManagerService.java


0 件のコメント:

コメントを投稿