Làm cách nào để biết APK được thiết kế cho kiến ​​trúc nào?


9

Tôi đang viết một kịch bản để kiểm tra một số lượng lớn các apks. Một số chạy trên x86 và một số chạy trên cánh tay. Có cách nào tôi có thể nói những cái apks được dành cho kiến ​​trúc nào không?

Tôi đã xem qua các báo cáo về huy hiệu aapt với aapt dump badging application.apk. Đối với một số phiên bản tương thích với cánh tay tôi thấy native-code: 'armeabi-v7a'nhưng không phải cho tất cả các phiên bản đó và tôi không thấy bất kỳ dấu hiệu nào về kiến ​​trúc mà các apks tương thích x86 chạy trên.

Tôi cũng đã thử sử dụng apktool để tách apk và kiểm tra AndroidManifest.xml. Tôi cũng không thấy bất cứ điều gì liên quan đến kiến ​​trúc chip trong đó.

Có ý kiến ​​gì không?

Câu trả lời:


17

Một cách (khá thô sơ) để xem kiến ​​trúc thư viện gốc của APK được xây dựng để giải nén nó (chỉ là tệp zip) và xem thư mục libs - nếu ứng dụng chứa bất kỳ thư viện gốc nào, chúng sẽ được chia thành các thư mục con sau bên trong (với các thư viện được biên dịch bên trong chúng):

Xem Gói ứng dụng Android để biết thêm thông tin về cấu trúc của APK và nguồn của danh sách trên. Danh sách đầy đủ hơn (bao gồm MIPS64), cùng với một số thông tin về những thứ cụ thể về kiến ​​trúc, có thể được tìm thấy trên phiên bản lưu trữ của trang Quản lý ABI của Nhà phát triển Android , được chụp vào ngày 18 tháng 4 năm 2016.

Thật thú vị, nhắm mục tiêu một ABI duy nhất (trong đó một ứng dụng bao gồm các thư viện gốc được thiết kế cho một kiến ​​trúc) không nhất thiết có nghĩa là ứng dụng sẽ không chạy trên các thiết bị sử dụng các kiến ​​trúc khác. ARMv8-a, chẳng hạn, tương thích ngược với ARM và ARMv7-a, và các thiết bị Android x86 của Intel chứa một lớp dịch độc quyền cho phép mã ARM thực thi trên các thiết bị x86 (cho phép các ứng dụng chỉ ARM chạy trên nền tảng x86). Có thể tìm thấy danh sách ABI mà thiết bị Android có thể thực thi trong thuộc ro.product.cpu.abilisttính, có thể đạt được trong một vỏ (ví dụ: thông qua ứng dụng đầu cuối trên thiết bị hoặc sử dụng qua adbadb shell ) bằng cách sử dụng getproplệnh : getprop ro.product.cpu.abilist.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.