제목이 본문을 많이 포착하지 못합니다. 수정 요청.
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 ... 부여된 권한: ... ... 안드로이드.허가.카메라 ...
패키지 이름을 알고 있기 때문에 구체적인 예입니다. 원래 명령에는 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
- 로 시작하지 않고 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