대량의 APK를 테스트하는 스크립트를 작성 중입니다. 일부는 x86에서 실행되고 일부는 팔에서 실행됩니다. 어떤 apk가 어떤 아키텍처에 사용되는지 알 수있는 방법이 있습니까?
나는 aapt badging에 관한 보고서를 살펴 보았다 aapt dump badging application.apk
. 일부 arm 호환 버전의 native-code: 'armeabi-v7a'
경우 모든 버전이 표시 되지는 않지만 x86 호환 apk가 실행되는 아키텍처에 대한 표시는 없습니다.
또한 apktool을 사용하여 apk를 분리하고 AndroidManifest.xml을 검사했습니다. 칩 아키텍처와 관련된 것도 없습니다.
어떤 아이디어?
답변
APK의 기본 라이브러리가 어떤 아키텍처로 구성되어 있는지 확인하는 한 가지 방법은 압축을 풀고 (zip 파일 일뿐) libs 폴더를 살펴 보는 것입니다. 응용 프로그램에 기본 라이브러리가 포함되어있는 경우에는 내부의 다음 하위 폴더 (이 안에 컴파일 된 라이브러리 포함) :
-
armeabi
: 이전 ARMv5 아키텍처를위한 컴파일 된 코드 (32 비트, ARMv5 지원 은 r17의 Android NDK에서 제거됨 ) -
armeabi-v7a
: ARMv7 아키텍처 용 컴파일 된 코드 (32 비트) -
arm64-v8a
: ARMv8 아키텍처 용 컴파일 된 코드 (64 비트) -
x86
: x86 아키텍처 용 컴파일 된 코드 (32 비트) -
x86_64
: x86-64 아키텍처 (64 비트) 컴파일 된 코드 -
mips
: MIPS32r1 아키텍처 및 이후 버전에 대한 컴파일 된 코드 (32 비트, MI17에 대한 지원 은 r17의 Android NDK에서 제거됨 ) -
mips64
: MIPS64r6 아키텍처를 위한 컴파일 된 코드 (32 비트, MIPS64 지원 은 r17의 Android NDK에서 제거됨 )
참조 안드로이드 응용 프로그램 패키지를 종료 더 APK의 구조에 대한 정보, 그리고 위의 목록의 소스. 아키텍처 관련 사항에 대한 일부 정보와 함께보다 완전한 (MIPS64 포함) 목록은 2016 년 4 월 18 일에 캡처 된 Android 개발자 ABI 관리 페이지 의 아카이브 된 버전에서 찾을 수 있습니다 .
흥미롭게도 하나의 단일 ABI (앱에 하나의 아키텍처 용으로 설계된 기본 라이브러리가 포함되어 있음)를 타겟팅한다고해서 반드시 다른 아키텍처를 사용하는 장치에서 앱이 실행되는 것은 아닙니다. 예를 들어 ARMv8-a는 ARM 및 ARMv7-a와 역 호환 되며 Intel의 x86 Android 장치에는 x86 장치에서 ARM 코드를 실행할 수 있는 독점 변환 계층 이 포함되어 있습니다 (ARM 전용 응용 프로그램은 x86 플랫폼에서 실행될 수 있음). Android 장치가 실행할 수있는 ABI 목록은 ro.product.cpu.abilist
속성 에서 찾을 수 있습니다.이 속성 은 다음 명령을 사용하여 셸 (예 : 장치의 터미널 앱을 통해 또는 adb 를 통해)로 얻을 수 있습니다 .adb shell
getprop
getprop ro.product.cpu.abilist