タイトルは本文をあまり捉えません。修正リクエスト。
android.permission.CAMERA
の出力で一致させたい文字列がありますadb shell dumpsys package
。私の目標は、その権限を使用するアプリケーションのパッケージ名を一覧表示することですandroid.permission.CAMERA
。
次の例を考えてみましょう。これにより、次のような結果がadb shell dumpsys com.google.android.GoogleCamera
得られます。
パッケージ [com.google.android.GoogleCamera](cbd5725): ... applicationInfo=ApplicationInfo{235b16ab com.google.android.GoogleCamera} ... dataDir=/data/data/com.google.android.GoogleCamera ... 付与された権限: ... ... Android、許可、カメラ ...
パッケージ名を知っているので具体的な例です。元のコマンドにはadb shell dumpsys package
権限が表示されます。他。、インストールされているすべてのアプリケーションの中から。
私がやりたいことは、どのアプリケーションが権限を要求したかを調べることですandroid.permission.CAMERA
。
システムにインストールされているさまざまなアプリケーションをすべて考慮すると、次の間に一定の距離はありません。
Package [PKG_NAME] (ID):
そしてandroid.permission.CAMERA
applicationInfo=ApplicationInfo{235b16ab PKG_NAME}
そしてandroid.permission.CAMERA
dataDir=/data/data/PKG_NAME
そしてandroid.permission.CAMERA
grep -Bn
これは、少なくとも出力に使用できないことを意味します。
これは確かに可能ですが、どこから始めるべきかわかりません。
完全ダンプadb shell dumpsys package
:http://pasted.co/e0cd2d4dまたはhttps://paste.ee/p/ylpax
重要なのは、ラップトップではSlackware 14.1を使用し、ルート化されたAndroidデバイスではCOS12を使用していることです。
答え1
awk
うまくいくかもしれません。それは次のとおりです。
awk -v RS='^Package ' '/android\.permission\.CAMERA/ {print $1}'
これは、先頭の行がPackage
新しいアプリケーション記述の開始を示すと仮定します。
実際の内容を見るとPackage
- で始まらず、2つのスペースにインデントさPackage
れています。したがって、以下が機能します。
awk -v RS='\n +Package' '/android\.permission\.CAMERA/{print $1}'
これは、レコード区切り文字でスペースが続く改行文字を表示し、を含むPackage
項目をフィルタリングしますandroid.permission.CAMERA
。最初のフィールドはパッケージ名です。Verifiers:
パッケージの説明が始まる前に権限が一覧表示され、印刷されます。
答え2
perl -nE '/Package \[([^\]]+)/ and $p=$1; /android.permission.CAMERA/ and say $p' datfile
したがって、これが行を一致させることですPackage [...]
(パッケージ名を$p
逆参照変数として保存すると$1
問題が発生します)。CAMERA
行が表示されたら内容をエクスポートします$p
。 (CAMERA
最初のパッケージ行の前に行が表示されると、初期化されていない警告メッセージで失敗し、先行サブ定義はその行をBEGIN { $p = "dunno" }
修正します。)これは簡単に実行できますが、そうawk
ではありませんawk
。
(入力データが空白行で区切られている場合、私の答えに()呼び出しが含まれる可能性がありますperl -00
。)perldoc perlrun