-
Android 64비트 대응하기 - ARM , X86, MIPSAndroid 2019. 4. 8. 15:08
안드로이드를 64비트를 대응을 해야한다는 소식을 보면서 어떻게 대응을 하여야하는 것인지를 찾아보던 중 64비트를 지원해줘야하는 cpu에는 ARM, X86, MIPS 3가지가 있었고 이것들 차이는 무엇일까... 찾아보게 되었다.
이것들은 무엇이고 내가 지원하는 기기들은 무엇일지...
처음에는 X86에 대해서는 Intel cpu라 하여 윈도우 폰들이다. 그래서 지원을 할 필요가 없는건가? 라는 생각도 하였다. 그래도 앱을 서비스하는데 리스크를 안고서 이건 지원안해 라고 할 수 없어서.. 조심스럽게 여러 블로그들을 찾아보게 되었다.
우선 안드로이드 디바이스는 제소사의 사정에 따라서 원하는 CPU를 골라 쓸수 있다. 가장 대표적인 ARM을 비롯하여 X86, MIPS를 지원한다.
1990년 초부터 X86/MIPS 등과 같은 고성능을 지향했던 업체들과 다르게 일찌감치 저전력/고효율을 목표 한 기술 시장에 뛰어들어 현재 ARM사의 CPU가 저전력 고효율의 대명사가 되어 2010년 이후로는 임베디드 시장과 모바일 시장의 주류가 되었다.
ARM 32비트 - 아이폰3, 아이폰4 , 아이폰5, 갤럭시4,등등
ARM 64비트 - 아이폰5, 아이폰6, 갤럭시S6, 갤럭시S7 등등
아이폰과 갤럭시 시리즈 모두 ARM 칩셋을 사용하고 있는걸 보면 ARM이 모바일시장을 장악하고 있는걸 알 수 있다. 많이들 듣고있는 엑시노스, 스냅드래곤 모두 ARM기반의 CPU이다.
ARM이 대부분의 시장을 장악하고있지만 X86, MIPS 역시 지속적으로 X86, MIPS의 CPU를 탑재한 스마트폰이 나오고 있어 이들 폰들 역시 지원해주어야 할 것이다.
Android 플랫폼 ABI 지원
안드로이드 시스템은 런타임에 어떤 ABI를 지원하는지 알게된다.
1순위. 사용기기에 대한 Primary ABI
2순위. 다른 ABI에 해당되는 Secondary ABI
시스템이 설치 시 패키지로부터 최상의 기계어 코드를 추출하도록 한다.
최상의 성능을 위해서는 Primary ABI에 대해 직접 컴파일해야한다. 예를들어 전형적인 ARMv5TE 기반의 기기는 Primary ABI인 armeabi만 정의한다. 반면에 전형적인 ARMv7 기반의 기기는 Primary ABI를 armeabi-v7a로, Secondary ABI를 armeabi로 정의한다. 이들 각각에 대해 생성되는 애플리케이션 네이티브 바이너리를 실행할 수 있기 때문이다.
64비트 기기는 32비트 버전도 지원한다. arm64-v8a기기를 예로 들면, 이 기기는 armeabi와 armeabi-v7a 코드도 실행할 수 있다. 다만 앱이 arm64-v8a를 대상으로 하는 경우 32비트의 기기보다 64비트 기기에서 더욱 잘 수행된다.
많은 X86 기반 기기는 armeabi-v7a 및 armeabi NDK 바이너리도 실행할 수 있습니다. 이런 기기의 경우 Primary ABI가 X86, Secondary ABI는 armeabi-v7a가 된다.
설치 시 네이티브 코드의 자동 압축 풀기
앱 설치시, 패키지 매니저 서비스는 APK를 스캔하여, shared lib를 찾는다 처음에는 primary ABI를 대입하여 찾는다.
lib/<primary-abi>/lib<name>.so
그리고 primary ABI를 찾지못하면 secondary ABI를 대입해서 찾는다.
lib/<primary-abi>/lib<name>.so
위 양식의 라이브러리가 발견되면 패키지 관리자는 data디텍토리(data/data/<package_name>/lib/)에 있는 /lib/lib<name>.so로 복사한다. 공유객체가 파일이 하나도 없는 경우 애플리케이션이 빌드되고 설치되지만 런타임에 다운됩니다.
참고
https://developer.android.com/ndk/guides/abis.html
'Android' 카테고리의 다른 글
안드로이드 마시멜로우(Android 6.0) 권한요청 - System Dialog( 1/2 ) (0) 2019.04.10 안드로이드 스튜디오 Failed to maintain projects LRU cache 에러 (0) 2019.04.09 Android 64비트 지원 대응하기 (0) 2019.04.08 Android 카메라 사진 캐시영역(Cache-path) 저장하기 (0) 2019.04.05 Android FCM 구현하기(GCM에서 전환) - 1/2 FCM콘솔 (0) 2019.04.01 댓글