안드로이드 APK의 패키지 이름을 읽으십시오


200

Android APK 의 패키지 이름 을 가져와야합니다. APK의 압축을 풀고의 내용을 읽으려고했지만 AndroidManifest.xml텍스트 파일이 아닌 것 같습니다.

APK의 패키지 이름을 추출하려면 어떻게합니까?

답변:


320
aapt dump badging <path-to-apk> | grep package:\ name

1
안드로이드 코드 내에서 이것을 호출하는 방법이 있습니까? 내 앱을 통해 다운로드 한 apk 패키지를 시작할 수 있기를 원합니다.
매트 착용

7
appt 덤프 배지 <path-to-apk> | grep 패키지 : \ name
herbertD

2
@Campiador 파이프까지 |입력하고 Enter 키를 누른 다음 원하는 매개 변수의 출력을 검색하십시오. aapt
패트릭

프로그래밍 방식으로 (스크립트의 경우)이 필요하면 아래 답변을 참조하십시오.
Bruno Bronosky

15
aapt명령은 아래에 Android\SDK\build-tools\version있습니다. on windows 명령은 다음 aapt dump badging <path-to-apk> | findstr -i "package: name"과 같습니다.aapt dump badging <path-to-apk>
equiman

75

휴대 전화에 APK를 설치 한 다음

adb를 사용하여 연결하면 adb 쉘을 시작하고 설치된 각 apk의 패키지 이름을 보여주는 pm list packages -f를 실행할 수 있습니다.

텐트를 사용하여 웹에서 마켓 앱을 시작하기 위해 Android 앱의 패키지 이름 찾기 에서 가져 왔습니다.


1
또한 높은 권한으로 실행 중인지 확인해야합니다. 기본적으로 터미널에서는 su먼저 명령을 사용하십시오 .
palswim

4
특정 패키지 이름을 검색하는 방법pm list packages -f | grep term-to-search-for
Patrick Favre

14

@hackbod 답변을 기반으로하지만 창과 관련이 있습니다.

aapt명령은에 있습니다 Android\SDK\build-tools\version. appt command(Android Asset Packaging Tool) 에 대한 자세한 정보가 필요 하면 https://stackoverflow.com/a/28234956/812915를 읽으십시오.

dump하위 명령은 aapt패키지의 개별 요소 또는 부분 값을 표시하는 데 사용됩니다.

aapt dump badging <path-to-apk>

package: name정보가 있는 줄만 표시 하려면findstr

aapt dump badging <path-to-apk> | findstr -n "package: name" | findstr "1:"

다른 Windows 사용자를 돕기를 바랍니다!


13

구글 플레이를보고 패키지 이름을 알고 싶다면 URL 또는 주소 표시 줄을 볼 수 있습니다. 패키지 이름을 얻습니다. com.landshark.yaum패키지 이름은 다음과 같습니다

 https://play.google.com/store/apps/details?id=com.landshark.yaum&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5sYW5kc2hhcmsueWF1bSJd

12

MS 메모장을 사용하여 AndroidManifest.xml을 열면 구를 검색 package하면 다음을 찾을 수 있습니다.

package manifest $xxx.xxxxxxx.xxxxxxx |

여기서 xxx.xxxxxxx.xxxxxxx는 각 문자 다음에 공백으로 작성된 패키지 이름입니다.

특정 도구가 설치되어 있지 않을 때 유용한 방법입니다.


앱의 코드가 github에있는 경우 특히 유용합니다! 다른 방법보다 훨씬 쉽습니다. 감사합니다!
sarink 17

1
APK의 압축을 풀었지만 AndroidManifest.xml은 이진 파일이었습니다. 이상하지만 사실입니다.
phatmann

12

다음 bash 스크립트는 패키지 이름과 기본 활동 이름을 표시합니다.

apk_package.sh

package=$(aapt dump badging "$*" | awk '/package/{gsub("name=|'"'"'","");  print $2}')
activity=$(aapt dump badging "$*" | awk '/activity/{gsub("name=|'"'"'","");  print $2}')
echo
echo "   file : $1"
echo "package : $package"
echo "activity: $activity"

다음과 같이 실행하십시오.

apk_package.sh /path/to/my.apk

grep과 sed를 awk와 결합하지 마십시오. awk를 사용하면 충분합니다.
Bruno Bronosky

8

프로그램 답변

프로그래밍 방식 으로이 작업을 수행 해야하는 경우 뇌에 답을 얻는 것보다 조금 더 복잡합니다. 모든 앱에 서명하는 데 사용하는 스크립트가 있지만 각각 다른 키를 사용합니다. 패키지 이름 을 얻는 두 가지 방법이 있습니다. 을 출력 변수에 넣거나 필요한 것을 수행 할 수 입니다.

출력 예 : com.example.appname(그리고 그 이상은 아님)

요구 사항

aapt-SDK 도구 다운로드의 일부인 Android Asset Packaging Tool

해결책 1

필드 구분 기호로 awk지정 '을 사용 하여을 사용 하여 행을 검색하고 행 package: name=에서 두 번째 "필드"만 인쇄하십시오.

aapt dump badging /path/to/file.apk | awk -v FS="'" '/package: name=/{print $2}'

이 방법의 약점은 패키지 정보 필드를 동일한 순서로 출력하는 데 적합하다는 것입니다.

package: name='com.example.appname' versionCode='3461' versionName='2.2.4' platformBuildVersionName='4.2.2-1425461'

우리는이 형식을 유지하려는 개발자의 약속이 없습니다.

해결책 2

필드 구분 기호로 awk지정 "을 사용 하여을 사용 하여 행을 검색하고 행 package=에서 두 번째 "필드"만 인쇄하십시오.

aapt list -a /path/to/file.apk | awk -v FS='"' '/package=/{print $2}'

이 방법의 약점은 출력 섹션 package=에서만 출력에 적합하다는 것 Android Manifest:입니다. 우리는이 형식을 유지하려는 개발자의 약속이 없습니다.

해결책 3

로 apk 파일을 apktool d펼치고 AndroidManifest.xml을 읽으십시오.

이것이 가장 좋은 방법이지만 AndroidManifest.xml은 이진 파일이며 텍스트로 변환하는 데 표시되는 모든 SO 답변이 작동하지 않습니다. ( apktool d간단한 대신 사용하면 unzip이 작업을 수행해야하지만 그렇지 않습니다.) 이 문제에 대한 해결책이 있으면 의견을 말하십시오


1
한 줄의 복사 명령을 내리는 것보다 더 많은 정보를 이해해 주셔서 감사합니다.
Ali Zeynali

4

간단한 해결책은 Android Studio 열기-> 빌드-> APK 분석 ...입니다. APK를 찾아서 선택하면 패키지 이름을 찾을 수 있으며 거의 ​​읽을 수 있습니다.


2

패키지 이름을 알고 싶다면 adb logcat을 실행하고 원하는 활동을 시작하면 패키지 이름에 대한 힌트가 표시됩니다.


2

또 다른 해결책은 aapt list를 사용하고 sed를 사용하여 구문 분석하는 것입니다.

aapt list -a $PATH_TO_YOUR_APK | sed -n "/^Package Group[^s]/s/.*name=//p"


패키지 그룹 이름은 일부 앱의 패키지 이름과 동일합니다. 당신은 정말를 사용 할 필요가 A:package="com.example.appname"Android Manifest:당신이 할 경우 섹션aapt list -a
브루노 Bronosky


2

매우 간단한 방법은 apkanalyzer를 사용하는 것입니다.

apkanalyzer manifest application-id "${_path_to_apk}"

1

리눅스에서 패키지 이름 추출하는 가장 쉽고 간단한 방법 은

aapt dump badging <APK_path> | grep package | sed -r "s/package: name='([a-z0-9.]*)'.*/\1/"

설명:

  1. AAPT는 APK 정보를 추출합니다
  2. 패키지 정보에 대한 줄만 유지하려면 "패키지"를 가져옵니다.
  3. sed는 다음 정규식을 사용하여 전체 줄을 패키지 이름으로 package: name='([a-z0-9.]*)'.*바꾸고 첫 번째 (및 유일한) 일치하는 그룹으로 바꿉니다.

1

APK에서 AndroidManifest.xml을 추출하고 모든 NULL 바이트를 제거하고 문자열 'manifest'가 끝날 때까지 모든 것을 건너 뛰고 길이가 바이트 뒤에 패키지 이름 이옵니다. 어려운 작업에는 훌륭한 GEMA 도구를 사용하므로 명령은 다음과 같습니다.

7z e -so MyApp.apk AndroidManifest.xml | gema '\x00=' | gema -match 'manifest<U1><U>=@substring{0;@char-int{$1};$2}'

물론 다른 도구를 사용하여 필터링을 수행 할 수 있습니다.


1

일부 테스트 시나리오에서와 같이 Android SDK가 설치되어 있지 않은 경우 다음 bash 메소드를 사용하여 패키지 이름을 얻을 수 있습니다.

getAppIdFromApk() {
  local apk_path="$1"

  # regular expression (required)
  local re="^\"L.*/MainActivity;"
  # sed substitute expression
  local se="s:^\"L\(.*\)/MainActivity;:\1:p"
  # tr expression
  local te=' / .';

  local app_id="$(unzip -p $apk_path classes.dex | strings | grep -Eo $re | sed -n -e $se | tr $te)"

  echo "$app_id"
}

Mac에서 테스트되었습니다. 'strings'와 'unzip'은 대부분의 Linux에서 표준이므로 Linux에서도 작동합니다.


0

에뮬레이터에 Package_Name_Viewer.apk 를 설치 하고 에뮬레이터에 설치된 모든 앱의 패키지 이름을 볼 수 있습니다.


0

나는 또한 컴파일 해제를 시도했지만 작동하지만 최근에 가장 쉬운 방법을 찾았습니다.

  1. Appium 웹 사이트 에서 Appium 다운로드 및 설치

  2. Appium-> Android 설정을 열고 대상 apk 파일을 선택하십시오. 그런 다음 원하는 모든 것, 패키지 정보, 활동 정보를 얻습니다.


0

일괄 스크립팅에서이를 사용하려면 스크립트가 패키지 이름 만 반환하도록하는 것이 편리합니다 (예 : APK가있을 때 앱을 제거하는 경우).

내가 사용하는 스크립트는 다음과 같습니다.

# extract the android package id from a built apk file
# usage ./getPackageName.sh <path-to-apk>
line=`aapt dump badging "$1" | grep package:\ name`

# above returns:
# package: name='com.calvium.myapp' versionCode='1' versionName='1.0'
if [[ $line =~ name=\'(.+)\'\ versionCode ]]; then
    echo ${BASH_REMATCH[1]}
else
    echo "Failed to find package name"
    exit 1
fi

요지에서 사용 가능

그래서 당신은 쓸 수 있습니다 :

adb 제거`./getPackageName.sh file.apk`


0

Windows의 경우 다음과 같이 작동했습니다.

:: // Initializing variables
SET adb="C:\Users\<User name>\AppData\Local\Android\Sdk\platform-tools\adb"
SET aapt="C:\Users\<User name>\AppData\Local\Android\Sdk\build-tools\22.0.0\aapt"
SET APKPath=C:\Users\<User name>\Desktop\APK\Instant_Instal\

CD %APKPath%

:: // Searching for apk file and storing it
FOR /F "delims=" %%f IN ('dir /S /B *.apk') DO SET "APKFullPath=%%f"
SET apk=%APKFullPath%

:: // Command adb install apk, run apk
%adb% install %apk%

:: // Fetching package name from apk
%aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt
FOR /F "tokens=2 delims='" %%s IN (temp.txt) DO SET pkgName=%%s
del temp.txt

:: // Launching apk
%adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1

pause

노트

시스템에서 adb, aapt 및 apk 위치의 경로에 따라 adb, aapt, APKPath의 경로를 편집하십시오.

일:

  • 여기에 데스크탑 "\ Desktop \ APK \ Instant_Instal \"의 폴더에 apk를 추가했습니다.
  • %adb% install %apk%장치가 연결되어 있으면 명령 이 응용 프로그램을 설치합니다.
  • 이것은 %aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt패키지 이름과 APK의 버전 등과 같은 다른 세부 사항을 가져 와서 apk와 동일한 위치에 temp.txt 파일에 저장합니다.
  • FOR / F "토큰 = 2 delims = '"%% s IN (temp.txt) DO SET pkgName = %% s extracts the package name and assigns topkgName` 변수
  • 마지막으로 %adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1앱을 시작합니다.

본질적으로 위의 코드는 데스크톱 "Desktop \ APK \ Instant_Instal \"의 지정된 위치에서 장치로 APK를 설치하고 응용 프로그램을 시작합니다.


0

편집기를 사용하여 .apk 파일에서 패키지 이름을 찾을 수 없으므로 (위에서 제안한 것처럼) 앱 "ES Datei Explorer"/ "ES File Explorer"(무료 버전)의 기능을 확인했습니다. 이미 설치했습니다. 이 도구에서 패키지 이름이 올바르게 표시됩니다.
전화에 좋은 파일 탐색기가 없어서는 안된다고 생각 하므로이 도구를 사용하는 것이 좋습니다 (이미 모바일에 APK를 설치하고 패키지 이름을 알아야하는 경우).


0

Android 문서에서 AAPT가 더 이상 사용되지 않는다고 언급되었으므로 Linux에서 AAPT2 명령을 사용하여 패키지 이름을 얻는 방법은 다음과 같습니다.

./aapt2 dump packagename <path_to_apk>

이전 버전의 Gradle 빌드를 사용하고 있으므로 여기에 언급 된대로 최신 버전의 AAPT2를 다운로드해야했습니다.

Google Maven에서 AAPT2 다운로드

내 SDK-25.0.3, 26.0.1 및 27.0.3의 빌드 도구를 사용하여 aapt2 명령을 실행하면 오류가 표시됩니다. 'packagename'을 열 수 없습니다 : 해당 파일이나 디렉토리가 없습니다. 그래서 AAPT2의 최신 버전으로갔습니다.

나는 리눅스에 3.3.0-5013011을 사용했다.


0

Analyze APK...Android Studio의 빌드 메뉴에서 사용할 수 있으며 새 창의 맨 위에 패키지 이름이 표시됩니다.


-1

적응 목록- "path_to_apk"

매우 길 수 있으므로 .txt로 저장하는 것이 좋습니다. 그래서:

aapt list -a "path_to_apk"> file.txt

그런 다음 현재 디렉토리에서 file.txt를 참조하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.