답변:
aapt dump badging <path-to-apk> | grep package:\ name
|
입력하고 Enter 키를 누른 다음 원하는 매개 변수의 출력을 검색하십시오. aapt
aapt
명령은 아래에 Android\SDK\build-tools\version
있습니다. on windows 명령은 다음 aapt dump badging <path-to-apk> | findstr -i "package: name"
과 같습니다.aapt dump badging <path-to-apk>
휴대 전화에 APK를 설치 한 다음
adb를 사용하여 연결하면 adb 쉘을 시작하고 설치된 각 apk의 패키지 이름을 보여주는 pm list packages -f를 실행할 수 있습니다.
인 텐트를 사용하여 웹에서 마켓 앱을 시작하기 위해 Android 앱의 패키지 이름 찾기 에서 가져 왔습니다.
su
먼저 명령을 사용하십시오 .
pm list packages -f | grep term-to-search-for
@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 사용자를 돕기를 바랍니다!
MS 메모장을 사용하여 AndroidManifest.xml을 열면 구를 검색 package
하면 다음을 찾을 수 있습니다.
package manifest $xxx.xxxxxxx.xxxxxxx |
여기서 xxx.xxxxxxx.xxxxxxx는 각 문자 다음에 공백으로 작성된 패키지 이름입니다.
특정 도구가 설치되어 있지 않을 때 유용한 방법입니다.
다음 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
프로그래밍 방식 으로이 작업을 수행 해야하는 경우 뇌에 답을 얻는 것보다 조금 더 복잡합니다. 모든 앱에 서명하는 데 사용하는 스크립트가 있지만 각각 다른 키를 사용합니다. 패키지 이름 을 얻는 두 가지 방법이 있습니다. 을 출력 변수에 넣거나 필요한 것을 수행 할 수 입니다.
출력 예 : com.example.appname
(그리고 그 이상은 아님)
aapt
-SDK 도구 다운로드의 일부인 Android Asset Packaging Tool
필드 구분 기호로 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'
우리는이 형식을 유지하려는 개발자의 약속이 없습니다.
필드 구분 기호로 awk
지정 "
을 사용 하여을 사용 하여 행을 검색하고 행 package=
에서 두 번째 "필드"만 인쇄하십시오.
aapt list -a /path/to/file.apk | awk -v FS='"' '/package=/{print $2}'
이 방법의 약점은 출력 섹션 package=
에서만 출력에 적합하다는 것 Android Manifest:
입니다. 우리는이 형식을 유지하려는 개발자의 약속이 없습니다.
로 apk 파일을 apktool d
펼치고 AndroidManifest.xml을 읽으십시오.
이것이 가장 좋은 방법이지만 AndroidManifest.xml은 이진 파일이며 텍스트로 변환하는 데 표시되는 모든 SO 답변이 작동하지 않습니다. ( apktool d
간단한 대신 사용하면 unzip
이 작업을 수행해야하지만 그렇지 않습니다.) 이 문제에 대한 해결책이 있으면 의견을 말하십시오
또 다른 해결책은 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
스마트 폰에 APK가 이미있는 경우 매우 간단한 방법이 있습니다. 다음 APP 중 하나를 사용하십시오.
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}'
물론 다른 도구를 사용하여 필터링을 수행 할 수 있습니다.
일부 테스트 시나리오에서와 같이 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에서도 작동합니다.
나는 또한 컴파일 해제를 시도했지만 작동하지만 최근에 가장 쉬운 방법을 찾았습니다.
Appium 웹 사이트 에서 Appium 다운로드 및 설치
Appium-> Android 설정을 열고 대상 apk 파일을 선택하십시오. 그런 다음 원하는 모든 것, 패키지 정보, 활동 정보를 얻습니다.
일괄 스크립팅에서이를 사용하려면 스크립트가 패키지 이름 만 반환하도록하는 것이 편리합니다 (예 : 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`
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의 경로를 편집하십시오.
일:
%adb% install %apk%
장치가 연결되어 있으면 명령 이 응용 프로그램을 설치합니다.%aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt
패키지 이름과 APK의 버전 등과 같은 다른 세부 사항을 가져 와서 apk와 동일한 위치에 temp.txt 파일에 저장합니다.extracts the package name and assigns to
pkgName` 변수%adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1
앱을 시작합니다.본질적으로 위의 코드는 데스크톱 "Desktop \ APK \ Instant_Instal \"의 지정된 위치에서 장치로 APK를 설치하고 응용 프로그램을 시작합니다.
Android 문서에서 AAPT가 더 이상 사용되지 않는다고 언급되었으므로 Linux에서 AAPT2 명령을 사용하여 패키지 이름을 얻는 방법은 다음과 같습니다.
./aapt2 dump packagename <path_to_apk>
이전 버전의 Gradle 빌드를 사용하고 있으므로 여기에 언급 된대로 최신 버전의 AAPT2를 다운로드해야했습니다.
내 SDK-25.0.3, 26.0.1 및 27.0.3의 빌드 도구를 사용하여 aapt2 명령을 실행하면 오류가 표시됩니다. 'packagename'을 열 수 없습니다 : 해당 파일이나 디렉토리가 없습니다. 그래서 AAPT2의 최신 버전으로갔습니다.
나는 리눅스에 3.3.0-5013011을 사용했다.