Câu trả lời:
aapt dump badging <path-to-apk> | grep package:\ name
|
, nhấn enter và sau đó chỉ cần tìm kiếm đầu ra cho tham số mong muốn của bạn. Chỉ cần nhớ rằng aapt
cần phải đi trên con đường của bạn
aapt
lệnh được đặt dưới Android\SDK\build-tools\version
. Lệnh trên windows có thể aapt dump badging <path-to-apk> | findstr -i "package: name"
hoặcaapt dump badging <path-to-apk>
Bạn có thể cài đặt apk trên điện thoại của mình, sau đó
kết nối bằng adb, bạn có thể khởi chạy shell adb và thực thi các gói danh sách pm -f, hiển thị tên gói cho mỗi apk đã cài đặt.
Điều này được lấy từ Tìm tên gói cho ứng dụng Android để sử dụng Ý định để khởi chạy ứng dụng Market từ web
su
lệnh trước.
pm list packages -f | grep term-to-search-for
Dựa trên câu trả lời @hackbod ... nhưng liên quan đến windows.
aapt
lệnh được đặt trên Android\SDK\build-tools\version
. Nếu bạn cần thêm thông tin về appt command
công cụ (Công cụ đóng gói tài sản Android), hãy đọc https://stackoverflow.com/a/28234956/812915
Lệnh dump
phụ aapt
được sử dụng để hiển thị các giá trị của các phần tử hoặc phần riêng lẻ của gói:
aapt dump badging <path-to-apk>
Nếu bạn chỉ muốn xem dòng có package: name
thông tin, hãy sử dụngfindstr
aapt dump badging <path-to-apk> | findstr -n "package: name" | findstr "1:"
Hy vọng nó sẽ giúp người dùng windows khác!
Nếu bạn đang xem google play và muốn biết tên gói của nó thì bạn có thể xem url hoặc thanh địa chỉ. Bạn sẽ nhận được tên gói. Đây com.landshark.yaum
là tên gói
https://play.google.com/store/apps/details?id=com.landshark.yaum&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5sYW5kc2hhcmsueWF1bSJd
Nếu bạn mở AndroidManifest.xml bằng MS Notepad, hãy tìm kiếm cụm từ package
và bạn sẽ tìm thấy sau đây:
package manifest $xxx.xxxxxxx.xxxxxxx |
trong đó xxx.xxxxxxx.xxxxxxx là tên gói của bạn, chỉ được viết với khoảng trắng sau mỗi ký tự.
Đó là cách hữu ích khi bạn không cài đặt bất kỳ công cụ cụ thể nào.
Tập lệnh bash sau đây sẽ hiển thị tên gói và tên hoạt động chính:
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"
chạy nó như vậy:
apk_package.sh /path/to/my.apk
Nếu bạn cần thực hiện việc này theo chương trình, thì nó liên quan nhiều hơn một chút so với việc chỉ đưa câu trả lời vào não của bạn. Tôi có một tập lệnh mà tôi sử dụng để ký tất cả các ứng dụng của chúng tôi, nhưng mỗi tập lệnh sử dụng một khóa khác nhau. Dưới đây là 2 cách để chỉ lấy Tên gói làm đầu ra để bạn có thể đặt nó trong một biến hoặc làm bất cứ điều gì bạn cần với nó.
Kết quả ví dụ: com.example.appname
(và không có gì nữa)
aapt
- Công cụ đóng gói tài sản Android, một phần của công cụ SDK tải xuống
Sử dụng awk
chỉ định '
làm Dấu tách trường, tìm kiếm một dòng package: name=
và chỉ in "trường" thứ 2 trong dòng:
aapt dump badging /path/to/file.apk | awk -v FS="'" '/package: name=/{print $2}'
Một điểm yếu của phương pháp này là nó dựa vào aapt để xuất các trường thông tin gói theo cùng một thứ tự:
package: name='com.example.appname' versionCode='3461' versionName='2.2.4' platformBuildVersionName='4.2.2-1425461'
Chúng tôi không có cam kết từ các nhà phát triển để duy trì định dạng này.
Sử dụng awk
chỉ định "
làm Dấu tách trường, tìm kiếm một dòng package=
và chỉ in "trường" thứ 2 trong dòng:
aapt list -a /path/to/file.apk | awk -v FS='"' '/package=/{print $2}'
Một điểm yếu của phương pháp này là nó chỉ dựa vào aapt để xuất ra package=
trong Android Manifest:
phần đầu ra. Chúng tôi không có cam kết từ các nhà phát triển để duy trì định dạng này.
Mở rộng tệp apk với apktool d
và đọc AndroidManifest.xml.
Đây sẽ là phương pháp tốt nhất, nhưng AndroidManifest.xml là một tệp nhị phân và tất cả các câu trả lời SO tôi thấy để chuyển đổi nó thành văn bản không hoạt động. (Sử dụng apktool d
thay vì đơn giản unzip
được cho là để làm điều này cho bạn, nhưng không.) Hãy bình luận nếu bạn có giải pháp cho vấn đề này
Một giải pháp khác là sử dụng danh sách aapt và sử dụng sed để phân tích cú pháp đó:
aapt list -a $PATH_TO_YOUR_APK | sed -n "/^Package Group[^s]/s/.*name=//p"
A:package="com.example.appname"
trong Android Manifest:
phần nếu bạn làmaapt list -a
Có một cách rất đơn giản nếu bạn đã có APK trên điện thoại thông minh. Chỉ cần sử dụng một trong những ứng dụng này:
Một phương pháp rất đơn giản là sử dụng apkanalyzer.
apkanalyzer manifest application-id "${_path_to_apk}"
Tôi nghĩ rằng cách tốt nhất và đơn giản nhất để chỉ trích xuất tên gói trong Linux là
aapt dump badging <APK_path> | grep package | sed -r "s/package: name='([a-z0-9.]*)'.*/\1/"
Giải trình:
package: name='([a-z0-9.]*)'.*
và thay thế bằng nhóm khớp đầu tiên (và duy nhất).Bạn có thể trích xuất AndroidManifest.xml từ APK, xóa tất cả các byte NULL, bỏ qua mọi thứ cho đến sau chuỗi 'tệp kê khai' và sau đó bạn ở một byte có độ dài theo sau là tên gói (và cái gì xuất hiện sau nó). Đối với nhiệm vụ khó khăn, tôi sử dụng công cụ Gema tuyệt vời , vì vậy lệnh trông như thế này:
7z e -so MyApp.apk AndroidManifest.xml | gema '\x00=' | gema -match 'manifest<U1><U>=@substring{0;@char-int{$1};$2}'
Tất nhiên, bạn có thể sử dụng bất kỳ công cụ nào khác để lọc.
Nếu bạn chưa cài đặt SDK Android, như trong một số trường hợp thử nghiệm, bạn có thể lấy tên gói bằng phương pháp bash sau:
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"
}
Đã thử nghiệm trên máy mac. 'chuỗi' và 'giải nén' là tiêu chuẩn trên hầu hết các linux, vì vậy cũng nên hoạt động trên linux.
Tôi cũng đã thử điều khử biên dịch, nó hoạt động nhưng gần đây tôi đã tìm thấy cách dễ nhất:
Tải xuống và cài đặt Appium từ trang web Appium
Mở Appium-> Cài đặt Android, chọn tệp apk đích. Và sau đó bạn có được mọi thứ bạn muốn, thông tin gói, thông tin hoạt động.
Để sử dụng điều này trong tập lệnh theo lô, thật tiện lợi khi tập lệnh chỉ trả về tên gói (ví dụ: để gỡ cài đặt ứng dụng khi bạn có APK).
Đây là kịch bản tôi sử dụng:
# 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
Vì vậy, bạn có thể viết:
adb gỡ cài đặt `./getPackageName.sh file.apk`
Đối với Windows sau đây làm việc cho tôi:
:: // 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
Ghi chú
Vui lòng chỉnh sửa các đường dẫn của adb, aapt, APKPath theo các đường dẫn của adb, aapt và vị trí apk trong hệ thống của bạn.
Đang làm việc:
%adb% install %apk%
cài đặt ứng dụng nếu thiết bị được kết nối.%aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt
tìm nạp tên gói và một vài chi tiết khác như phiên bản vv của apk và lưu trữ trong tệp temp.txt ở cùng vị trí với apk.extracts the package name and assigns to
pkgName` biến%adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1
ra mắt ứng dụng.Về bản chất, đoạn mã trên sẽ cài đặt apk từ vị trí đã cho trong máy tính để bàn "Desktop \ APK \ Instant_Instal \" cho thiết bị và khởi chạy ứng dụng.
Vì tôi không thể tìm thấy tên gói trong tệp .apk bằng trình chỉnh sửa (như được đề xuất ở trên), tôi đã kiểm tra các chức năng trong Ứng dụng "ES Datei Explorer" / "ES File Explorer" (phiên bản miễn phí) mà tôi đã cài đặt rồi. Trong công cụ này, tên gói được hiển thị đúng.
Vì tôi nghĩ không nên thiếu trình thám hiểm tệp tốt trên điện thoại, tôi khuyên bạn nên sử dụng công cụ này (nếu bạn đã cài đặt apk trên điện thoại di động và phải biết tên gói).
Do tài liệu AAPT đã đề cập trong tài liệu Android đã bị từ chối, việc lấy tên gói bằng lệnh AAPT2 trong Linux như sau:
./aapt2 dump packagename <path_to_apk>
Vì tôi đang sử dụng phiên bản cũ hơn của bản dựng Gradle, tôi đã phải tải xuống phiên bản AAPT2 mới hơn như được đề cập ở đây:
Tải xuống AAPT2 từ Google Maven
Sử dụng các công cụ xây dựng trong sdk của tôi - 25.0.3, 26.0.1 và 27.0.3, thực thi lệnh aapt2 cho thấy lỗi: Không thể mở 'packagename': Không có tệp hoặc thư mục như vậy. Đó là lý do tại sao tôi chọn phiên bản mới hơn của AAPT2.
Tôi đã sử dụng 3.3.0-5013011 cho linux.
Bạn có thể sử dụng Analyze APK...
từ menu Build trong Android Studio, nó sẽ hiển thị tên gói ở đầu cửa sổ mới.