App Manager

Muntashir Al-Islam

image

App Manager

ユーザーマニュアル

v3.0.0-alpha03

6 5月 2022

Copyright © 2020–2022 Muntashir Al-Islam

“賢明に、そして、ゆっくりと。速く走る者たちは、つまずきますからな” — 修道士ロレンス, ロメオとジュリエット

1 はじめに

App Manager は、Android 用の高度なパッケージマネージャです。 数え切れないほどの機能を備えているため、ユーザーを支援するためのユーザーマニュアルが必要です。 このドキュメントは、App Manager が提供するすべての機能を説明することを目的としており、App Manager のユーザーマニュアルとして機能します。 また、このドキュメントは、App Managerの「公式」ガイドラインと考えることもでき、App Managerに期待される動作を表しています。 翻訳によって、このドキュメント(英語で書かれている)が誤解される可能性があります。 したがって、すべての有能なユーザは、App Managerを最大限に活用するために、英語版のドキュメントを読む必要があります。 ブログ記事、ビデオ、チャットグループなど、他の非公式またはサードパーティのリソースも同様に存在するかもしれません。 これらのリソースは多くの人にとって有用かもしれませんが、App Managerの最新バージョンに対応していない可能性があります。App Managerでこのドキュメントからの逸脱が検出された場合、App Managerのイシュートラッカーからご報告ください。

1.1 用語の定義

1.2 対応バージョン

現在、サポートされているバージョンは、v2.6.0 (安定版)、 v3.0.0 (alpha と デバッグビルド)です。 App Managerの旧バージョンは、セキュリティ上の脆弱性が含まれている可能性があるため、使用しないでください。

1.3 公式ソース

1.3.1 バイナリ配布ソース

App Managerは、以下のソースを使用して配布されています。非公式なソースは、App Managerの修正されたバージョンを配布する可能性があり、 そのようなバージョンを使用した結果について、一切の責任を負わないものとします。

  1. Official F-Droid repository.1
    リンク: https://f-droid.org/packages/io.github.muntashirakon.AppManager

  2. GitHub repository.
    安定版: https://github.com/MuntashirAkon/AppManager/releases
    デバッグビルド: https://github.com/MuntashirAkon/AppManager/actions

  3. Telegram.
    安定版: https://t.me/AppManagerChannel
    デバッグビルド: https://t.me/AppManagerDebug

1.3.3 翻訳

App Managerは、プル/マージリクエストによる翻訳を直接受け付けていません。翻訳は、Weblate を介して自動的に管理されます。 翻訳チームに参加するには、https://hosted.weblate.org/engage/app-manager/をご覧ください。

1.4 貢献する

ユーザーは、役に立つ課題の作成、議論への参加、ドキュメントや翻訳の改善、未認識のライブラリやトラッカーの追加、 ソースコードのレビュー、セキュリティ脆弱性の報告など、さまざまな方法でAppManagerの開発に貢献することができます。

1.4.1 ビルド手順

ビルド手順は、ソースコードのルートディレクトリにあるBUILDINGファイルに記載されています。

1.4.2 パッチを提出する

現在、GitHub以外のリポジトリはそのミラーであり、これらのサイトで提出されたプル/マージリクエストは受け付けていません。2 その代わり、パッチ(.patchファイル)を電子メールに添付して提出することができます。コミットにサインオフを行う必要があります。 詳細は、ソースのルートディレクトリにあるCONTRIBUTINGファイルをご参照してください。

Notice.

電子メールでパッチを提出する場合、将来的に会話全体が公にアクセス可能となる可能性があります。 そのため、名前とメールアドレス以外の個人を特定できる情報(PII)は記載しないでください。

1.5 寄付、出資

App Managerを使用するのに、寄付や購入は必須ではありません。App Managerは購入をサポートしていませんが、 Open Source Collectiveを通じてApp Managerの開発者に寄付を送ることができます。

Open Source Collectiveは、オープンソースプロジェクトの財政管理を支援するOpen Collectiveプラットフォーム内の財政ホストです。 現在は銀行振り込み、PayPal、クレジットカード、デビットカード、暗号通貨による寄付に対応しています。

リンク: https://opencollective.com/muntashir.

寄付を送ることにより、あなたは寄付を利用して要求された機能を優先させないことに同意するものとします。 機能リクエストは、賞金や寄付を必要とせず、開発者の好みに応じて優先順位がつけられます。

App Managerは、資金提供や助成金の申し出を受け付けています。利害関係のある組織の代表者は、§1.6に記載されている連絡先を使用して開発者に直接連絡することができます。

1.6 連絡先

Muntashir Al-Islam3
Eメール: muntashirakon [at] riseup [dot] net
GPG鍵フィンガープリント: 7bad37c2981e41f8f6abea7f58f0b4f26c346fce
GitHub: https://github.com/MuntashirAkon
Twitter: https://twitter.com/Muntashir

2 ページ

2.1 メインページ

メインページには、インストールされているアプリケーション、アンインストールされているアプリケーション、バックアップされているアプリケーションがすべて表示されます。 インストールされているアプリケーションの項目をタップすると、それぞれのアプリケーションの詳細ページが表示されます。 アンインストールされたシステムアプリの場合は、アプリの再インストールを行うことができるプロンプトが表示されます。 表示オプションの並び替え を使用して、アプリの項目をさまざまな方法でソートし、終了時に保存することができます。 また、フィルタを使用して、項目を絞り込むことも可能です。 検索バーを使ったフィルタリングも可能で、正規表現もサポートされています。

2.1.1 バッチ処理

このページでは、一括操作や複数のアプリケーションに対する操作も可能です。 複数選択モードは、アプリのアイコンをタップするか、リスト内の任意の項目を長押しすることで有効になります。 一度アクティブにすると、アプリの詳細ページを開く代わりに、リストの項目をシングルクリックすることでそのアプリが選択されます。 このモードで、一括操作はページ下部の複数選択メニューに表示されます。次のような操作が含まれます:

  • 選択したアプリケーションをプロファイルに追加する

  • アプリケーションのバックアップ、リストア、削除

  • アプリケーションからのトラッカーをブロックする

  • アプリケーションのデータまたはキャッシュを消去する

  • アプリケーションの有効化/無効化/強制停止/アンインストール

  • App Managerに保存したブロッキングルールをエクスポート

  • アプリケーションのバックグラウンド動作を禁止する(Android 7以降)

  • APKファイルを AppManager/apks に保存する

  • ネット接続ポリシーを適用する

Accessibility.

複数選択モードを有効にした後、キーボードまたはリモコンの左右キーで複数選択メニューにナビゲートすることが可能です。

2.1.2 カラーコード

  • ライトグレーオレンジ(ライトモード) / 紺色 (ナイトモード) – バッチ処理で選択したアプリ

  • 薄い赤色(ライトモード) / 茶色(ナイトモード) – 無効化されたアプリ

  • 黄色 – デバッグ可能なアプリ

  • オレンジ色の 日付 – アプリはシステムログにアクセス可能

  • オレンジ色の UID – 複数のアプリでユーザーIDを共有している

  • オレンジ色の SDK – アプリケーションが平文(HTTPなど)のトラフィックを使用している可能性がある

  • 赤色の パッケージ名 – データの消去を許可していないアプリ

  • 赤色の バックアップ – AppManager に 1 つ以上のバックアップが存在するアンインストールされたアプリケーション

  • オレンジ色の バックアップ – 古いバックアップ,つまり、ベースバックアップにインストールされたアプリケーションの古いバージョンが含まれています

  • シアン色の バックアップ – 最新のバックアップ, つまり、ベースバックアップには、インストールされたアプリケーションと同じかそれ以上のバージョンが含まれています

  • シアン色の パッケージ名 – 強制停止されたアプリ

  • シアン色の バージョン – 非アクティブなアプリ

  • マゼンダ – 永続的なアプリケーション、つまり、常に実行状態のままです

2.1.3 アプリケーションタイプ

アプリには、ユーザーアプリとシステムアプリがあり、次の接尾辞が付きます:

  • X – マルチアーキテクチャをサポートしています

  • 0 – アプリにDEXファイルが存在しません

  • ° – 休止したアプリ

  • # – アプリはシステムに大きなヒープ、すなわち大きな実行時メモリを割り当てるよう要求しています

  • ? – アプリは仮想マシンをセーフモードにするよう要求しています

2.1.4 バージョン情報

バージョン名の後には、次の接頭辞が付きます:

  • _ – ハードウェアアクセラレーションを使用していません(アプリ内のアニメーションや透明度が壊れる)

  • ~ – テストビルドのアプリ

  • debug – デバッグ可能なアプリ

2.1.5 オプションメニュー

オプションメニューには、表示されたアプリの並べ替えやフィルタリング、App Manager内外のさまざまなページへの移動に使用できるオプションが いくつか用意されています。

2.1.5.1 手順

ヘルプをタップすると、オフライン版のApp Managerユーザーマニュアルが開きます。 対応する機能スプリットfeat_docsがインストールされていない場合や、 マニュアルを読み込むためのWebViewがシステムに存在しない場合、オンライン版が開かれることもあります。

2.1.5.2 表示オプション

表示オプションには、メインページのリストの並び替えやフィルタリングのためのオプションが含まれています。

2.1.5.2.1 並び替え

メインページに表示されるアプリケーションは、次の方法で並び替えることができます:

  • ユーザーアプリを優先 ユーザーアプリが上位に表示します

  • アプリ名 アプリ名で昇順にリストを並べ替えます。これはデフォルトの並べ替え設定です

  • パッケージ名 パッケージ名で昇順に並び替えます

  • 最後の更新 最終更新日を基準に降順で並べ替えます

  • 共有UID カーネルユーザーIDを基準に降順で並べ替えます

  • ターゲットSDK ターゲットSDKに基づいてリストを昇順で並べ替えます

  • 署名 署名情報をもとに昇順に並べ替えます

  • 無効のものを優先 無効にされたアプリを上位に表示します

  • ブロック済みのものを優先 各アプリケーションが持つブロックされたコンポーネントの数に基づいて、リストを降順に並べ替えます

  • バックアップ済みを優先 バックアップをとっているアプリケーションを上位に表示します

  • トラッカー 各アプリケーションが持つトラッカーコンポーネントの数に基づいて、リストを降順に並べ替えます

  • 最終アクション App Manager内でアプリケーションに行われたアクションの最新日時に基づいて、リストを降順に並べ替えます。

さらに、リストを反転させるリバースオプションもあります。ソートの設定にかかわらず、ランダムなソート結果を生成しないようにするために、アプリは最初にアルファベット順にソートされます。

2.1.5.2.2 フィルタ

メインページに表示されるアプリケーションは、次の方法でフィルタリングすることができます:

  • ユーザーアプリ ユーザーアプリのみを表示します

  • システムアプリ システムアプリのみを表示します

  • 無効になっているアプリ 無効になっているアプリを表示します

  • ルールを適用済みのアプリ 1つ以上のブロッキングルールがあるアプリを表示します

  • アクティビティが存在するアプリ 1つ以上のアクティビティを持つアプリを表示します

  • バックアップ済みのアプリ バックアップが1つ以上あるアプリを表示します

  • 起動中のアプリ 現在実行されているアプリを表示します

  • 分割データを含むアプリ 1つ以上の分割APKファイルを持つアプリを表示します

  • インストール済みのアプリ インストールされているアプリのみを表示します

  • 未インストールのアプリ インストールされていないアプリのみを表示します

  • バックアップされたいないアプリバックアップが存在しないアプリを表示します

並べ替えとは異なり、複数のフィルタリングを同時に適用することが可能です。たとえば、「ユーザーアプリ」と「無効のアプリ」の両方を選択して無効になっているユーザーアプリを一覧表示することができます。この機能は、特定の操作を安全に実行するためにユーザーアプリのフィルタリングが必要なバッチ処理に特に役立ちます。

2.1.5.2.3 プロファイル名

また、プロファイルに存在するアプリケーションのみを表示することも可能です。 これは、プロファイルページでは行えない特定の操作(プロファイル内のすべてのアプリケーションのアンインストールなど) をプロファイルに対して行う場合に便利です。

2.1.5.3 ワンタップ一括処理

ワンタップ一括処理 では様々な操作をワンタップで行うことができます。 対応するページを新しいアクティビティで開きます。

2.1.5.4 アプリの使用状況

画面の使用時間データ使用量(モバイルとWi-Fiの両方)、アプリを開いた回数などのアプリ使用統計は、 メニューのアプリ使用状況オプションをクリックすることでアクセス可能です。 ただし、これには使用状況へのアクセス権限が必要です。 設定で使用状況アクセス機能を無効にしている場合、このメニュー項目は表示されません。

2.1.5.5 システムコンフィグ

このメニュー項目は、様々なシステム設定、OEM、ベンダー、AOSP、またはMagiskモジュールによってAndroidに含まれる ブラックリスト/ホワイトリストが表示される新しいページを開くものです。 これにはRoot権限が必要です。そのため、App Managerにroot権限が付与されていない場合、このメニュー項目は表示されません。

2.1.5.6 実行中のアプリ

このメニューでは、実行中のアプリケーションまたはプロセスの一覧を表示する新しいページを開きます。 また、現在のメモリとキャッシュ(利用可能な場合)の使用量も表示されます。 ルートまたはADBがApp Managerで利用できない場合、Androidの最近のバージョンでのみ表示されます。 実行中のアプリケーションまたはプロセスは、結果ページ内で強制停止またはキルすることもできます。 ログビューアでプロセスID(PID)ごとのログを確認することもできます。 また、アイコンをタップするか、項目を長押しすることで、バッチ処理を行うことができます。各項目をタップすると、より詳細な情報が表示されるダイアログが開きます。

2.1.5.7 プロファイル

このメニュー項目は、プロファイルページを開きます。プロファイルは、定期的に実行するタスクを設定するための方法です。 また、ショートカットで呼び出すこともできます。

2.1.5.8 ログビューワ

Logcatコマンドを使用してログを表示・管理できるログビューアページを開くメニューです。 デフォルトでは、このページはApp Managerのアクティビティのみを表示できます。 ただし、android.permission.READ_LOGSが付与されている場合は、すべてのプロセスからのログを表示することができます。 この権限は、現在の動作モードがRootまたはADBである場合に自動的に付与されます。

2.1.5.9 APK Updater

APK Updaterというアプリがシステムにインストールされている場合、 このメニュー項目から直接開くことができます。アプリがシステムにインストールされていない場合、このオプションは表示されません。

2.1.5.10 Termux

Termuxアプリがシステムにインストールされている場合、 このメニュー項目から実行中のセッション(または新しいセッション)を直接開くことができます。 アプリがシステムにインストールされていない場合、このオプションは表示されません。

2.1.5.11 設定

アプリ内の設定画面を表示するメニューです。

2.2 アプリ詳細画面

アプリ詳細ページは、11個のタブで構成されています。 マニフェストのすべての属性、AppOps、署名情報、ライブラリなど、 アプリが持ちうるほぼすべての情報が記述されています。

2.2.1 カラーコード

このページで使用している背景色とその意味の一覧です:

  • 赤 (ライト) / 紅赤 (ナイト) – Dangerousフラグを持つAppOpsや権限、またはApp Manager内でブロックされたコンポーネントを表します。

  • うすだいだい (ライト) / 茶色 (ナイト) – App Managerの外部で無効化されているコンポーネントを表します。

    Note.

    無効とマークされたコンポーネントは、必ずしもユーザーによって無効化されたことを意味するものではありません。 システムによって無効にされているか、マニフェストで無効とマークされている可能性もあります。 無効なアプリケーションのコンポーネントは、システム (および App Manager) によっても無効とみなされます。

  • オレンジ (ライト) / うすいオレンジ (night) – トラッカーコンポーネントを表します。

  • Soft magenta (day) / very dark violet (night) – 実行中のサービスを表します。

2.2.2 アプリ情報タブ

アプリ情報タブには、アプリケーションに関する一般的な情報が含まれています。 また、このタブ内で実行可能な多くのアクションが表示されます。

2.2.2.1 基本情報

以下のリストは、アプリ情報タブに記載されている順番と同じです。

  • アプリ名 アプリのアイコンです。アプリにアイコンがない場合は、システムデフォルトのアイコンが表示されます。

  • アプリ名 アプリの名称です。

  • バージョン アプリケーションのバージョンは、2つの部分に分かれています。最初の部分はバージョン名と呼ばれ、この部分のフォーマットは様々ですが、多くの場合ドットで区切られた複数の整数から構成されています。2つ目の部分はバージョンコードと呼ばれ、バージョン名の横の括弧内に記載されています。バージョンコードは整数で、通常はアプリのバージョンを区別するために使用されます。(バージョン名は機械では読めないことが多いため)一般に、新しいバージョンのアプリは、古いバージョンのアプリよりもバージョンコードが高くなります。たとえば、あるアプリのバージョンコードが123125の場合、後者のバージョンコードの方が高いので、後者は前者よりも更新されていると言えます。プラットフォーム(モバイル、タブ、デスクトップなど)に依存するアプリケーションの場合、これらのバージョン名は、プラットフォームごとに接頭辞を使用しているため、誤解を招く可能性があります。

  • タグ タグには、アプリの基本的で簡潔な、有用な情報が含まれています。例えば、トラッカー情報(トラッカーコンポーネントの数など)、アプリの種類(ユーザーアプリかシステムアプリか、アプリがシステムアプリの更新版かMagiskを使ってシステムレスでインストールされたか)、実行中(アプリのサービスがバックグラウンドで実行されているか)、分割APK情報(例. split APK info(分割数)、debuggable(アプリはデバッグバージョン)、test only(アプリはテスト専用アプリ)、ラージヒープ(アプリは大きなヒープサイズを要求)、停止(アプリは強制停止)、無効(アプリは無効)、キーストア(アプリはAndroid KeyStoreにアイテムがある)、no code(アプリにはコードが関連付けられていない)、SSAIDnetpolicy(バックグラウンドデータ使用などネットワークポリシー)、バッテリー最適化が表示されます。test onlydebuggableを含めることの重要性は、これらのプロパティを持つアプリが追加のタスクを実行できること、またはこれらのアプリが個人情報を保存する場合、セキュリティ上の問題を引き起こす可能性のあるルートなしで実行できることにあります。ラージヒープは、アプリが必要に応じてより多くのメモリ(RAM)を割り当てられることを意味します。ほとんどの場合、これは有害ではないかもしれませんが、大きなヒープを要求する不審なアプリは慎重に考慮する必要があります。

  • アクションパネル アプリに関する様々なアクションを含むアクションパネルです。ここで利用できるアクションの一覧は、2.2.2.2節を参照してください。

  • パスとディレクトリ アプリディレクトリ(APK ファイルが格納される場所)、データディレクトリ(内部、デバイス保護、外部)、分割 APK ディレクトリ(分割名と共に)、ネイティブ JNI ライブラリ(存在する場合)を含むアプリケーションパスに関するさまざまな情報が含まれています。JNI ライブラリは、通常 C/C++ で記述されたネイティブコードを呼び出すために使用されます。ネイティブライブラリを使用すると、アプリの実行速度が向上したり、ほとんどのゲームのようにJava以外の言語で書かれたサードパーティライブラリをアプリが使用できるようになります。これらのディレクトリは、各項目の右側にある起動アイコンをクリックして、お気に入りのファイルマネージャ(サポートしており、必要なパーミッションがある場合)を使用して開くこともできます。

  • 最終起動時からのデータ使用量 説明不要のオプションです。しかし、いくつかの問題のために、結果はしばしば誤解を招き、単に間違っている可能性があることに注意してください。この部分は、新しいデバイスで使用状況へのアクセス許可が与えられていない場合、隠されたままになります。

  • ストレージとキャッシュ アプリ(APKファイル)、データ、キャッシュのサイズに関する情報を表示します。古い端末では、外部データ、キャッシュ、メディア、OBBフォルダのサイズも表示されます。この部分は、新しいデバイスで 使用状況へのアクセス許可が与えられていない場合、隠されたままになります。

  • 詳細情報 次のような情報を表示します。

    • SDK Android SDKに関連する情報を表示します。値は2つ(古い端末では1つ)あります。最大はターゲットSDK、最小は最小SDKを表します(後者はそれ以上古い端末では利用できません)。現在プラットフォームがサポートしている最大のSDKを持つアプリを使用するのが好ましいです。SDKは、APIレベルとも呼ばれます。

      こちらもご覧ください: Androidのバージョン履歴

    • フラグ The application flags used at the time of building the app. For a complete list of flags and what they do, visit the official documentation. アプリのビルド時に使用するアプリケーションフラグです。フラグの完全なリストとその役割については、公式ドキュメントを参照してください。

    • インストール日時 アプリが最初にインストールされた日時です。

    • アップデート日時 アプリが最後に更新された日時です。アプリが更新されていない場合は、インストール日時と同じになります。

    • インストール日時 このアプリをインストールしたアプリです。すべてのアプリが、インストーラアプリを登録するためにパッケージマネージャに使用する情報を提供するわけではありません。そのため、この値を鵜呑みにするべきではありません。

    • ユーザーID Androidシステムがアプリに設定した固有のユーザーIDです。共有アプリケーションの場合、同じ共有ユーザーIDを持つ複数のアプリケーションに同じユーザーIDが割り当てられます。

    • 共有UID 一緒に共有するアプリケーションに適用されます。IDとありますが、実際は文字列の値です。共有するアプリケーションは、同じ署名を持つ必要があります。

    • メインアクティビティ アプリ起動時のアクティビティです。アプリにアクティビティがあり、そのいずれかがランチャーから開くことができる場合にのみ表示されます。また、右側には起動ボタンがあり、このアクティビティを起動するために使用することができます。

2.2.2.2 横長アクションパネル

前項のアクションパネルは、次のようなアプリに関連するさまざまなアクションで構成されています。

  • 起動 ランチャーアクティビティを持つアプリケーションは、このボタンから起動することができます。

  • 無効化 アプリを無効化します。アプリがすでに無効になっている場合や、RootアクセスやADBを持っていないユーザーには、このボタンは表示されません。アプリを無効にすると、そのアプリはランチャーアプリに表示されなくなります。また、そのアプリのショートカットも削除されます。ユーザーアプリを無効にした場合、App Managerまたはそれに対応する他のツールからのみ有効にすることができます。Androidの設定には、無効にしたユーザーアプリを有効にするオプションはありません。

  • アンインストール アプリをアンインストールします。

  • 有効化 アプリを有効化します。アプリがすでに有効化されている場合や、RootアクセスやADBを持っていないユーザーには、このボタンは表示されません。

  • 強制終了 アプリを強制停止します。 アプリを強制停止すると、明示的にアプリを開いてからでないと、そのアプリはバックグラウンドで実行できなくなります。しかし、これは必ずしも正しいとは限りません。

  • データを消去 アプリのデータを消去します。これには、アカウント(アプリによって設定されている場合)、キャッシュなど、内部および多くの場合外部のディレクトリに保存されているすべての情報が含まれます。例えば、App Managerからデータを消去すると、アプリ内に保存されているすべてのルールが削除されます(ただし、ブロックは削除されません)。そのため、ルールのバックアップを常に取っておく必要があります。このボタンは、RootアクセスまたはADBを持っていないユーザーには表示されません。

  • キャッシュを消去 アプリのキャッシュのみをクリアします。アプリのキャッシュをクリアする方法は、Android自体にはありません。そのため、アプリの内部ストレージからキャッシュをクリアするには、Root権限が必要です。

  • インストール サードパーティのアプリで開いたAPKをインストールします。このボタンは、インストールされていない外部APKの場合のみ表示されます。

  • 最新情報 インストールされているAPKよりもバージョンコードの高いAPKに対して表示されるボタンです。このボタンをクリックすると、バージョン間の差分がダイアログで表示されます。表示される情報は、バージョントラッカーパーミッションコンポーネント署名情報(チェックサムの変更)、機能共有ライブラリSDKなどです。

  • アップデート インストールされているアプリよりバージョンコードが高いアプリに対して表示されます。

  • 再インストール インストールされているアプリと同じバージョンコードを持つアプリに対して表示されます。

  • ダウングレード インストールされているアプリよりバージョンコードが低いアプリに対して表示されます。

  • マニフェスト このボタンをクリックすると、アプリのマニフェストファイルが別ページで表示されます。マニフェストファイルは、対応するトグルボタン (右上) を使用してラップまたはアンラップすることができ、保存ボタンを使用して共有ストレージに保存することができます。

  • スキャナー このボタンをクリックすると、アプリのトラッカーとライブラリの情報が表示されます。まず、アプリをスキャンして、クラスのリストを抽出し、クラス一覧と複数のシグネチャをマッチングさせます。その後、スキャン結果が表示されます。

    こちらもご覧ください: スキャナーページ

  • 共有設定 このボタンをクリックすると、アプリで使用されている共有環境設定の一覧が表示されます。リスト内の設定項目をクリックすると、共有設定エディターが表示されます。このオプションは、Rootユーザーのみに表示されます。

  • データベース このボタンをクリックすると、アプリが使用しているデータベースの一覧が表示されます。これはもっと改良が必要で、将来的にはデータベース・エディターが追加されるかもしれません。このオプションは、Rootユーザーのみに表示されます。

  • F-Droid 任意のF-Droidクライアントでアプリのページを開きます。

  • ストア Aurora Storeでアプリのページを開きます。このオプションは、Aurora Storeがインストールされている場合のみ表示されます。

2.2.2.3 オプションメニュー

ページの右上にあるのが、オプションメニューです。そこにあるオプションとその説明は以下の通りです:

  • 共有 共有ボタンでAPKファイルを共有したり、APKSファイル(アプリが複数分割されている場合)をSAIにインポートすることができます。任意のファイルマネージャーから共有し、ストレージにファイルを保存することができます。

  • 更新 アプリ情報タブの内容を更新します。

  • 設定画面で開く Android設定画面でアプリの詳細画面を開きます。

  • バックアップ/復元 バックアップ・復元を行うダイアログを開きます。

  • ブロッキングルールをエクスポート App Managerでこのアプリに対して設定されたルールをエクスポートします。

  • Termuxで開く Termuxでアプリを開きます。これは実際には su - user_id を実行します。ここで user_id はアプリのカーネルユーザーID(基本情報セクションで説明されています)を表します。このオプションはRootユーザーにのみ表示されます。サードパーティアプリケーションからコマンドを実行するように Termux を設定する方法については §2.2.2.4 を参照してください。

  • Termuxで実行 Termuxでrun-as package_nameを使用してアプリを開きます。これはデバッグ可能アプリにのみ適用され、Root及びADBの両方で動作します。サードパーティアプリケーションからコマンドを実行するように Termux を設定する方法については §2.2.2.4 を参照してください。

  • アイコンを抽出 アプリのアイコンを抽出して任意の場所に保存します。

2.2.2.4 Termuxを構成

デフォルトでは、Termuxはサードパーティアプリケーションからのコマンドの実行が許可されていません。 このオプションを有効にするには、~/.termux/termux.propertiesallow-external-apps=true を追加し、 Termux v0.96 以降を実行している必要があります。

Info.

このオプションを有効にしても、Termuxのセキュリティは低下しません。 サードパーティアプリは、他の権限と同様に、Termuxで任意のコマンドを実行できるようにユーザーに要求する必要があります。

2.2.3 コンポーネントタブ

アクティビティサービスレシーバブロードキャストレシーバ)、プロバイダコンテンツプロバイダ)を合わせてアプリケーションコンポーネントと呼びます。 それらは多くの点で同様の機能を共有しているからです。例えば、それらはすべて名前ラベルを持っています。 コンポーネントは、あらゆるアプリケーションの構成要素であり、そのほとんどはアプリケーションマニフェストで宣言されなければなりません。 アプリケーションマニフェストは、アプリケーション固有のメタデータが格納されるファイルです。 Androidシステムは、メタデータを読み取ることで、アプリケーションで何を行うかを学習します。 これらのタブで使用される色については、§2.2.1で説明しています。 また、オーバーフローメニューのソートオプションを使用して、ブロックされたコンポーネントやトラッカーコンポーネントをリストの上位に表示するよう、 コンポーネントのリストを並び替える機能があります。

2.2.3.1 アクティビティ

アクティビティは、アプリ内の閲覧できるウィンドウやページです(例えば、メインページアプリ詳細ページは別のアクティビティです)。つまり、アクティビティは、ユーザーインターフェース(UI)のコンポーネントです。各アクティビティは、ウィジェットフラグメントと呼ばれる複数のUIコンポーネントを持つことができ、同様に、後者のコンポーネントも、それぞれ複数のものを入れ子にしたり、オーバーレイすることができます。しかし、アクティビティはマスターコンポーネントです。アクティビティを2つネストさせることはできません。アプリケーションの開発者は、インテントフィルターと呼ばれる方法を使用して、アクティビティ内で外部ファイルを開くことを選択することもできます。ファイルマネージャーを使ってファイルを開こうとすると、ファイルマネージャーかシステムがインテントフィルターをスキャンして、どのアクティビティーがその特定のファイルを開けるかを決め、これらのアクティビティーでファイルを開けるように提案します。(したがって、アプリケーション自体には何の関係もありません)

エクスポート可能なアクティビティは、通常、サードパーティアプリで開くことができます(一部のアクティビティには権限が必要なため、その場合はその権限を持つアプリケーションのみが開くことができます)。アクティビティタブでは、アクティビティ名(各リスト項目の上部)がボタンとなっています。これは、エクスポート可能なアクティビティでは有効で、それ以外では無効になっています(Rootユーザーはどのアクティビティでも開くことができます)。ボタンをクリックすると、App Managerでアクティビティを直接開くことができます。また、アクティビティを長押しすることで、インタセプターのページを開くことができます。現在は、エクスポート可能なアクティビティに対してのみ機能します。

Notice.

例えば、アプリ詳細アクティビティは、少なくともパッケージ名を提供する必要があるため、開くことができません。これらの依存関係は、常にプログラムで推論することはできません。したがって、App Managerを使用してそれらを開くことはできません。

また、これらのエクスポート可能なアクティビティのショートカットを作成し(専用ボタンを使用)、必要であれば、ショートカットの編集ボタンでショートカットも編集することができます。

Caution.

App Managerをアンインストールすると、App Managerで作成したショートカットはすべて失われます。

2.2.3.2 サービス

ユーザーが閲覧することができるアクティビティとは異なり、サービスはバックグラウンドタスクを処理します。 例えば、スマートフォンのブラウザを使ってインターネットからファイルをダウンロードする場合、ブラウザはコンテンツをダウンロードするためにバックグラウンドサービスを使用しています。

アクティビティを終了すると、通常はすぐにメモリ上から破棄されます(端末の空きメモリの量など、多くの要因に依存します)。しかしサービスは、必要に応じて無期限に実行することができます。より多くのサービスがバックグラウンドで実行されている場合、メモリや処理能力が不足するため、携帯電話の動作が遅くなり、携帯電話のバッテリーがより速く消耗する可能性があります。新しいAndroidのバージョンでは、すべてのアプリでバッテリーの最適化機能がデフォルトで有効になっています。この機能を有効にすると、システムは任意のサービスをランダムに終了させることができます。

ところで、アクティビティもサービスもメインルーパーと呼ばれる同じルーパーで実行されるため、サービスが本当にバックグラウンドで実行されているとは限りません。それを保証するのは、アプリケーションの開発者の仕事です。アプリケーションとサービスはブロードキャストレシーバーを使って通信しています。

2.2.3.3 レシーバ

レシーバーブロードキャストレシーバーとも呼ばれる)は、特定のイベントに対して特定のタスクの実行を呼び出すために使用することができます。これらのコンポーネントは、ブロードキャストメッセージを受信するとすぐに実行されるため、ブロードキャストレシーバーと呼ばれます。これらのブロードキャストメッセージは、インテントと呼ばれるメソッドを使用して送信されます。インテントはAndroidの特別な機能で、アプリケーションやアクティビティ、サービスを開いたり、ブロードキャストメッセージを送信したりするために使われます。そのため、アクティビティと同様に、ブロードキャストレシーバもインテントフィルターを用いて、必要なブロードキャストメッセージのみを受信することができます。ブロードキャストメッセージは、システムまたはアプリケーション自体のいずれかによって送信することができます。ブロードキャストメッセージが送信されると、対応するレシーバーはシステムによって起動され、タスクを実行できるようになります。例えば、メモリが少ない場合、モバイルデータを有効にしたり、Wifiに接続した後に、端末がフリーズしたり、一瞬ラグが発生することがあります。なぜだか不思議に思ったことはありませんか?これは、「android.net.conn.CONNECTIVITY_CHANGE」を受信できるブロードキャストレシーバーが、データ接続を有効にすると同時に、システムによって起こされるからです。多くのアプリがこのインテントフィルタを使っているため、これらのアプリはすべて、システムによってほとんどすぐに起こされ、フリーズや遅延の原因になっています。要するに、レシーバはプロセス間通信(IPC)、つまり異なるアプリ間(必要な権限がある場合)、あるいは単一アプリケーションの異なるコンポーネント間の通信に使用できます。

2.2.3.4 プロバイダ

プロバイダコンテンツプロバイダともいう)は、アプリ内のデータ管理に使用されます。例えば、App ManagerでAPKファイルの保存やルールのエクスポートを行う場合、「androidx.core.content.FileProvider」というコンテンツプロバイダを使用します。データベース管理、トラッキング、検索など、様々なコンテンツ関連のタスクを管理するために、他のコンテンツプロバイダや、カスタムプロバイダーもあります。各コンテンツプロバイダは、パッケージ名と同様に、Androidエコシステム全体でその特定のアプリケーションに固有のAuthorityと呼ばれるフィールドを持っています。

2.2.3.5 Root化された端末向けの追加機能

これらのタブでは非Rootユーザーよりも、Rootユーザーは様々な操作を行うことができます。

2.2.3.5.1 コンポーネントをブロックする

各コンポーネント項目の右端には、「ブロック」ボタンがあります。(ブロックされているときは「ブロック解除」ボタンとなります) このボタンを使って、そのコンポーネントのブロックの状態を切り替えることができます。 インスタントブロッキングを有効にしていない場合、 または以前にアプリケーションにブロックを適用していない場合は、 3点メニューのルールを反映オプションで変更を適用する必要があります。 また、ルールを除去オプションから、すでに適用されたルールを削除することもできます。

こちらもご覧ください: FAQ: アプリのコンポーネント

2.2.3.5.2 トラッカーをブロックする

トラッカーコンポーネントを無効にするには、三点メニューの「トラッカーをブロック」を使用します。 現在表示されているタブに関係なく、すべてのトラッカーコンポーネントがブロックされます。

Info.

トラッカーコンポーネントは、アプリのコンポーネントの部分集合です。 したがって、他のコンポーネントのブロックに使用されるのと同じ方法によりブロックされます。

2.2.4 権限タブ

App OpsUses PermissionsPermissionsタブは、権限に関連しています。 Androidでは、同じID(共有IDとして知られます)を持たないアプリやプロセス間の通信は、しばしばパーミッション(複数可)を必要とします。 これらの権限は、権限コントローラーによって管理されます。 アプリケーションのマニフェストに記載されていれば自動的に付与される通常の権限もありますが、 dangerousdevelopmentパーミッションはユーザーの確認が必要です。 これらのタブで使用される色については、2.2.1節で説明しています。

2.2.4.1 App Ops

App Ops は、Application Operations(アプリケーションの操作)の略です。 Android 4.3以降、App OpsはAndroidシステムによってアプリ権限の大部分を制御するために使用されています。 各AppOpsは、それらに関連付けられた一意の番号を持っており、それはApp Opsタブの最初の括弧内に閉じられています。 また、プライベート名を持ち、任意でパブリック名を持つことができます。 いくつかのAppOpsは、権限とも関連付けられています。 AppOpsの保護レベルは、関連付けられた権限に基づいて決定されます。 フラグ権限名権限の説明パッケージ名グループのような情報は、 関連付けられた権限から取得されます。 その他の情報としては、以下のようなものがあります:

  • モード 現在の認可状態を表し、 allow、deny(やや語弊がありますが、単にエラーを意味します)、 ignore(実際には拒否を意味します)、default(ベンダーが内部で設定したデフォルトのリストから推測されます)、 foreground(新しいAndroidシステムでは、アプリケーションがフォアグラウンドで実行中のときのみAppOpsが使用できることを意味します)があります。 また、ベンダーが設定したいくつかのカスタムモード(例えば、MIUIの場合はask)があります。

  • 使用した時間 このAppOpsが使用された時間を表します。

  • 許可した時間 このAppOpsが最後に許可された時間を表します。

  • 拒否した時間 このAppOpsが最後に拒否された時間を表します。

Info.

このタブの内容は、ADBにてtextttandroid.permission.GET_APP_OPS_STATS権限が付与されている場合、非Rootユーザーでも見ることができます。

各AppOpsの項目の横にトグルボタンがあり、AppOpsを許可または拒否(無視)するために使用することができます。 デバイスで利用可能な他のモードを設定する必要がある場合は、項目を長押ししてください。 タブに表示されていないAppOpsを追加で設定する必要がある場合は、 メニューのカスタムAppOpsを適用オプションを使用します。 また、デフォルトに戻すオプションを使用して変更内容をリセットしたり、 メニューの対応するオプションを使用して危険なAppOpsをすべて拒否したりすることができます。 また、AppOpsの名前と関連する一意の番号(または値)で昇順に並べ替えることもできます。 また、対応するソートオプションを使用して、拒否されたAppOpsを最初に表示することができます。

Warning.

AppOpsを拒否すると、アプリケーションが誤動作することがあります。 そのような場合は、デフォルトに戻すオプションを使用してください。 AppOpsの動作の性質上、システムがそれを適用するのに時間がかかることがあります。

こちらもご覧ください: 付録: App Ops

2.2.4.2 使用する権限

Uses Permissionsは、アプリケーションで使用される権限です。マニフェストでuses-permissionタグを使用して宣言されます。 フラグパーミッション名パーミッションの説明パッケージ名グループなどの情報は、 関連する権限から取得されます。

RootおよびADBユーザーは、各権限項目の右側にあるトグルボタンを使用して、 dangerous権限とdevelopment権限を許可したり、取り消したりすることができます。 また、メニューの対応するオプションを使用して、危険なパーミッションを一度に取り消すこともできます。 Androidは通常の パーミッション(そのほとんどがそうですが)を変更することができないので、 この2種類のパーミッションのみ取り消すことができます。 唯一の選択肢は、アプリケーションマニフェストを編集し、そこからこれらの権限を削除することです。

Info.

dangerous権限はシステムによってデフォルトで拒否されているため、 すべてのdangerous権限を取り消すことは、すべての権限をリセットすることと同じです。

Notice.

API23以前を対象としたアプリは、権限を変更することができません。 そのため、そのようなアプリではパーミッションの切り替えは無効です。

ユーザーは、権限名でソートしたり(昇順)、メニューの対応するオプションを使用して、拒否された権限や dangerous権限を最初に表示するように選択することができます。

2.2.4.3 権限

パーミッションは通常、アプリケーション自身によって定義されるカスタム権限です。 主に古いアプリケーションでは、通常の権限も含まれることがあります。そこに表示される各項目の完全な説明は次の通りです:

  • 権限名 各権限はandroid.permission.INTERNETのような一意の名前を持っており、 複数のアプリケーションがその権限を要求することができます。

  • アイコン 各権限は任意のアイコンを持つことができます。 他の権限タブでは、アプリケーションマニフェストにアイコンが含まれていないため、アイコンを持ちません。

  • 詳細 このフィールドは、権限についての詳細な説明です。権限に関連する説明がない場合、このフィールドは表示されません。

  • フラグ (フラグシンボルまたは保護レベル名を使用) textitnormal, development, dangerous, instant, granted, revoked,signature, privilegedなどの権限フラグを表します。

  • パッケージ名 権限に関連するパッケージ名、すなわちその権限を定義したパッケージを表します。

  • グループ 権限に関連するグループ名を表します。新しいAndroidシステムではグループ名を使用しないため、 通常android.permission-group.UNDEFINEDやグループ名が全く表示されないことになるでしょう。

2.2.5 署名情報タブ

署名は、実際には署名情報と呼ばれ、アプリケーションは公開する前に、 アプリケーション開発者によって1つ以上の署名証明書によって署名されます。 アプリケーションの完全性(そのアプリケーションが実際の開発者のものかどうか、 他の人によって変更されていないかどうか)は、署名情報を使って確認できます。 なぜなら、アプリケーションを第三者が変更した場合、署名情報は実際の開発者によって秘密にされているため、 元の証明書を使って再び署名することができないからです。 これらの署名はチェックサムで検証することができます。チェックサムは、証明書自体から生成されます。 開発者がチェックサムを提供する場合、署名タブで表示されたチェックサムを照合することができます。 例えば、Github、Telegramチャンネル、IzzyOnDroidのリポジトリからApp Managerをダウンロードした場合、次のSHA256チェックサムをこのタブに表示されるものと照合するだけで、そのアプリケーションが実際に私がリリースしたものかどうか確認することができます:

320c0c0fe8cef873f2b554cb88c837f1512589dcced50c5b25c43c04596760ab

ここに表示されるチェックサムは、MD5SHA1SHA256の3種類です。

Caution.

署名情報の検証には、SHA256チェックサムのみ、もしくはこれら3つすべてを使用することを推奨します。 MD5SHA1のチェックサムだけでは、複数の証明書に対して同じハッシュを生成する可能性あるので、 それらのみに依存しないようにしてください。

2.2.6 共有ライブラリタブ

Shared libraries tab lists all the legacy JAR dependencies as well as JNI (Java native interface) libraries. For JNI libraries, it specifies platform (x86/x86_64/ARM/AArch64), architecture (32/64 bit), object type (shared object or executable), etc.

2.2.7 その他のタブ

その他のタブは、機能、設定、共有ライブラリ、署名などのAndroidマニフェストのコンポーネントを一覧表示します。 これらのタブに関する完全な説明は、近日中に公開される予定です。

2.3 ワンタップ一括処理

This page appears after clicking on the 1-Click Ops option in the main menu.

2.3.1 トラッカーのブロック/ブロック解除

This option can be used to block or unblock the ad/tracker components from the installed apps. After you click on this option, you will be asked to select if AM will list trackers from all apps or only from the user apps. Novice users should avoid blocking trackers from the system apps in order to avoid consequences. After that, a multi-choice dialog box will appear where you can deselect the apps you want to exclude from this operation. Clicking block or unblock applies the changes immediately.

Notice.

Certain apps may not function as expected after applying the blocking. If that is the case, remove blocking rules all at once or one by one in the component tabs of the corresponding App Details page.

2.3.2 コンポーネントのブロック…

This option can be used to block certain app components denoted by the signatures. App signature is the full name or partial name of the components. For safety, it is recommended that you should add a . (dot) at the end of each partial signature name as the algorithm used here chooses all matched components in a greedy manner. You can insert more than one signature in which case all signatures have to be separated by spaces. Similar to the option above, there is an option to apply blocking to system apps as well.

Caution.

If you are not aware of the consequences of blocking app components by signature(s), you should avoid using this setting as it may result in boot loop or soft brick, and you may have to apply factory reset in order to use your OS.

2.3.3 AppOpsモードの設定…

This option can be used to configure certain app operations of all or selected apps. You can insert more than one app op constants separated by spaces. It is not always possible to know in advance about all the app op constants as they vary from device to device and from OS to OS. To find the desired app op constant, browse the App Ops tab in the App Details page. The constants are integers closed inside brackets next to each app op name. You can also use the app op names. You also have to select one of the modes that will be applied against the app ops.

Caution.

Unless you are well-informed about app ops and the consequences of blocking them, you should avoid using this feature as it may result in boot loop or soft brick, and you may have to apply factory reset in order to use your OS.

2.3.4 バックアップ

1-Click options for back up. As a precaution, it lists the affected backups before performing any operation.

2.3.4.0.1 Back up all apps.

Back up all the installed apps.

2.3.4.0.2 Redo existing backups.

Back up all the installed apps that have a previous backup.

2.3.4.0.3 Back up apps without backups.

Back up all the installed apps without a previous backup.

2.3.4.0.4 Verify and redo backups.

Verify the recently made backups of the installed apps and redo backup if necessary.

2.3.4.0.5 Back up apps with changes.

If an app has changed since the last backup, redo backup for it. It checks a number of indices including app version, last update date, last launch date, integrity and file hashes. Directory hashes are taken during the back up and stored in a database. On running this operation, new hashes are taken and compared with the ones kept in the database.

2.3.5 復元

1-Click options for restore. As a precaution, it lists the affected backups before performing any operation.

2.3.5.0.1 Restore all apps.

Restore base backup of all the backed up apps.

2.3.5.0.2 Restore not installed apps.

Restore base backup of all the backed up apps that are not currently installed.

2.3.5.0.3 Restore latest backups.

Restore base backup of already installed apps whose version codes are higher than the installed version code.

2.4 Profiles Page

Profiles page can be accessed from the options-menu in the main page. It displays a list of configured profiles. Profiles can be added using the plus button at the bottom-right corner, imported from the import option, created from one of the presets or even duplicated from an already existing profile. Clicking on any profile opens the profile page.

2.4.1 Options Menu

There are two options menu in this page. The three dots menu at the top-right offers two options such as presets and import.

Another options menu appears when you long click on any profile. They have options such as–

  • Apply now…. This option can be used to apply the profile directly. When clicked, a dialog will be displayed where you can select a profile state. On selecting one of the options, the profile will be applied immediately.

  • Delete. Clicking on delete will remove the profile immediately without any warning.

  • Duplicate. This option can be used to duplicate the profile. When clicked, an input box will be displayed where you can set the profile name. If you click “OK”, a new profile will be created and the profile page will be loaded. The profile will not be saved until you save it manually.

  • Export. Export the profile to an external storage. Profile exported this way can be imported using the import option in the three dots menu.

  • Create shortcut. This option can be used to create a shortcut for the profile. When clicked, there will be two options: Simple and Advanced. The latter option allows you to set the profile state before applying it while the former option use the default state that was configured when the profile was last saved.

2.5 Profile Page

Profile page displays the configurations for a profile. It also offers editing them.

Notice.

When you apply a profile, if some packages do not match the criteria, they will simply be ignored.

2.5.1 Options Menu

The three dots menu on the top-right corner opens the options-menu. It contains several options such as–

  • Apply. This option can be used to apply the profile. When clicked, a dialog will be displayed where you can select a profile state. On selecting one of the options, the profile will be applied immediately.

  • Save. Allows you to save the profile.

    Notice.

    Changes are never saved automatically. You have to save them manually from here.

  • Discard. Discard any modifications made since the last save.

  • Delete. Clicking on delete will remove the profile immediately without any warning.

  • Duplicate. This option can be used to duplicate the profile. When clicked, an input box will be displayed where you can set the profile name. If you click “OK”, a new profile will be created, and the page will be reloaded. The profile will not be saved until you save it manually.

  • Create shortcut. This option can be used to create a shortcut for the profile. When clicked, there will be two options: Simple and Advanced. The latter option allows you to set the profile state before applying it while the former option uses the default state that was configured when the profile was last saved.

2.5.2 Apps Tab

Apps tab lists the packages configured under this profile. Packages can be added or removed using the plus button located near the bottom of the screen. Packages can also be removed by long clicking on them (in which case, a popup will be displayed with the only option delete).

2.5.3 Configurations Tab

Configurations tab can be used to configure the selected packages. Description of each item is given below:

2.5.3.1 Comment

This is the text that will be displayed in the profiles page. If not set, the current configurations will be displayed instead.

2.5.3.2 State

Denotes how certain configured options will behave. For instance, if disable option is turned on, the apps will be disabled if the state is on and will be enabled if the state is off. Currently state only support on and off values.

2.5.3.3 Users

Select users for which is the profile will be applied. All users are selected by default.

2.5.3.4 Components

This behaves the same way as the Block Components… option does in the 1-Click Ops page. However, this only applies for the selected packages. If the state is on, the components will be blocked, and if the state is off, the components will be unblocked. The option can be disabled (regardless of the inserted values) by clicking on the disabled button on the input dialog.

こちらもご覧ください: What are the app components?

2.5.3.5 App Ops

This behaves the same way as the Set Mode for App Ops… option does in the 1-Click Ops page. However, this only applies for the selected packages. If the state is on, the app ops will be denied (ie. ignored), and if the state is off, the app ops will be allowed. The option can be disabled (regardless of the inserted values) by clicking on the disabled button on the input dialog.

2.5.3.6 Permissions

This option can be used to grant or revoke certain permissions from the selected packages. Like others above, permissions must be separated by spaces. If the state is on, the permissions will be revoked, and if the state is off, the permissions will be allowed. The option can be disabled (regardless of the inserted values) by clicking on the disabled button on the input dialog.

2.5.3.7 Backup/Restore

This option can be used to take a backup of the selected apps and its data or restore them. There two options available there: Backup options and backup name.

  • Backup options. Same as the backup options of the backup/restore feature. If not set, the default options will be used.

  • Backup name. Set a custom name for the backup. If the backup name is set, each time a backup is made, it will be given a unique name with backup-name as the suffix. This behaviour will be fixed in a future release. Leave this field empty for regular or “base” backup (also, make sure not to enable backup multiple in the backup options).

If the state is on, the packages will be backed up, and if the state is off, the packages will be restored. The option can be disabled by clicking on the disabled button on the input dialog.

2.5.3.8 Export Blocking Rules

This option allows you to export blocking rules.

Danger.

This option is not yet implemented.

2.5.3.9 Disable

Enables/disables the selected packages depending on the state. If the state is on, the packages will be disabled, and if the state is off, the packages will be enabled.

2.5.3.10 Force-stop

Allows the selected packages to be force-stopped.

2.5.3.11 Clear Cache

Enables clearing cache for the selected packages.

2.5.3.12 Clear Data

Enables clearing data for the selected packages.

2.5.3.13 Block Trackers

Enables blocking/unblocking of the tracker components from the selected packages depending on the state. If the state is on, the trackers will be blocked, and if the state is off, the trackers will be unblocked.

2.5.3.14 Save APK

Enables saving APK files at AppManager/apks for the selected packages.

2.6 Settings Page

Settings can be used to customise the behaviour of the app.

2.6.1 Language

Configure in-app language. App Manager currently supports 19 (nineteen) languages.

2.6.2 App Theme

Configure in-app theme.

2.6.3 Screen Lock

Lock App Manager using Android screen lock provided a screen lock is configured.

2.6.4 Mode of Operation

You can select one of the four options:

  • Auto. Let AM decide the suitable option for you. Although this is the default option, it may cause problems in some devices.

  • Root. Select root mode. By default, AM requests root permission if root is detected but hasn’t been granted. If this option is selected, AM will run in root mode even if root is unavailable or denied. This may cause crashes or freezing issues, therefore, shouldn’t be enabled if root is unavailable.

  • ADB over TCP. Enable ADB over TCP mode. AM may hang indefinitely if ADB over TCP is not enabled.

  • No-root. AM runs in no-root mode. AM performs better if this is enabled but all the root/ADB features will be disabled.

2.6.5 Enable/Disable Features

Enable or disable certain features in App Manager, such as

  • Interceptor

  • Manifest viewer

  • Scanner

  • Package installer

  • Usage access: With this option turned off, App Manager will never ask for the Usage Access permission.

  • Log viewer

2.6.6 APK Signing

2.6.6.1 Signature Schemes

Select the signature schemes to use. It is recommended that you use at least v1 and v2 signature schemes. Use the Reset to Default button in case you’re confused.

2.6.6.2 Signing Key

Configure custom signing key for signing APK files. Keys from an existing KeyStore can be imported to App Manager, or a new key can be generated.

Notice.

App Manager maintains a KeyStore where the keys used within the app are stored. The password for the keystore will be asked when necessary. Be sure to store the password in a safe place, otherwise the KeyStore cannot be recovered when necessary.

2.6.7 Installer

2.6.7.1 Show users in installer

For root/ADB users, a list of users will be displayed before installing the app. The app will be installed only for the specified user (or all users if selected).

2.6.7.2 Sign APK

Whether to sign the APK files before installing the app. Visit APK signing section to configure signing.

2.6.7.3 Install location

Choose APK install location. This can be one of auto, internal only and prefer external. In newer Android versions, the last option may not always install the app in the external storage.

2.6.7.4 Installer App

Select the installer app, useful for some apps which explicitly checks for their installer. This only works for root/ADB users.

2.6.8 Back up/Restore

Settings related to back up/restore.

2.6.8.1 Compression method

Set which compression method to be used during backups. App Manager supports GZip and BZip2 compression methods, GZip being the default compression method. It doesn’t affect the restore of an existing backup.

2.6.8.2 Backup Options

Customise the back up/restore dialog.

2.6.8.3 Backup apps with Android KeyStore

Allow backup of apps that has entries in the Android KeyStore (disabled by default). Some apps (such as Signal) may crash if restored. KeyStore backup also doesn’t work from Android 9 but still kept as many apps having KeyStore can be restored without problem.

2.6.8.4 Encryption

Set an encryption method for the backups. App Manager currently supports OpenPGP (via OpenKeyChain), AES and RSA (hybrid encryption with AES). Like APK signing, The AES and RSA keys are stored in the KeyStore and can be imported from other KeyStores.

2.6.8.5 Backup Volume

Lets you select the storage where the backups will be stored.

Notice.

The backup volume only specifies the storage, not the path. Backups are stored in AppManager folder inside the storage path. This is also where logs and exported APK files are saved.

2.6.9 Rules

2.6.9.1 Instant Component Blocking

By default, blocking rules are not applied unless they are applied explicitly in the App Details page for any package. Upon enabling this option, all (old and new) rules are applied immediately for all apps without explicitly enabling blocking for an app.

Notice.

Enabling this setting may have some unintended consequences. For instance, the rules that are not completely removed will be applied again. So, proceed with caution. This option should be kept disabled if not required for some reasons.

こちらもご覧ください: FAQ: What is instant component blocking?

2.6.9.2 Import/Export Blocking Rules

It is possible to import or export blocking rules within App Manager for all apps. There is a choice to export or import only certain rules (components, app ops or permissions) instead of all of them. It is also possible to import blocking rules from Blocker and Watt. If it is necessary to export blocking rules for a single app, use the corresponding App Details page to export rules, or for multiple apps, use batch operations.

こちらもご覧ください: Rules Specification

2.6.9.2.1 Export

Export blocking rules for all apps configured within App Manager. This may include app components, app ops and permissions based on the options selected in the multi-choice options.

2.6.9.2.2 Import

Import previously exported blocking rules from App Manager. Similar to export, this may include app components, app ops and permissions based on the options selected in the multi-choice options.

2.6.9.2.3 Import Existing Rules

Add components disabled by other apps to App Manager. App Manager only keeps track of component disabled within App Manager. If you use other tools to block app components, you can use this tools to import these disabled components. Clicking on this option triggers a search for disabled components and will list apps with components disabled by user. For safety, all the apps are unselected by default. You can manually select the apps in the list and re-apply the blocking through App Manager.

Caution.

Be careful when using this tool as there can be many false positives. Choose only the apps that you are certain about.

2.6.9.2.4 Import from Watt

Import configuration files from Watt, each file containing rules for a single package and file name being the name of the package with .xml extension.

Tip.

Location of configuration files in Watt: /sdcard/Android/data/com.tuyafeng.watt/files/ifw

2.6.9.2.5 Import from Blocker

Import blocking rules from Blocker, each file containing rules for a single package. These files have a .json extension.

2.6.9.3 Remove all rules

One-click option to remove all rules configured within App Manager. This will enable all blocked components, app ops will be set to their default values and permissions will be granted.

2.6.10 Import/Export Keystore

Import or export the KeyStore used by App Manager. This is a Bouncy Castle KeyStore with bks extension. Therefore, other KeyStore such as Java KeyStore (JKS) or PKCS #12 are not supported. If you need to import a key from these KeyStores, use the relevant options outlined above.

2.6.11 About the device

Display Android version, security, CPU, GPU, battery, memory, screen, languages, user info, etc.

2.7 Scanner Page

Scanner page appears after clicking on the scanner button in the App Info tab. External APK files can also be opened for scanning from file managers, web browsers, etc.

It scans for trackers and libraries, and displays the number of trackers and libraries as a summary. It also displays checksums of the APK file as well as the signing certificate(s).

Disclaimer.

AM only scans an app statically without prejudice. The app may provide the options for opting out, or in some cases, certain features of the tracker may not be used at all by the app (e.g. F-Droid), or some apps may simply use them as placeholders to prevent the breaking of certain features (e.g. Fennec F-Droid). The intention of the scanner is to give you an idea about what the APK might contain. It should be taken as an initial step for further investigations.

Clicking on the first item (i.e. number of classes) opens a new page containing a list of tracker classes for the app. All classes can also be viewed by clicking on the Toggle Class Listing menu. A sneak-peek of each class can be viewed by simply clicking on any class item.

Notice.

Due to various limitations, it is not possible to scan all the components of an APK file. This is especially true if an APK is highly obfuscated. The scanner also does not check strings (or website signatures).

The second item lists the number of trackers along with their names. Clicking on the item displays a dialog containing the name of trackers, matched signatures, and the number of classes against each signature. Some tracker names may have 2 prefix which indicates that the trackers are in the ETIP stand-by list i.e. whether they are actual trackers is still being investigated.

The third item lists the number of libraries along with their names. The information are mostly taken from IzzyOnDroid repo.

こちらもご覧ください: FAQ: Tracker classes vs tracker components

2.7.1 Missing Signatures

At the bottom of the page, there is a special item denoting the number of missing signatures (i.e. missing classes). The missing signatures are the ones that AM has failed to match against any known libraries. The number itself has no particular meaning as many libraries contain hundreds of classes, but clicking on the item will bring up a dialog containing the signatures which is helpful in inspecting the missing signatures. This feature is only intended for people who know what a missing signature is and what to do with it, average users should just ignore it.

2.8 Interceptor Page

Interceptor can be used to intercept communication between apps using Intent. It works as a man-in-the-middle between the source and the destination apps. It offers a feature-complete user interface for editing Intents.

Info.

Development of interceptor is still in progress. It can only intercept activities for now.

Warning.

Interceptor only works for implicit intents where the app component isn’t specified.

こちらもご覧ください:

2.8.1 Intent Filters

Intent filters are used by the apps to specify which tasks they are able to perform or which tasks they are going to perform using other apps. For example, when you’re opening a PDF file using a file manager, the file manager will try to find which apps to open the PDF with. To find the right applications, the file manager will create an Intent with filters such as MIME type and ask the system to retrieve the matched applications that is able to open this filter. The system will search through the Manifest of the installed applications to match the filter and list the app components that are able to open this filter (in our case the PDF). At this, either the file manager will open the desired app component itself or use a system provided option to open it. If multiple app components are able to open it and no default is set, you may get a prompt where you have to choose the right app component.

2.8.1.1 Action

Action specifies the generic action to perform such as android.intent.action.VIEW. Applications often declare the relevant actions in the Manifest file to catch the desired Intents. The action is particularly useful for broadcast Intent where it plays a vital rule. In other cases, it works as an initial way to filter out relevant app components. Generic actions such as android.intent.action.VIEW and android.intent.action.SEND are widely used by apps. So, setting this alone may match many app components.

2.8.1.2 Data

Data is originally known as URI (Uniform Resource Identifier) defined in RFC 2396. It can be web links, file location, or a special feature called content. Contents are an Android feature managed by the content providers. Data are often associated with a MIME type.

Examples:

http://search.disroot.org/?q=URI%20in%20Android%20scheme&categories=general&language=en-US
https://developer.android.com/reference/android/net/Uri
file:///sdcard/AppManager.apk
mailto:email@example.com
content://io.github.muntashirakon.AppManager.provider/23485af89b08d87e898a90c7e/AppManager.apk

2.8.1.3 MIME Type

MIME type of the data. For example, if the data field is set to file:///sdcard/AppManager.apk, the associated MIME type can be application/vnd.android.package-archive.

2.8.1.4 Categories

This is similar to action in the sense that it is also used by the system to filter app components. This has no further benefits. Unlike action, there can be more than one category. Clicking on the plus button next to the title allows adding more categories.

2.8.1.5 Flags

Flags are useful in determining how system should behave during the launch or after the launch of an activity. An average user should avoid this as it requires some technical background. The plus button next to the title can be used to add one or more flags.

2.8.1.6 Extras

Extras are the key-value pairs used for supplying additional information to the destination component. You can add extras using the plus button next to the title.

2.8.1.7 URI

Represents the entire Intent as a URI (e.g. intent://…). Some data cannot be converted to string, and as a result, they might not appear here.

2.8.2 Matching Activities

List all the activity components that matches the Intent. This is internally determined by the system (rather than AM). The launch button next to each component can be used to launch them directly from AM.

2.8.3 Reset to Default

Reset the Intent to its initial state. This may not always work as expected.

2.8.4 Send Edited Intent

Resend the edited Intent to the destination app. This may open a list of apps where you have to select the desired app. The result received from the target app will be sent to the source app. As a result the source app will not know if there was a man-in-the-middle.

2.9 Shared Preferences Editor Page

Shared preferences can be edited in this page. Clicking any item on the list opens the edit dialog where the item can be edited. The floating action button on the bottom-right corner can be used to add a new item. To save or delete the file, or to discard current changes, the respective options in the menu can be used.

3 Guides

3.1 ADB over TCP

Many root-only features can still be used by enabling ADB over TCP. To do that, a PC or Mac is required with Android platform-tools installed, and an Android phone with developer options & USB debugging enabled.

Root users.

If superuser permission has been granted to App Manager, it can already execute privileged code without any problem. Therefore, root users don’t need to enable ADB over TCP. If you still want to use ADB over TCP, you must revoke superuser permission for App Manager and restart your device. You may see working on ADB mode message without restarting but this isn’t entirely true. The server (used as an interface between system and App Manager) is still running in root mode. This is a known issue and will be fixed in a future version of App Manager.

こちらもご覧ください: FAQ: ADB over TCP

3.1.1 Enable developer options

3.1.1.1 Location of developer options

Developer options is located in Android Settings, either directly near the bottom of the page (in most ROMs) or under some other settings such as System (Lineage OS, Asus Zenfone 8.0+), System > Advanced (Google Pixel), Additional Settings (Xiaomi MIUI, Oppo ColorOS), More Settings (Vivo FuntouchOS), More (ZTE Nubia). Unlike other options, it is not visible until explicitly enabled by the user. If developer options is enabled, you can use the search box in Android Settings to locate it as well.

3.1.1.2 How to enable developer options

This option is available within Android Settings as well but like the location of the developer options, it also differs from device to device. But in general, you have to find Build number (or MIUI version for MIUI ROMs and Software version for Vivo FuntouchOS, Version for Oppo ColorOS) and tap it at least 7 (seven) times until you finally get a message saying You are now a developer (you may be prompted to insert pin/password/pattern or solve captchas at this point). In most devices, it is located at the bottom of the settings page, inside About Phone. But the best way to find it is to use the search box.

3.1.2 Enable USB debugging

After locating the developer options, enable Developer option (if not already). After that, scroll down a bit until you will find the option USB debugging. Use the toggle button on the right hand side to enable it. At this point, you may get an alert prompt where you may have to click OK to actually enable it. You may also have to enable some other options depending on device vendor and ROM. Here are some examples:

3.1.2.1 Xiaomi (MIUI)

Enable USB debugging (security settings) as well.

3.1.2.2 Huawei (EMUI)

Enable Allow ADB debugging in charge only mode as well. When connecting to your PC or Mac, you may get a prompt saying Allow access to device data? in which case click YES, ALLOW ACCESS.

Notice.

Often the USB debugging mode could be disabled automatically by the system. If that’s the case, repeat the above procedure.

3.1.2.3 LG

Make sure you have USB tethering enabled.

3.1.2.4 Troubleshooting

In case USB Debugging is greyed out, you can do the following:

  1. Make sure you enabled USB debugging before connecting your phone to the PC or Mac via USB cable

  2. Enable USB tethering after connecting to PC or Mac via USB cable

  3. (For Samsung) If your device is running KNOX, you may have to follow some additional steps. See official documentations or consult support for further assistant

3.1.3 Setup ADB on PC or Mac

In order to enable ADB over TCP, you have to set up ADB in your PC or Mac. Lineage OS users can skip to §3.1.4.1.

3.1.3.1 Windows

  1. Download the latest version of Android SDK Platform-Tools for Windows

  2. Extract the contents of the zip file into any directory (such as C:\adb) and navigate to that directory using Explorer

  3. Open Command Prompt or PowerShell from this directory. You can do it manually from the start menu or by holding Shift and Right clicking within the directory in File Explorer and then clicking either on Open command window here or on Open PowerShell window here (depending on what you have installed). You can now access ADB by typing adb (Command Prompt) or ./adb (PowerShell). Do not close this window yet

3.1.3.2 macOS

  1. Download the latest version of Android SDK Platform-Tools for macOS

  2. Extract the contents of the zip file into a directory by clicking on it. After that, navigate to that directory using Finder and locate adb

  3. Open Terminal using Launchpad or Spotlight and drag-and-drop adb from the Finder window into the Terminal window. Do not close the Terminal window yet

Tip.

If you are not afraid to use command line, here’s a one liner:

cd ~/Downloads && curl -o platform-tools.zip -L \
https://dl.google.com/android/repository/platform-tools-latest-darwin.zip && \
unzip platform-tools.zip && rm platform-tools.zip && cd platform-tools

After that, you can simply type ./adb in the in same Terminal window to access ADB.

3.1.3.3 Linux

  1. Open your favourite terminal emulator. In most GUI-distros, you can open it by holding Control, Alter and T at the same time

  2. Run the following command:

    cd ~/Downloads && curl -o platform-tools.zip -L \
    https://dl.google.com/android/repository/platform-tools-latest-linux.zip && \
    unzip platform-tools.zip && rm platform-tools.zip && cd platform-tools
  3. If it is successful, you can simply type ./adb in the in same terminal emulator window or type ~/Downloads/platform-tools/adb in any terminal emulator to access ADB.

3.1.4 Configure ADB over TCP

3.1.4.1 Lineage OS

Lineage OS (or its derivatives) users can directly enable ADB over TCP using the developer options. To enable that, go to the Developer options, scroll down until you find ADB over Network. Now, use the toggle button on the right-hand side to enable it and skip to §3.1.4.3.

3.1.4.2 Enable ADB over TCP via PC or Mac

For other ROMs, you can do this using the command prompt/PowerShell/terminal emulator that you’ve opened in the step 3 of the previous section. In this section, I will use adb to denote ./adb, adb or any other command that you needed to use based on your platform and software in the previous section.

  1. Connect your device to your PC or Mac using a USB cable. For some devices, it is necessary to turn on File transfer mode (MTP) as well

  2. To confirm that everything is working as expected, type adb devices in your terminal. If your device is connected successfully, you will see something like this:

    List of devices attached
    xxxxxxxx  device

    Notice.

    In some Android phones, an alert prompt will be appeared with a message Allow USB Debugging in which case, check Always allow from this computer and click Allow.

  3. Finally, run the following command to enable ADB over TCP:

    adb tcpip 5555

Danger.

You cannot disable developer options or USB debugging after enabling ADB over TCP.

3.1.4.3 Enable ADB mode on App Manager

After enabling ADB over TCP (in the previous subsections), open App Manager (AM). You should see working on ADB mode toast message at the bottom. If not, remove AM from the recents and open AM again from the launcher.

Notice.

In some Android phones, the USB cable is needed to be disconnected from the PC in order for it to work.

Warning.

ADB over TCP will be disabled after a restart. In that case, you have to follow §3.1.4.2 again.

Lineage OS users.

You can turn off ADB over Network in developer options, but turning off this option will also stop App Manager’s remote server. So, turn it off only when you’re not going to use App Manager in ADB over TCP mode.

3.1.5 References

  1. How to Install ADB on Windows, macOS, and Linux

  2. Android Debug Bridge (adb)

  3. How to fix USB debugging greyed out?

3.2 Back up/Restore

App Manager has a modern, advanced and easy-to-use backup/restore system implemented from the scratch. This is probably the only app that has the ability to restore not only the app or its data but also permissions and rules that you’ve configured within App Manager. You can also choose to back up an app multiple times (with custom names) or for all users.

こちらもご覧ください:

3.2.1 Location

Back up/restore is a part of batch operations. It is also located inside the options menu in the App Info tab. Clicking on Backup/Restore opens the Backup Options. Backups are located at /storage/emulated/0/AppManager by default. You can configure custom backup location in the settings page in which case the backups will be located at the AppManager folder in the selected volume.

Note.

If one or more selected apps do not have any backup, the Restore and Delete Backup options will not be displayed.

3.2.2 Backup Options

Backup options (internally known as backup flags) let you customise the backups on the fly. However, the customisations will not be remembered for the future backups. If you want to customise this dialog, use Backup Options in the Settings page.

A complete description of the backup options is given below:

  • APK files. Whether to back up the APK files. This includes the base APK file along with the split APK files if they exist.

  • Internal data. Whether to back up the internal data directories. These directories are located at /data/user/<user_id> and (for Android N or later) /data/user_de/<user_id>.

  • External data. Whether to back up data directories located in the internal memory as well as SD Card (if exists). External data directories often contain non-essential app data or media files (instead of using the dedicated media folder) and may increase the backup size. However, it might be essential for some apps. Although it isn’t checked by default (as it might dramatically increase the size of the backups), you may have to check it in order to ensure a smooth restore of your backups.

    Caution.

    Internal data folders should always be backed up if you are going to back up the external data folders. However, it could be useful to back up only the external folders if the app in question downloads a lot of assets from the Internet.

  • OBB and media. Whether to back up or restore the OBB and the media directories located in the external storage or the SD Card. This is useful for games and the graphical software which actually use these folders.

  • Cache. Android apps have multiple cache directories located at every data directories (both internal and external). There are two types of cache: cache and code cache. Enabling this option excludes both cache directories from all the data directories. It is generally advised to exclude cache directories since most apps do not clear the cache regularly (for some reason, the only way an app can clear its cache is by deleting the entire cache directory) and usually handled by the OS itself. Apps such as Telegram may use a very large cache (depending on the storage space) which may dramatically increase the backup size. When it is disabled, AM also ignores the no_backup directories.

  • Extras. Backup/restore app permissions, net policy, battery optimization, SSAID, etc., enabled by default. Note that, blocking rules are applied after applying the extras. So, if an item is present in both places, it will be overwritten (i.e., the one from the blocking rules will be used).

  • Rules. This option lets you back up blocking rules configured within App Manager. This might come in handy if you have customised permissions or block some components using App Manager as they will also be backed up or restored when you enable this option.

  • Backup Multiple. Whether this is a multiple backup. By default, backups are saved using their user ID. Enabling this option allows you to create additional backups. These backups use the current date-time as the default backup name, but you can also specify custom backup name using the input field displayed when you click on the Backup button.

  • Custom users. Backup or restore for the selected users instead of only the current user. This option is only displayed if the system has more than one user.

  • Skip signature checks. When taking a backup, checksum of every file (as well as the signing certificate(s) of the base APK file) is generated and stored in the checksums.txt file. When you restore the backup, the checksums are generated again and are matched with the checksums stored in the said file. Enabling this option will disable the signature checks. This option is applied only when you restore a backup. During backup, the checksums are generated regardless of this option.

    Caution.

    You should always disable this option to ensure that your backups are not modified by any third-party applications. However, this would only work if you enabled encryption.

こちらもご覧ください: Settings: Encryption

3.2.3 Backup

Backup respects all the backup options except Skip signature checks. If base backups (i.e., backups that don’t have the Backup Multiple option) already exist, you will get a warning as the backups will be overwritten. If Backup Multiple is set, you have an option to input the backup name, or you can leave it blank to use the current date-time.

3.2.4 Restore

Restore respects all the backup options and will fail if APK files option is set, but the backup doesn’t contain such backups or in other cases, if the app isn’t installed. When restoring backups for multiple packages, you can only restore the base backups (see backup section for an explanation). However, when restoring backups for a single package, you have the option to select which backup to restore. If All users option is set, AM will restore the selected backup for all users in the latter case but in the former case, it will restore base backups for the respective users.

Notice.

Apps that use storage access framework (SAF), SSAID or Android KeyStore works properly only after an immediate restart.

3.2.5 Delete Backup

Delete backup only respects All users option and when it is selected, only the base backups for all users will be deleted with a prompt. When deleting backups for a single package, another dialog will be displayed where you can select the backups to delete.

3.3 Net Policy

Short for Network policy or network policies. It is usually located in the Android settings under Mobile data & Wifi section in the app info page of an app. Not all policies are guaranteed to be included in this page (e.g. Samsung), and not all settings are well-understood due to lack of documentation. App Manager can display all the net policies declared in the NetworkPolicyManager. Policies unknown to App Manager will have a Unknown prefix along with the policy constant name and number in the hexadecimal format. Unknown policies should be reported to App Manager for inclusion.

Net policy allows a user to configure certain networking behaviour of an app without modifying the ip tables directly and/or running a firewall app. However, the features it offers largely depend on Android version and ROM. A list of known net policies are listed below:

  1. None or POLICY_NONE: (AOSP) No specific network policy is set. System can still assign rules depending on the nature of the app.

  2. Reject background data or POLICY_REJECT_METERED_BACKGROUND: (AOSP) Reject network usage on metered networks when the application is in background.

  3. Allow background data when Data Saver is on or POLICY_ALLOW_METERED_BACKGROUND: (AOSP) Allow metered network use in the background even when data saving mode is enabled.

  4. Reject cellular data or POLICY_REJECT_CELLULAR (Android 11+) or POLICY_REJECT_ON_DATA (up to Android 10): (Lineage OS) Reject mobile/cellular data. Signals network unavailable to the configured app as if the mobile data is inactive.

  5. Reject VPN data or POLICY_REJECT_VPN (Android 11+) or POLICY_REJECT_ON_VPN (up to Android 10): (Lineage OS) Reject VPN data. Signals network unavailable to the configured app as if the VPN is inactive.

  6. Reject Wi-Fi data or POLICY_REJECT_WIFI (Android 11+) or POLICY_REJECT_ON_WLAN (up to Android 10): (Lineage OS) Reject Wi-Fi data. Signals network unavailable to the configured app as if the device is not connected to a Wi-Fi network.

  7. Disable network access or POLICY_REJECT_ALL (Android 11+) or POLICY_NETWORK_ISOLATED (up to Android 10): (Lineage OS) Reject network access in all circumstances. This is not the same as enforcing the other three policies above, and is the recommended policy for dodgy apps. If this policy is enforced, there is no need to enforce the other policies.

  8. POLICY_ALLOW_METERED_IN_ROAMING: (Samsung) Possibly allow metered network use during roaming. Exact meaning is currently unknown.

  9. POLICY_ALLOW_WHITELIST_IN_ROAMING: (Samsung) Possibly allow network use during roaming. Exact meaning is currently unknown.

4 Frequently Asked Questions

4.1 App Components

4.1.1 What are the app components?

Activities, services, broadcast receivers (also known as receivers) and content providers (also known as providers) are jointly called app components. More technically, they all inherit the ComponentInfo class.

4.1.2 How are the tracker or other components blocked in AM? What are its limitations?

AM blocks application components (or tracker components) using a method called Intent Firewall (IFW), it is very superior to other methods such as pm (PackageManager), Shizuku or any other method that uses the package manager to enable or disable the components. If a component is disabled by the latter methods, the app itself can detect that the component is being blocked and can re-enable it as it has full access to its own components. (Many deceptive apps actually exploit this in order to keep the tracker components unblocked.) On the other hand, IFW is a true firewall and the app cannot detect if the blocking is present. It also cannot re-enable it by any means. AM uses the term block rather than disable for this reason.

Even IFW has some limitations which are primarily applicable for the system apps:

  • The app in question is whitelisted by the system i.e. the system cannot function properly without these apps and may cause random crashes. These apps include but not limited to Android System, System UI, Phone Services. They will run even if you disable them or block their components via IFW.

  • Another system app or system process is calling a specific component of the app in question via interprocess communication (IPC). In this case, the component will be activated regardless of its presence in the IFW rules or even if the entire app is disabled. If you have such system apps, the only way to prevent them from running is to get rid of them.

4.1.4 Does app components blocked by other tools retained in AM?

No. But components blocked by the Android System or any other tools are displayed in the App Details page (within the component tabs). In v2.5.12 and onwards, you can import these rules in Settings. But since there is no way to distinguish between components blocked by third-party apps and components blocked by the System, you should be very careful when choosing app.

4.1.5 What happened to the components blocked by AM which are also blocked by other tools?

AM blocks the components again using Intent Firewall (IFW). They are not unblocked (if blocked using pm or Shizuku method) and blocked again. But if you unblock a component in the App Details page, it will be reverted back to default state —- blocked or unblocked as described in the corresponding app manifest —- using both IFW and pm method. However, components blocked by MyAndroidTools (MAT) with IFW method will not be unblocked by AM. To solve this issue, you can first import the corresponding configuration to AM in Settings in which case MAT’s configurations will be removed. But this option is only available from v2.5.12.

4.1.6 What is instant component blocking?

When you block a component in the App Details page, the blocking is not applied by default. It is only applied when you apply blocking using the Apply rules option in the top-right menu. If you enable instant component blocking, blocking will be applied as soon as you block a component. If you choose to block tracker components, however, blocking is applied automatically regardless of this setting. You can also remove blocking for an app by simply clicking on Remove rules in the same menu in the App Details page. Since the default behaviour gives you more control over apps, it is better to keep instant component blocking option disabled.

4.1.7 Tracker classes versus tracker components

All app components are classes but not all classes are components. In fact, only a few of the classes are components. That being said, scanner page displays a list of trackers along with the number of classes, not just the components. In all other pages, trackers and tracker components are used synonymously to denote tracker components, i.e. blocking tracker means blocking tracker components, not tracker classes.

Info.

Tracker classes cannot be blocked. They can only be removed by editing the app itself.

4.1.8 How to unblock the tracker components blocked using 1-Click Ops or Batch Ops?

Some apps may misbehave due to their dependency to tracker components blocked by AM. From v2.5.12, there is an option to unblock tracker components in the 1-Click Ops page. However, in previous versions, there is no such options. To unblock these tracker components, first go to the App Details page of the misbehaving app. Then, switching to the Activities tab, click on the Remove rules options in the top-right menu. All the blocking rules related to the components of the app will be removed immediately. Alternatively, if you have found the component that is causing the issue, you can unblock the component by clicking on the unblock button next to the component name. If you have enabled instant component blocking in Settings, disable it first as Remove rules option will not be visible when it is enabled.

If you have Google Play Services (com.google.android.gms) installed, unblocking the following services may fix certain crashes:

  1. Ad Request Broker Service .ads.AdRequestBrokerService

  2. Cache Broker Service .ads.cache.CacheBrokerService

  3. Gservices Value Broker Service .ads.GservicesValueBrokerService

  4. Advertising Id Notification Service .ads.identifier.service.AdvertisingIdNotificationService

  5. Advertising Id Service .ads.identifier.service.AdvertisingIdService

4.2 TCP経由のADB

4.2.1 再起動するたびにTCP経由のADBを再度有効にしなければなりませんか?

残念ながらそうです。しかしv2.5.13以降では、サーバー・クライアント方式によりシステムと対話的に動作するため、 TCP経由のADBを常に有効にしておく必要はありません。但し開発者向けオプションUSBデバッグを有効にしておく必要があります。そのためには、TCP経由のADBを有効にした状態でApp Manager を起動してください。そうすると、ADBモードで動作中とトースト通知が画面下部に表示されます。その後はTCPサーバーを停止させて構いません。 Lineageやその派生システムではTCP経由のADBをPCなしでも切り替えできます。 ネットワーク経由のADB オプションがUSBデバッグオプションの下部に存在します。但し後者の場合ではTCPサーバーを停止できません。

4.2.2 USBデバッグを有効にできません。どうすればよいですか?

チャプター 3の§3.1.2をご確認ください。

4.2.3 ADBモードでもトラッカーやその他のアプリコンポーネントをブロックすることができますか?

残念ながらできません。ADBでは限られた 権限 しか利用できず、アプリのコンポーネント制御はこの中に含まれません。

4.2.4 ADBモードではどのような機能が利用できますか?

ADBモードではAppManagerの殆どの機能が利用でき、ADBモードが検出された際、自動的に有効になります。 アプリを無効化、強制停止、データーを消去、AppOpsやアプリ権限を拒否/許可などの機能も含まれます。 またアプリを確認画面無しでインストールしたり、 実行中のアプリ/プロセスの確認も可能です。

4.3 Miscellanea

4.3.1 I don’t use root/ADB. Am I completely safe from any harms?

Yes. AM cannot modify any system settings without root or ADB over TCP.

4.3.2 Why does AM have the INTERNET permission when it doesn’t connect to the Internet?

AM uses the INTERNET permission for the following reasons:

  1. To provide ADB over TCP support for the non-root users. ADB over TCP is a custom network protocol that usually runs on port 5555. Therefore, to connect to this port via localhost, AM needs this permission.

  2. To execute privileged code both on root and ADB mode. AM, being a user app, cannot execute privileged code nor can it access any hidden APIs. Consequently, AM runs a server in the privileged environment using app_process at port 60001 and on the user side, AM connects to this server and execute privileged code remotely from the app. Now, there are alternative ways to communicate with a remote service. Currently, they are under consideration.

4.3.3 How are the trackers and libraries are updated?

Trackers and libraries are updated manually before making a new release.

4.3.4 Any plans for Shizuku?

App Manager’s use of hidden API and privileged code execution is now much more complex and cannot be integrated with other third party apps such as Shizuku. Here are some reasons for not considering Shizuku (which now has Apache 2.0 license) for App Manager:

  1. Shizuku was initially non-free which led me to use a similar approach for App Manager to support both root and ADB

  2. App Manager already supports both ADB and root which in some cases is more capable than Shizuku

  3. Relying on a third-party app for the major functionalities is not a good design choice

  4. Integration of Shizuku will increase the complexity of App Manager.

4.3.5 What are bloatware and how to remove them?

Bloatware are the unnecessary apps supplied by the vendor or OEM and are usually system apps. These apps are often used to track users and collect user data which they might sell for profits. System apps do not need to request any permission in order to access device info, contacts and messaging data, and other usage info such as your phone usage habits and everything you store on your shared storage(s).

The bloatware may also include Google apps (such as Google Play Services, Google Play Store, Gmail, Google, Messages, Dialer, Contacts), Facebook apps (the Facebook app consists of four or five apps), Facebook Messenger, Instagram, Twitter and many other apps which can also track users and/or collect user data without consent given that they all are system apps. You can disable a few permissions from the Android settings but be aware that Android settings hides almost every permission any security specialist would call potentially dangerous.

If the bloatware were user apps, you could easily uninstall them either from Android settings or AM. Uninstalling system apps is not possible without root permission. You can also uninstall system apps using ADB, but it may not work for all apps. AM can uninstall system apps with root or ADB (the latter with certain limitations, of course), but these methods cannot remove the system apps completely as they are located in the system partition which is a read-only partition. If you have root, you can remount this partition to manually purge these apps but this will break Over the Air (OTA) updates since data in the system partition has been modified. There are two kind of updates, delta (small-size, consisting of only the changes between two versions) and full updates. You can still apply full updates, but the bloatware will be installed again, and consequently, you have to delete them all over again. Besides, not all vendors provide full updates.

Another solution is to disable these apps either from Android settings (no-root) or AM, but certain services can still run in the background as they can be started by other system apps using Inter-process Communication (IPC). One possible solution is to disable all bloatware until the service has finally stopped (after a restart). However, due to heavy modifications of the Android frameworks by the vendors, removing or disabling certain bloatware may cause the System UI to crash or even cause bootloop, thus, (soft) bricking your device. You may search the web or consult the fellow users to find out more about how to debloat your device.

From v2.5.19, AM has a new feature called profiles. The profiles page has an option to create new profiles from one of the presets. The presets consist of debloating profiles which can be used as a starting point to monitor, disable, and remove the bloatware from a proprietary Android operating system.

Note.

In most cases, you cannot completely debloat your device. Therefore, it is recommended that you use a custom ROM free from bloatware such as Graphene OS, Lineage OS or their derivatives.

5 Specifications

5.1 Rules Specification

5.1.1 Background

AM currently supports blocking activities, broadcast receivers, content providers, services, app ops and permissions, and in future I may add more blocking options. In order to add more portability, it is necessary to import/export all these data.

Maintaining a database should be the best choice when it comes to storing data. For now, several tsv files with each file having the name of the package and a .tsv extension. The file/database will be queried/processed by the RulesStorageManager class. Due to this abstraction, it should be easier to switch to database or encrypted database systems in future without changing the design of the entire project. Currently, All configuration files are stored at /data/data/io.github.muntashirakon.AppManager/Files/conf.

5.1.2 Rules File Format

5.1.2.1 Internal

The format below is used internally within App Manager and is not compatible with the external format.

    <name> <type> <mode>|<component_status>|<is_granted>

Here:

  • <name> – Component/permission/app op name (in case of app op, it could be string or integer)

  • <type> – One of the ACTIVITY, RECEIVER, PROVIDER, SERVICE, APP_OP, PERMISSION

  • <mode> – (For app ops) The associated mode constant

  • <component_status> – (For components) Component status

    • true – Component has been applied (true value is kept for compatibility)

    • false – Component hasn’t been applied yet, but will be applied in future (false value is kept for compatibility)

    • unblocked – Component is scheduled to be unblocked

  • <is_granted> – (For permissions) Whether the permission is granted or revoked

5.1.2.2 External

External format is used for importing or exporting rules in App Manager.

    <package_name> <component_name> <type> <mode>|<component_status>|<is_granted>

This the format is essentially the same as above except for the first item which is the name of the package.

Caution.

The exported rules have a different format than the internal one and should not be copied directly to the conf folder.

6 Changelogs

6.1 v2.6.0 (385)

6.1.1 Introducing Backups

Back up/restore feature is now finally out of beta! Read the corresponding guide to understand how it works.

6.1.2 Introducing Log Viewer

Log viewer is essentially a front-end for logcat. It can be used to filter logs by tag or pid (process ID), or even by custom filters. Log levels AKA verbosity can also be configured. You can also save, share and manage logs.

6.1.3 Lock App Manager

Lock App Manager with the screen lock configured for your device.

6.1.4 Extended Modes for App Ops

You can set any mode for any app ops that your device supports, either from the 1-click ops page or from the app ops tab.

6.1.5 New Batch Ops: Add to Profile

You can now easily add selected apps to an existing profile using the batch operations.

6.1.6 App Info: Improved

App info tab now has many options, including the ability to change SSAID, network policy (i.e. background network usage), battery optimization, etc. Most of the tags used in this tab are also clickable, and if you click on them, you will be able to look at the current state or configure them right away.

6.1.7 Advanced Sort and Filtering Options in the Main Page

Sort and filter options are now replaced by List Options which is highly configurable, including the ability to filter using profiles.

6.1.8 About This Device

Interested in knowing about your device in just one page? Go to the bottom of the settings page.

6.1.9 Enable/disable Features

Not interested in all the features that AM offers? You can disable some features in settings.

6.1.10 New Languages

AM now has more than 19 languages! New languages include Farsi, Japanese and Traditional Chinese.

6.1.11 Signing the APK Files

You can now import external signing keys in AM! For security, App Manager has its own encrypted KeyStore which can also be imported or exported.

6.1.12 New Extension: UnAPKM

Since APKMirror has removed encryption from their APKM files, it’s no longer necessary to decrypt them. As a result, the option to decrypt APKM files has been removed. Instead, this option is now provided by the UnAPKM extension which you can grab from F-Droid. So, if you have an encrypted APKM file and have this extension installed, you can open the file directly in AM.

6.2 v2.5.20 (375)

6.2.1 Introducing Profiles

Profiles finally closes the related issue. Profiles can be used to execute certain tasks repeatedly without doing everything manually. A profile can be applied (or invoked) either from the Profiles page or from the home screen by creating shortcuts. There are also some presets which consist of debloating profiles taken from Universal Android Debloater.

6.2.1.0.1 Known limitations
  • Exporting rules and applying permissions are not currently working.

  • Profiles are applied for all users.

6.2.2 The Interceptor

Intent Intercept works as a man-in-the-middle between source and destination, that is, when you open a file or URL with another app, you can see what is being shared by opening it with Interceptor first. You can also add or modify the intents before sending them to the destination. Additionally, you can double-click on any exportable activities in the Activities tab in the App Details page to open them in the Interceptor to add more configurations.

6.2.2.0.1 Known limitation

Editing extras is not currently possible.

6.2.3 UnAPKM: DeDRM the APKM files

When I released a small tool called UnAPKM, I promised that similar feature will be available in App Manager. I am proud to announce that you can open APKM files directly in the App Info page or convert them to APKS or install them directly.

6.2.4 Multiple user

App manager now supports multiple users! For now, this requires root or ADB. But no-root support is also being considered. If you have multiple users enabled and click on an app installed in multiple profiles, an alert prompt will be displayed where you can select the user.

6.2.5 Vive la France!

Thanks to the contributors, we have one more addition to the language club: French. You can add more languages or improve existing translations at Weblate.

6.2.6 Report crashes

If App Manager crashes, you can now easily report the crash from the notifications which opens the share options. Crashes are not reported by App Manager, it only redirects you to your favourite Email client.

6.2.7 Android 11

Added support for Android 11. Not everything may work as expected though.

6.2.8 App Installer Improvements

6.2.8.1 Set installation locations

In settings page, you can set install locations such as auto (default), internal only and prefer external.

6.2.8.2 Set APK installer

In settings page, you can also set default APK installer (root/ADB only) instead of App Manager.

6.2.8.3 Multiple users

In settings page, you can allow App Manager to display multiple users during APK installation.

6.2.8.4 Signing APK files

In settings page, you can choose to sign APK files before installing them. You can also select which signature scheme to use in the APK signing option in settings.

6.2.8.4.1 Known limitation

Currently, only a generic key is used to sign APK files

6.3 v2.5.17 (368)

6.3.1 App Installer

As promised, it is now possible to select splits. AM also provides recommendations based on device configurations. If the app is already installed, recommendations are provided based on the installed app. It is also possible to downgrade to a lower version without data loss if the device has root or ADB. But it should be noted that not all app can be downgraded. Installer is also improved to speed up the installation process, especially, for root users. If the app has already been installed and the new (x)apk(s) is newer or older or the same version with a different signature, AM will display a list of changes similar to What’s New before prompting the user to install the app. This is useful if the app has introduced tracker components, new permissions, etc.

6.3.1.0.1 Known Limitations
  • Large app can take a long time to fetch app info and therefore it may take a long time display the installation prompt.

  • If the apk is not located in the internal storage, the app has to be cached first which might also take a long time depending on the size of the apk.

6.3.2 Scanner: Replacement for Exodus Page

Exodus page is now replaced with scanner page. Scanner page contains not only a list of trackers but also a list of used libraries. This is just a start. In the future, this page will contain more in depth analysis of the app.

6.3.3 Introducing System Config

System Config lists various system configurations and whitelists/blacklists included in Android by either OEM/vendor, AOSP or even some Magisk modules. Root users can access this option from the overflow menu in the main page. There isn’t any official documentation for these options therefore it’s difficult to write a complete documentation for this page. I will gradually add documentations using my own knowledge. However, some functions should be understandable by their name.

6.3.4 More Languages

Thanks to the contributors, AM now has more than 12 languages. New languages include Bengali, Hindi, Norwegian, Polish, Russian, Simplified Chinese, Turkish and Ukrainian.

6.3.5 App Info Tab

More tags are added in the app info tab such as KeyStore (apps with KeyStore items), Systemless app (apps installed via Magisk), Running (apps that are running). For external apk, two more options are added namely Reinstall and Downgrade. Now it is possible to share an apk via Bluetooth. For system apps, it is possible to uninstall updates for root/ADB users. But like the similar option in the system settings, this operation will clear all app data. As stated above, exodus has been replaced with scanner.

6.3.7 Running Apps Page

It is now possible to sort and filter processes in this tab. Also, the three big buttons are replaced with an easy-to-use three dot menu. Previously the memory usage was wrong which is fixed in this version.

6.3.8 Built-in Toybox

Toybox (an alternative to busybox) is bundled with AM. Although Android has this utility built-in from API 23, toybox is bundled in order to prevent buggy implementations and to support API < 23.

6.3.9 Component Blocker Improvements

Component blocker seemed to be problematic in the previous version, especially when global component blocking is enabled. The issues are mostly fixed now.

Caution.

The component blocking mechanism is no longer compatible with v2.5.6 due to various security issues. If you have this version, upgrade to v2.5.13 or earlier versions first. After that, enable global component blocking and disable it again.

6.3.10 Improvements in the App Details Page

Value of various app ops depend on their parent app ops. Therefore, when you allow/deny an app op, the parent of the app op gets modified. This fixes the issues some users have been complaining regarding some app ops that couldn’t be changed.

If an app has the target API 23 or less, its permissions cannot be modified using the pm grant … command. Therefore, for such apps, option to toggle permission has been disabled.

The signature tab is improved to support localization. It also displays multiple checksums for a signature.

6.3.11 App Manifest

Manifest no longer crashes if the size of the manifest is too long. Generated manifest are now more accurate than before.

6.4 v2.5.13 (348)

6.4.1 Bundled App (Split APK)

Bundled app formats such as apks and xapk are now supported. You can install these apps using the regular installation buttons. For root and adb users, apps are installed using shell, and for non-root users, the platform default method is used.

6.4.1.0.1 Known Limitations
  • Currently all splits apks are installed. But this behaviour is going to change in the next release. If you only need a few splits instead of all, extract the APKS or XAPK file, and then, create a new zip file with your desired split apks and replace the ZIP extension with APKS. Now, open it with AM.

  • There is no progress dialog to display the installation progress.

6.4.2 Direct Install Support

You can now install APK, APKS or XAPK directly from your favourite browser or file manager. For apps that need updates, a What’s New dialog is displayed showing the changes in the new version.

6.4.2.0.1 Known Limitations
  • Downgrade is not yet possible.

  • There is no progress dialog to display the installation progress. If you cannot interact with the current page, wait until the installation is finished.

6.4.3 Remove All Blocking Rules

In the Settings page, a new option is added which can be used to remove all blocking rules configured within App Manager.

6.4.4 App Ops

  • App Ops are now generated using a technique similar to AppOpsX. This should decrease the loading time significantly in the App Ops tab.

  • In the App Ops tab, a menu item is added which can be used to list only active app ops without including the default app ops. The preference is saved in the shared preferences.

6.4.4.0.1 Known Limitation

Often the App Ops tab may not be responsive. If that’s the case, restart App Manager.

6.4.5 Enhanced ADB Support

ADB shell commands are now executed using a technique similar to AppOpsX (This is the free alternative of AppOps by Rikka.). This should dramatically increase the execution time.

6.4.5.0.1 Known Limitation

AM can often crash or become not responsive. If that’s the case, restart App Manager.

6.4.6 Filtering in Main Page

Add an option to filter apps that has at least one activity.

6.4.7 Apk Backup/Sharing

Apk files are now saved as app name_version.extension instead of package.name.extension.

6.4.8 Batch Ops

  • Added a foreground service to run batch operations. The result of the operation is displayed in a notification. If an operation has failed for some packages, clicking on the notification will open a dialog box listing the failed packages. There is also a Try Again button on the bottom which can be used to perform the operation again for the failed packages.

  • Replaced Linux kill with force-stop.

6.4.9 Translations

Added German and Portuguese (Brazilian) translations.

6.4.9.0.1 Known Limitation

Not all translations are verified yet.

6.4.10 App Data Backup

Install app only for the current user at the time of restoring backups. Support for split apks is also added.

Data backup feature is now considered unstable. If you encounter any problem, please report to me without hesitation.

7 App Ops

7.1 Background

App Ops (short hand for Application Operations) are used by Android system (since Android 4.3) to control application permissions. The user can control some permissions, but only the permissions that are considered dangerous (and Google thinks knowing your phone number isn’t a dangerous thing). So, app ops seems to be the one we need if we want to install apps like Facebook and it’s Messenger (the latter literary records everything if you live outside the EU) and still want some privacy and/or security. Although certain features of app ops were available in Settings and later in hidden settings in older version of Android, it’s completely hidden in newer versions of Android and is continued to be kept hidden. Now, any app with android.Manifest.permission.GET_APP_OPS_STATS permission can get the app ops information for other applications but this permission is hidden from users and can only be enabled using ADB or root. Still, the app with this permission cannot grant or revoke permissions (actually mode of operation) for apps other than itself (with limited capacity, of course). To modify the ops of other app, the app needs android.Manifest.permission.UPDATE_APP_OPS_STATS permissions which isn’t accessible via pm command. So, you cannot grant it via root or ADB, the permission is only granted to the system apps. There are very few apps who support disabling permissions via app ops. The best one to my knowledge is AppOpsX. The main (visible) difference between my app (AppManager) and this app is that the latter also provides you the ability to revoke internet permissions (by writing ip tables). One crucial problem that I faced during the development of the app ops API is the lack of documentation in English language.

7.2 Introduction to App Ops

Figure 1 describes the process of changing and processing permission. AppOpsManager can be used to manage permissions in Settings app. AppOpsManager is also useful in determining if a certain permission (or operation) is granted to the application. Most of the methods of AppOpsManager are accessible to the user app but unlike a system app, it can only be used to check permissions for any app or for the app itself and start or terminating certain operations. Moreover, not all operations are actually accessible from this Java class. AppOpsManager holds all the necessary constants such as OP_*, OPSTR_*, MODE_* which describes operation code, operation string and mode of operations respectively. It also holds necessary data structures such as PackageOps and OpEntry. PackageOps holds OpEntry for a package, and OpEntry, as the name suggests, describes each operation.

AppOpService is completely hidden from a user application but accessible to the system applications. As it can be seen in Figure 1, this is the class that does the actual management stuff. It contains data structures such as Ops to store basic package info and Op which is similar to OpEntry of AppOpsManager. It also has Shell which is actually the source code of the appops command line tool. It writes configurations to or read configurations from /data/system/appops.xml. System services calls AppOpsService to find out what an application is allowed and what is not allowed to perform, and AppOpsService determines these permissions by parsing /data/system/appops.xml. If no custom values are present in appops.xml, it returns the default mode available in AppOpsManager.

7.3 AppOpsManager

AppOpsManager stands for application operations manager. It consists of various constants and classes to modify app operations.

こちらもご覧ください: AppOpsManager documentation

7.3.1 OP_* Constants

OP_* are the integer constants starting from 0. OP_NONE implies that no operations are specified whereas _NUM_OP denotes the number of operations defined in OP_* prefix. While they denote each operation, the operations are not necessarily unique. In fact, there are many operations that are actually a single operation denoted by multiple OP_* constant (possibly for future use). Vendors may define their own op based on their requirements. MIUI is one of the vendors who are known to do that.

public static final int OP_NONE = -1;
public static final int OP_COARSE_LOCATION = 0;
public static final int OP_FINE_LOCATION = 1;
public static final int OP_GPS = 2;
public static final int OP_VIBRATE = 3;
...
public static final int OP_READ_DEVICE_IDENTIFIERS = 89;
public static final int OP_ACCESS_MEDIA_LOCATION = 90;
public static final int OP_ACTIVATE_PLATFORM_VPN = 91;
public static final int _NUM_OP = 92;

Whether an operation is unique is defined by sOpToSwitch. It maps each operation to another operation or to itself (if it’s a unique operation). For instance, OP_FINE_LOCATION and OP_GPS are mapped to OP_COARSE_LOCATION.

Each operation has a private name which are described by sOpNames. These names are usually the same names as the constants without the OP_ prefix. Some operations have public names as well which are described by sOpToString. For instance, OP_COARSE_LOCATION has the public name android:coarse_location.

As a gradual process of moving permissions to app ops, there are already many permissions that are defined under some operations. These permissions are mapped in sOpPerms. For example, the permission android.Manifest.permission.ACCESS_COARSE_LOCATION is mapped to OP_COARSE_LOCATION. Some operations may not have any associated permissions which have null values.

As described in the previous section, operations that are configured for an app are stored at /data/system/appops.xml. If an operation is not configured, then whether system will allow that operation is determined from sOpDefaultMode. It lists the default mode for each operation.

7.3.2 MODE_* Constants

MODE_* constants also integer constants starting from 0. These constants are assigned to each operation describing whether an app is authorised to perform that operation. These modes usually have associated names such as allow for MODE_ALLOWED, ignore for MODE_IGNORED, deny for MODE_ERRORED (a rather misnomer), default for MODE_DEFAULT and foreground for MODE_FOREGROUND.

  1. MODE_ALLOWED. The app is allowed to perform the given operation

  2. MODE_IGNORED. The app is not allowed to perform the given operation, and any attempt to perform the operation should silently fail, i.e. it should not cause the app to crash

  3. MODE_ERRORED. The app is not allowed to perform the given operation, and this attempt should cause it to have a fatal error, typically a SecurityException

  4. MODE_DEFAULT. The app should use its default security check, specified in AppOpsManager

  5. MODE_FOREGROUND. Special mode that means “allow only when app is in foreground.” This mode was added in Android 10

  6. MODE_ASK. This is a custom mode used by MIUI whose uses are unknown.

7.3.3 PackageOps

AppOpsManager.PackageOps is a data structure to store all the OpEntry for a package. In simple terms, it stores all the customised operations for a package.

public static class PackageOps implements Parcelable {
    private final String mPackageName;
    private final int mUid;
    private final List<OpEntry> mEntries;
    ...
}

As can be seen in Listing 2, it stores all OpEntry for a package as well as the corresponding package name and its kernel user ID.

7.3.4 OpEntry

AppOpsManager.OpEntry is a data structure that stores a single operation for any package.

public static final class OpEntry implements Parcelable {
    private final int mOp;
    private final boolean mRunning;
    private final @Mode int mMode;
    private final @Nullable LongSparseLongArray mAccessTimes;
    private final @Nullable LongSparseLongArray mRejectTimes;
    private final @Nullable LongSparseLongArray mDurations;
    private final @Nullable LongSparseLongArray mProxyUids;
    private final @Nullable LongSparseArray<String> mProxyPackageNames;
    ...
}

Here:

  • mOp: Denotes one of the OP_* constants

  • mRunning: Whether the operation is in progress (i.e. the operation has started but not finished yet). Not all operations can be started or finished this way

  • mMOde: One of the MODE_* constants

  • mAccessTimes: Stores all the available access times

  • mRejectTimes: Stores all the available reject times

  • mDurations: All available access durations, checking this with mRunning will tell you for how long the app is performing a certain app operation

  • mProxyUids: No documentation found

  • mProxyPackageNames: No documentation found

7.3.5 Usage

TODO

7.4 AppOpsService

TODO

7.5 appops.xml

Latest appops.xml has the following format: (This DTD is made by me and by no means perfect, has compatibility issues.)

<!DOCTYPE app-ops [

<!ELEMENT app-ops (uid|pkg)*>
<!ATTLIST app-ops v CDATA #IMPLIED>

<!ELEMENT uid (op)*>
<!ATTLIST uid n CDATA #REQUIRED>

<!ELEMENT pkg (uid)*>
<!ATTLIST pkg n CDATA #REQUIRED>

<!ELEMENT uid (op)*>
<!ATTLIST uid
n CDATA #REQUIRED
p CDATA #IMPLIED>

<!ELEMENT op (st)*>
<!ATTLIST op
n CDATA #REQUIRED
m CDATA #REQUIRED>

<!ELEMENT st EMPTY>
<!ATTLIST st
n CDATA #REQUIRED
t CDATA #IMPLIED
r CDATA #IMPLIED
d CDATA #IMPLIED
pp CDATA #IMPLIED
pu CDATA #IMPLIED>

]>

The instruction below follows the exact order given above:

This definition can be found at AppOpsService.

7.6 Command Line Interface

appops or cmd appops (on latest versions) can be accessible via ADB or root. This is an easier method to get or update any operation for a package (provided the package name is known). The help page of this command is self-explanatory:

AppOps service (appops) commands:
help
Print this help text.
start [--user <USER_ID>] <PACKAGE | UID> <OP>
Starts a given operation for a particular application.
stop [--user <USER_ID>] <PACKAGE | UID> <OP>
Stops a given operation for a particular application.
set [--user <USER_ID>] <[--uid] PACKAGE | UID> <OP> <MODE>
Set the mode for a particular application and operation.
get [--user <USER_ID>] <PACKAGE | UID> [<OP>]
Return the mode for a particular application and optional operation.
query-op [--user <USER_ID>] <OP> [<MODE>]
Print all packages that currently have the given op in the given mode.
reset [--user <USER_ID>] [<PACKAGE>]
Reset the given application or all applications to default modes.
write-settings
Immediately write pending changes to storage.
read-settings
Read the last written settings, replacing current state in RAM.
options:
<PACKAGE> an Android package name or its UID if prefixed by --uid
<OP>      an AppOps operation.
<MODE>    one of allow, ignore, deny, or default
<USER_ID> the user id under which the package is installed. If --user is not
specified, the current user is assumed.

  1. 安定版リリースのみ↩︎

  2. GitHubのプルリクエストは、対応するパッチを使用して手動でマージされます。そのため、GitHub は誤ってそれらをマージせずにクローズしたとして認識してしまいます。↩︎

  3. “Muntashir Akon”と呼ぶこともできます。↩︎