apkanalyzer

Phiên bản dòng lệnh của Công cụ phân tích APK cung cấp thông tin chi tiết ngay lập tức về thành phần APK của bạn sau khi quy trình xây dựng hoàn tất và cho phép bạn so sánh sự khác biệt giữa hai APK. Khi sử dụng Công cụ phân tích APK, bạn sẽ giảm thời gian gỡ lỗi với tệp DEX và tài nguyên trong ứng dụng, đồng thời giảm kích thước APK của bạn.

apkanalyzer có trong gói Công cụ dòng lệnh SDK Android tại android_sdk/cmdline-tools/version/bin/apkanalyzer. Ngoài ra, bạn có thể truy cập Công cụ phân tích APK trong Android Studio như mô tả trong bài viết Phân tích bản dựng bằng Công cụ phân tích APK.

Cú pháp

Cú pháp cho apkanalyzer là:

apkanalyzer [global-options] subject verb [options] apk-file [apk-file2]

subject là nội dung bạn muốn truy vấn và có thể là toàn bộ APK hoặc một phần của APK. Chủ đề có thể là bất kỳ nội dung nào sau đây:

  • apk: Phân tích các thuộc tính tệp APK, chẳng hạn như ID ứng dụng, mã phiên bản và tên phiên bản.
  • files: Phân tích các tệp bên trong tệp APK.
  • manifest: Phân tích nội dung của tệp kê khai bên trong tệp APK.
  • dex: Phân tích các tệp DEX bên trong tệp APK.
  • resources: Xem văn bản, hình ảnh và tài nguyên chuỗi.

verb là những gì bạn muốn biết về chủ đề. Các chủ đề, động từ, và tuỳ chọn của chúng được mô tả trong phần sau đây về lệnh.

Mỗi lệnh yêu cầu bạn chỉ định một tệp APK. Chỉ có lệnh apk compare yêu cầu bạn chỉ định APK thứ hai.

Bạn có thể rút ngắn mọi tuỳ chọn, miễn là tuỳ chọn không rõ ràng. Ví dụ: có thể rút ngắn tuỳ chọn chung --human-readable thành -h.

Ví dụ sau đây phân tích apk (chủ đề) để lấy file-size (động từ), sau đó in kích thước tệp ở định dạng có thể đọc được (tuỳ chọn -h):

apkanalyzer -h apk file-size myapk.apk

Lệnh

Các mô tả lệnh sau đây được sắp xếp theo chủ đề và liệt kê các động từ và tổ hợp tuỳ chọn có sẵn cho mỗi chủ đề:

Xem thuộc tính tệp APK Mô tả
apk summary apk-file In ID ứng dụng, mã phiên bản và tên phiên bản.

Kết quả điểm dữ liệu:


com.myapp 5 1.1-beta
apk file-size apk-file In tổng kích thước tệp của APK.
apk download-size apk-file In ước tính kích thước tải xuống của APK.
apk features [--not-required] apk-file Các tính năng in mà APK sử dụng để kích hoạt tính năng lọc Cửa hàng Play. Thêm tuỳ chọn --not-required để bao gồm các tính năng được đánh dấu là không bắt buộc trong kết quả.

Kết quả điểm dữ liệu:


android.hardware.type.watch
android.hardware.microphone implied:
    requested android.permission.RECORD_AUDIO permission
apk compare [options] apk-file apk-file2 So sánh kích thước của apk-fileapk-file2. Bạn có thể bao gồm các tuỳ chọn sau:
  • --different-only: In các thư mục và tệp có sự khác biệt.
  • --files-only: Không in các mục nhập trong thư mục.
  • --patch-size: Hiển thị số liệu ước tính về bản vá theo từng tệp thay vì mức chênh lệch thô.

Kết quả điểm dữ liệu (kích thước cũ/kích thước mới/sự khác biệt về kích thước/đường dẫn):


39086736 48855615 9768879 /
10678448 11039232 360784 /classes.dex
18968956 18968956 0 /lib/
110576 110100 -476 /AndroidManifest.xml
...
Xem hệ thống tệp APK Mô tả
files list apk-file Liệt kê tất cả các tệp trong APK.

Kết quả điểm dữ liệu:


/
/classes2.dex
/classes.dex
/assets/
/assets/asset.data
/AndroidManifest.xml
/resources.arsc
/res/
...
files cat --file path apk-file In nội dung tệp. Bạn phải chỉ định một đường dẫn bên trong APK bằng cách sử dụng tuỳ chọn --file path, chẳng hạn như --file /AndroidManifest.xml
Xem thông tin trong tệp kê khai Mô tả
manifest print apk-file In tệp kê khai APK ở định dạng XML.
manifest application-id apk-file In giá trị mã ứng dụng.
manifest version-name apk-file In giá trị tên phiên bản.
manifest version-code apk-file In giá trị mã phiên bản.
manifest min-sdk apk-file In phiên bản SDK tối thiểu.
manifest target-sdk apk-file In phiên bản SDK mục tiêu.
manifest permissions apk-file In danh sách quyền.
manifest debuggable apk-file In xem ứng dụng có thể gỡ lỗi hay không.
Truy cập thông tin tệp DEX Mô tả
dex list apk-file In danh sách các tệp DEX trong APK.
dex references [--files path] [--files path2] apk-file In số tham chiếu phương thức trong các tệp DEX đã chỉ định. Tuỳ chọn mặc định là tất cả các tệp DEX. Thêm tuỳ chọn --files để cho biết các tệp cụ thể mà bạn muốn đưa vào.

Kết quả điểm dữ liệu:


classes.dex 59598
classes2.dex 8042
dex packages [option1 option2 ...] apk-file In cây phả hệ lớp từ DEX. Dữ liệu đầu ra, P, C, MF cho biết các gói, lớp, phương thức và trường tương ứng. Các mã x, k, rd cho biết các nút đã bị xoá, được giữ lại, được tham chiếu và được xác định tương ứng.

Hãy thêm các tuỳ chọn sau để tinh chỉnh kết quả:

  • --defined-only: Chỉ đưa các lớp được xác định trong APK vào kết quả.
  • --files: Chỉ định tên tệp DEX mà bạn muốn đưa vào. Mặc định: tất cả các tệp DEX.
  • --proguard-folder file: Chỉ định thư mục đầu ra Proguard để tìm các liên kết.
  • --proguard-mappings file: Chỉ định tệp liên kết ProGuard.
  • --proguard-seeds file: Chỉ định tệp nội dung gốc ProGuard.
  • --proguard-usages file: Chỉ định tệp sử dụng ProGuard.
  • --show-removed: Hiển thị các lớp và thành viên đã bị ProGuard xoá.

Ví dụ về dữ liệu đầu ra (loại/trạng thái/phương thức đã xác định/phương thức tham chiếu/kích thước byte/tên):


P d 1 1 85 g
P d 1 1 85 g.a
C d 1 1 85 g.a.a
M d 1 1 45 g.a.a java.lang.Object get()
C r 0 1 40 byte[]
M r 0 1 40 byte[] java.lang.Object clone()
dex code --class class [--method method] In mã byte của một lớp hoặc phương thức ở định dạng smali. Tên lớp là bắt buộc và in tên lớp đủ điều kiện để biên dịch ngược. Thêm tuỳ chọn --method để chỉ định phương thức biên dịch ngược.

Định dạng của phương thức biên dịch ngược là name(params)returnType, ví dụ: someMethod(Ljava/lang/String;I)V.

Xem các tài nguyên được lưu trữ ở res/ và resources.arsc Mô tả
resources packages In danh sách các gói được xác định trong bảng tài nguyên.
resources configs --type type [--package package] apk-file In danh sách các cấu hình cho type chỉ định. type là một loại tài nguyên chẳng hạn như string. Thêm tuỳ chọn --package nếu bạn muốn chỉ định tên gói của bảng tài nguyên, nếu không gói xác định đầu tiên sẽ được sử dụng.
resources value --config config --name name --type type [--package package] apk-file In giá trị của tài nguyên chỉ định bởi config, nametype. Tuỳ chọn type là loại tài nguyên, chẳng hạn như string.

Thêm tuỳ chọn --package nếu bạn muốn chỉ định tên gói của bảng tài nguyên, nếu không gói xác định đầu tiên sẽ được sử dụng.

resources names --config config --type type [--package package] apk-file In danh sách tên tài nguyên cho một cấu hình và loại. Tuỳ chọn type là loại tài nguyên, chẳng hạn như string. Thêm tuỳ chọn --package nếu bạn muốn chỉ định tên gói của bảng tài nguyên, nếu không gói xác định đầu tiên sẽ được sử dụng.
resources xml --file path apk-file In tệp XML nhị phân ở dạng người dùng có thể đọc được. Thêm tuỳ chọn file để chỉ định đường dẫn đến tệp.