APK가 어떤 아키텍처를 사용하는지 알려면 어떻게해야합니까? aapt badging에 관한 보고서를 살펴 보았다 aapt

대량의 APK를 테스트하는 스크립트를 작성 중입니다. 일부는 x86에서 실행되고 일부는 팔에서 실행됩니다. 어떤 apk가 어떤 아키텍처에 사용되는지 알 수있는 방법이 있습니까?

나는 aapt badging에 관한 보고서를 살펴 보았다 aapt dump badging application.apk. 일부 arm 호환 버전의 native-code: 'armeabi-v7a'경우 모든 버전이 표시 되지는 않지만 x86 호환 apk가 실행되는 아키텍처에 대한 표시는 없습니다.

또한 apktool을 사용하여 apk를 분리하고 AndroidManifest.xml을 검사했습니다. 칩 아키텍처와 관련된 것도 없습니다.

어떤 아이디어?



답변

APK의 기본 라이브러리가 어떤 아키텍처로 구성되어 있는지 확인하는 한 가지 방법은 압축을 풀고 (zip 파일 일뿐) libs 폴더를 살펴 보는 것입니다. 응용 프로그램에 기본 라이브러리가 포함되어있는 경우에는 내부의 다음 하위 폴더 (이 안에 컴파일 된 라이브러리 포함) :

참조 안드로이드 응용 프로그램 패키지를 종료 더 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 shellgetpropgetprop ro.product.cpu.abilist