ADB를 통해 패키지 이름과 앱의 공통 이름을 얻습니다.


15

ADB를 통해 Android 기기에 설치된 패키지 이름 앱의 공통 이름을 모두 검색 하거나 최소한 패키지 이름을 알고있는 경우 공통 이름 을 검색 할 가능성을 찾고 있습니다. Google 사이트에서 빠른 검색을 수행하면 두 가지 관련 질문이 있었지만 내 문제를 해결하지 못했습니다.

가능한 경우 장치에서 직접 정보를 검색 할 수있는 방법을 찾고 있습니다. 가능하면 "웹 검색"또는 "앱을 통한"등의 "모든"방법이 아니라 두 가지 질문이 있습니다.

패키지 세부 정보를 얻을 수있는 여러 도구가 있다는 것을 알고 있습니다.

  • adb dumpsys package: 여기에는 모든 세부 사항이 포함 된 모든 패키지가 나열되지만 "공통 이름"은 표시되지 않습니다
  • adb shell pm list: 패키지 이름 만 제공
  • aapt일반적인 이름을 얻을 수는 있지만 먼저 .apk장치 에서 파일을 가져와야합니다 . 이는 실제로 편리하지 않습니다 (많은 큰 응용 프로그램이 설치되어 있으면 분명히 느려질 것입니다)

내가 뭐 놓친 거 없니? 정보가 장치에 있어야한다는 것을 알고 있습니다 (GUI에 앱 이름을 표시하는 방법은 무엇입니까? .apkGUI에 "공통 이름"이 필요할 때마다 Android가 파일을 구문 분석하는 것을 의심 합니다). ADB를 직접 사용하여 그것을 잡을 수있는 방법이 있습니까?


TL; DR

배경 (누군가 궁금한 경우) : 곡예로 되돌릴 필요없이 내 장치에서 사용자 응용 프로그램 목록을 빠르게 얻을 수 있기를 원합니다. 를 사용하여 검색 할 수있는 패키지 이름 목록 adb shell pm list -3이지만 패키지 이름 일뿐이므로 앱을 인식하는 것이 추측입니다. 따라서 주어진 패키지 이름에 대한 공통 이름을 검색하는 ADB 명령이있는 경우 간단히 루프를 사용 for pkg in $(adb shell pm list -3); do echo "- $(adb <whatever_the_command_is> $pkg) ($pkg)"; done하여 설치된 모든 사용자 앱 목록을 패키지 이름과 함께 "사람이 읽을 수있는 형식"으로 가져올 수 있습니다.

사용 사례:

  • 어떤 "superflous"앱이 설치되어 있는지 확인하십시오 (제거 가능).
  • 여러 장치의 교차 점검 목록
  • 문서;)
  • 그리고 아마도 더 많을 것입니다 (그러나 위의 3은 내가 필요로하는 것입니다)

그냥 아이디어 (나는 당신이 이미 시도한 것 같아요?). 왜 안드로이드를 위해 aapt를 컴파일하지 않고 쉘에서 대신 실행합니까? : D
user3344236 2016 년

1
@ user3344236 그 가능성을 알고 있습니다. 그러나 항상 자체 컴파일 된 바이너리가 아닌 문제의 장치에 무언가를 설치하는 것이 항상 옵션은 아닙니다 (때로는 루팅되지 않은 핸드 인드 (hand-in) 된 장치를 얻거나 "법의학 같은 조건"을 유지해야합니다) – "do 기기를 변경하지 말고 탐색하세요 ").
Izzy

따라서 두 번째 아이디어는 장치에서 수정 된 adbd를 사용하지 않고 일부 파일을 푸시하지 않고 adb 쉘을 통해 실행되는 도구를 작성하는 것입니다. 나는 이것을 달성하는데 시간이 걸릴 것이라고 생각한다 (성공한다면) : D
user3344236

@ user3344236은 특히 안드로이드 개발자가 아니기 때문에 너무 걱정입니다. 여기에는 기본 솔루션이 없지만 "웹 기반 솔루션"( "Google Play 조회"와 유사 함)을 사용하고 있습니다.
Izzy

안녕이지! 위의 주석을 고려할 때 루트가 아닌 장치를 고려한 솔루션이 필요합니까?
Firelord

답변:


8

이것은 일반적인 것이 아니기 때문에 최종 답변이 아니며 (일부 장치에서만 작동) – 최소한 시작입니다.

우리가 알아 낸 것처럼 Kitkat (Android 4.4) 이상이있는 CM 기반 ROM aapt/system/bin1 이진 바이너리 와 함께 제공됩니다 . ROM에 ROM이없고 장치에 바이너리를 설치하는 것이 옵션 인 경우 여기에서 찾을 수 있습니다 .

를 사용 aapt하여 앱 이름을 검색 할 수 있습니다.

aapt d badging <path to apk> | grep "application: label" |awk '{print $2}'

출력은 다음과 같습니다 label='Funny App'. 그러면 앱 이름을 쉽게 파싱 할 수 있습니다. 예 :

aapt d badging <path to apk> | grep 'application: label' | sed -n \"s/.*label\='\([^']*\)'.*/\1/p\"

(앱 이름에 작은 따옴표가 포함되어 있지만 화장품으로 계산 될 수있는 경우 좋지 않습니다.


1 : 우리가 확인한 Kitkat 및 위의 재고 ROM에서 이것을 찾지 못 했으므로 CM 기반 ROM 일 수 있습니다.


3
독자 참고 사항 : 해당 aapt바이너리 를 사용하기 위해 루팅 된 장치가 없어도됩니다 . aaptPC 에서 바이너리를 다운로드하여 이름을 바꾸고 바이너리 에서 Linux 호환 실행 권한을 설정하고로 푸시 /data/local/tmp한 다음 절대 경로 /data/local/tmp/aapt를 사용하여 해당 명령에서 바이너리를 사용할 수 있습니다.
불의 군주

따라서 패키지 이름 (원래 질문의 첫 번째 부분)의 경우aapt d badging <path to apk> | grep 'package: name' | awk '{print $2}'
gmoz22

8

다음은 안드로이드 5.0.2를 실행하는 Moto G 2 세대에서 실행 된 위의 약간의 변경이 필요한 루트가 아닌 전화에 대한 내 솔루션입니다.

/ system / bin에 이진 파일이 없으므로 https://android.izzysoft.de/downloads 에서 먼저 다운로드를 시도했습니다.

그러나 실행하려고 할 때 오류가 발생했습니다.

오류 : 위치 독립 실행 파일 (PIE) 만 지원됩니다.

그래서 PIE 버전을 검색하고 https://github.com/Calsign/APDE/blob/master/APDE/src/main/assets/aapt-binaries/aapt-arm-pie를 찾았습니다.

그리고 이것은 바이너리를 / data / local / tmp에 복사하여 작동했습니다.

adb push aapt-arm-pie /data/local/tmp
adb shell chmod 0755 /data/local/tmp/aapt-arm-pie

그럼:

adb shell pm list packages -3 -f

타사 앱 (시스템 앱이 아닌 설치 한 앱)의 목록을 가져온 다음 위의 명령에서 패키지를 사용하여 패키지에 대한 정보를 얻을 수 있습니다 (예 :

adb shell /data/local/tmp/aapt-arm-pie d badging /data/app/com.facebook.katana-3/base.apk

아래는 제 3 자 앱의 "공통"이름을 얻는 스크립트 (Linux 클라이언트 용)입니다 .``

for pkg in `adb shell pm list packages -3 -f | awk -F= '{sub("package:","");print $1}'`
do
  adb shell /data/local/tmp/aapt-arm-pie d badging $pkg | awk -F: '
      $1 == "application-label" {print $2}'
done

패키지와 버전도 원한다면 마지막에서 한 줄만 변경하십시오.

$1 == "application-label" {print $2}'

에:

$1 == "package" { split($2,space," ")
name=space[1];version=space[3]}
$1 == "application-label" {print name, version, $2 }'

출력 예 :

name='com.ultimarom.launchnavigation' versionName='1.28' 'Navigation' name='com.enhanced.skineditorstudio' versionName='3.3' 'Custom Skin Creator' name='com.mojang.minecraftpe' versionName='1.2.6.60' 'Minecraft' name='org.videolan.vlc' versionName='2.5.13' 'VLC' name='com.jrustonapps.myauroraforecast' versionName='1.7.2' 'My Aurora Forecast' name='de.j4velin.wifiAutoOff' versionName='1.7.6' 'WiFi Automatic' name='com.facebook.katana' versionName='153.0.0.54.88' 'Facebook' name='com.metago.astro' versionName='6.0.5' 'ASTRO File Manager' name='za.co.hardrive.smartinfo.parkrun' versionName='2.0.2' 'My 5krun' name='com.PYOPYO.StarTrackerVR' versionName='1.0.1' 'StarTracker VR' name='cz.aponia.bor3.offlinemaps' versionName='1.1.19' 'Offline Maps' name='com.groupon' versionName='16.11.63973' 'Groupon' name='com.ebay.mobile' versionName='5.16.1.2' 'eBay' name='com.runtastic.android' versionName='8.1.1' 'Runtastic' name='com.google.android.diskusage' versionName='3.8.3' 'DiskUsage'

마이크


Mike : 쉘 스크립트의 경우 한 번, ARM의 aapt! 시간이 허락하자마자 체크 아웃합니다 (현재 조금 서두르고 있습니다). :)
Izzy

추신 : 내 다운로드 페이지는 이제 지정한 소스 ( "한 단계 위로")로 연결되므로 사람들은 ARM과 x86 빌드 중에서 선택할 수 있습니다.
Izzy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.