อ่านชื่อแพ็คเกจของ Android APK


200

ฉันต้องได้รับชื่อแพ็คเกจของ Android APK ฉันได้ลองเปิดเครื่องรูด APK และอ่านเนื้อหาAndroidManifest.xmlแล้ว แต่ดูเหมือนว่าไม่ใช่ไฟล์ข้อความ

ฉันจะแยกชื่อแพ็กเกจของ APK ได้อย่างไร?

คำตอบ:


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

1
มีวิธีที่จะเรียกสิ่งนี้จากภายในรหัส Android หรือไม่? ฉันต้องการที่จะเปิดตัวแพ็คเกจของ apk ที่ฉันดาวน์โหลดผ่านแอพของฉัน
Matt Wear

7
appt dump badging <path-to-apk> | แพ็คเกจ grep: \ name
herbertD

2
@Campiador คุณสามารถพิมพ์จนถึงท่อ|ได้กด Enter แล้วค้นหาผลลัพธ์สำหรับพารามิเตอร์ที่คุณต้องการ เพียงจำไว้ว่าaaptต้องอยู่ในเส้นทางของคุณ
Patrick

ดูคำตอบของฉันด้านล่างหากคุณต้องการรับโปรแกรมนี้ (สำหรับสคริปต์)
Bruno Bronosky

15
aaptAndroid\SDK\build-tools\versionคำสั่งจะอยู่ภายใต้ คำสั่งบน windows สามารถเป็นaapt dump badging <path-to-apk> | findstr -i "package: name"หรือaapt dump badging <path-to-apk>
equiman

75

คุณสามารถติดตั้ง apk บนโทรศัพท์ของคุณได้

เชื่อมต่อโดยใช้ adb คุณสามารถเรียกใช้ adb shell และเรียกใช้งานรายการแพคเกจ pm -f ซึ่งแสดงชื่อแพ็กเกจสำหรับ apk ที่ติดตั้งไว้แต่ละตัว

สิ่งนี้นำมาจาก ชื่อแพ็คเกจค้นหาสำหรับแอป Android เพื่อใช้ Intent เพื่อเปิดแอป Market จากเว็บ


1
นอกจากนี้คุณจะต้องตรวจสอบให้แน่ใจว่าคุณกำลังทำงานด้วยสิทธิ์ระดับสูง โดยพื้นฐานในเทอร์มินัลใช้suคำสั่งก่อน
palswim

4
เพื่อค้นหาชื่อแพ็คเกจที่ต้องการpm list packages -f | grep term-to-search-for
Patrick Favre

14

ตามคำตอบ @hackbod ... แต่เกี่ยวข้องกับ windows

aaptAndroid\SDK\build-tools\versionคำสั่งตั้งอยู่บน หากคุณต้องการข้อมูลเพิ่มเติมเกี่ยวกับappt command(เครื่องมือบรรจุภัณฑ์สินทรัพย์ของ Android) อ่าน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

หากคุณกำลังดูที่ google play และต้องการทราบชื่อแพ็คเกจของมันคุณสามารถดู url หรือแถบที่อยู่ได้ คุณจะได้รับชื่อแพ็คเกจ นี่com.landshark.yaumคือชื่อแพ็คเกจ

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

12

หากคุณเปิด AndroidManifest.xml โดยใช้ MS Notepad ให้ค้นหาวลีpackageและคุณจะพบสิ่งต่อไปนี้:

package manifest $xxx.xxxxxxx.xxxxxxx |

โดยที่ xxx.xxxxxxx.xxxxxxx เป็นชื่อแพ็กเกจของคุณเพียงเขียนด้วยช่องว่างหลังอักขระแต่ละตัว

เป็นวิธีที่มีประโยชน์เมื่อคุณไม่มีเครื่องมือเฉพาะติดตั้ง


สิ่งนี้มีประโยชน์อย่างยิ่งหากรหัสสำหรับแอปอยู่ใน gitHub! ง่ายกว่าวิธีอื่น ๆ ขอบคุณมาก!
sarink

1
ฉันแกะ APK ออกแล้ว แต่ AndroidManifest.xml เป็นไฟล์ไบนารี แปลก แต่จริง
phatmann

12

สคริปต์ทุบตีต่อไปนี้จะแสดงชื่อแพ็คเกจและชื่อกิจกรรมหลัก:

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

คำตอบแบบเป็นโปรแกรม

หากคุณต้องการทำสิ่งนี้โดยทางโปรแกรมมันมีส่วนเกี่ยวข้องมากกว่าเพียงแค่ได้รับคำตอบในสมองของคุณ ฉันมีสคริปต์ที่ฉันใช้ในการลงชื่อแอปทั้งหมดของเรา แต่แต่ละคนใช้คีย์ที่แตกต่างกัน ต่อไปนี้เป็น 2 วิธีในการรับชื่อแพ็คเกจเป็นผลลัพธ์เพื่อให้คุณสามารถใส่ไว้ในตัวแปรหรือทำสิ่งที่คุณต้องการ

ตัวอย่างผลลัพธ์: com.example.appname(และไม่มีอะไรเพิ่มเติม)

ความต้องการ

aapt- เครื่องมือบรรจุสินทรัพย์ Android ซึ่งเป็นส่วนหนึ่งของการดาวน์โหลดเครื่องมือ SDK

โซลูชันที่ 1

การใช้awkระบุ'เป็นตัวคั่นฟิลด์ค้นหาบรรทัดด้วยpackage: name=และพิมพ์เฉพาะ "ฟิลด์" ที่ 2 ในบรรทัด:

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=และพิมพ์เฉพาะ "ฟิลด์" ที่ 2 ในบรรทัด:

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
ขอขอบคุณที่ให้ข้อมูลเพิ่มเติมเพื่อทำความเข้าใจมากกว่าเพียงแค่ให้คัดลอกบรรทัดคำสั่งเดียว
อาลีเซย์นาลี

4

ทางออกที่ง่ายคือ Open Android Studio -> Build -> วิเคราะห์ 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
Bruno Bronosky



1

ฉันคิดว่าวิธีที่ดีที่สุดและง่ายที่สุดในการแยกเฉพาะชื่อแพ็คเกจใน Linux คือ

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

คำอธิบาย:

  1. AAPT ดึงข้อมูล APK
  2. Grep "package" เพื่อเก็บเฉพาะบรรทัดเกี่ยวกับข้อมูลแพ็คเกจ
  3. ทำให้ sed แทนที่ทั้งบรรทัดด้วยชื่อแพ็กเกจเท่านั้นโดยใช้ regex ต่อไปนี้: package: name='([a-z0-9.]*)'.*และแทนที่ด้วยกลุ่มการจับคู่แรก (และเท่านั้น)

1

คุณสามารถแยก AndroidManifest.xml จาก APK ลบ NULL ไบต์ทั้งหมดข้ามทุกอย่างจนกระทั่งหลังจากสตริง 'รายการ' และจากนั้นคุณจะอยู่ที่ความยาวไบต์ตามด้วยชื่อแพ็คเกจ (และสิ่งที่เกิดขึ้นหลังจากนั้น) สำหรับงานที่ยากฉันใช้เครื่องมือGEMAที่ยอดเยี่ยมดังนั้นคำสั่งจะเป็นดังนี้:

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

แน่นอนคุณสามารถใช้เครื่องมืออื่น ๆ เพื่อทำการกรอง


1

หากคุณไม่ได้ติดตั้ง Android SDK ไว้เช่นในบางสถานการณ์การทดสอบคุณสามารถรับชื่อแพ็คเกจโดยใช้วิธีการทุบตีต่อไปนี้:

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"
}

ทดสอบบนเครื่องแมค '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, APKPath ตามเส้นทางของ adb, aapt และตำแหน่ง apk ในระบบของคุณ

ที่ทำงาน:

  • ที่นี่ฉันได้เพิ่ม apk ในโฟลเดอร์บนเดสก์ท็อป "\ Desktop \ APK \ Instant_Instal \"
  • คำสั่ง%adb% install %apk%จะติดตั้งแอปพลิเคชันหากอุปกรณ์นั้นเชื่อมต่ออยู่
  • %aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txtชื่อแพ็กเกจนี้จะดึงรายละเอียดอื่น ๆ เช่น apk ฯลฯ รุ่นอื่น ๆ และเก็บไว้ในไฟล์ temp.txt ในตำแหน่งเดียวกับ apk
  • FOR / F "tokens = 2 delims = '" %% s IN (temp.txt) DO SET pkgName = %% s s extracts the package name and assigns topkgName` variable
  • ในที่สุดก็%adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1เปิดตัวแอพ

ในสาระสำคัญรหัสข้างต้นติดตั้ง apk จากสถานที่ที่กำหนดในเดสก์ท็อป "เดสก์ท็อป \ APK \ Instant_Instal \" ไปยังอุปกรณ์และเปิดแอปพลิเคชัน


0

เนื่องจากฉันไม่สามารถค้นหาชื่อแพ็คเกจในไฟล์. apk ด้วยตัวแก้ไข (เช่นที่แนะนำข้างต้น) ฉันได้ตรวจสอบฟังก์ชั่นในแอป "ES Datei Explorer" / "ES File Explorer" (รุ่นฟรี) ที่ฉัน ติดตั้งแล้ว ในเครื่องมือนี้ชื่อแพคเกจจะแสดงอย่างถูกต้อง
เนื่องจากฉันคิดว่าตัวสำรวจไฟล์ที่ดีไม่ควรพลาดในโทรศัพท์ฉันแนะนำให้ใช้เครื่องมือนี้ (ถ้าคุณติดตั้ง apk บนมือถือแล้วและต้องรู้ชื่อแพ็คเกจ)


0

เนื่องจากมีการกล่าวถึงในเอกสารประกอบ Android ที่AAPT เลิกใช้แล้วการรับชื่อแพ็กเกจโดยใช้คำสั่ง AAPT2 ใน Linux มีดังนี้:

./aapt2 dump packagename <path_to_apk>

เนื่องจากฉันใช้ Gradle build รุ่นเก่าฉันต้องดาวน์โหลด AAPT2 เวอร์ชันใหม่ตามที่กล่าวไว้ที่นี่:

ดาวน์โหลด AAPT2 จาก Google Maven

การใช้เครื่องมือสร้างใน sdk ของฉัน - 25.0.3, 26.0.1 และ 27.0.3, การดำเนินการคำสั่ง aapt2 แสดงข้อผิดพลาด: ไม่สามารถเปิด 'packagename': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว นั่นเป็นเหตุผลที่ฉันไปสำหรับ AAPT2 เวอร์ชันใหม่

ฉันใช้ 3.3.0-5013011 สำหรับ linux


0

คุณสามารถใช้Analyze APK...จากเมนู Build ใน Android Studio มันจะแสดงชื่อแพ็คเกจที่ด้านบนของหน้าต่างใหม่


-1

aapt list -a "path_to_apk"

ฉันขอแนะนำให้คุณบันทึกไว้ใน. txt เพราะอาจยาวมาก ดังนั้น:

aapt list -a "path_to_apk"> file.txt

จากนั้นดู file.txt ในไดเรกทอรีปัจจุบันของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.