Android가 설치된 앱의 APK 파일을 유지하는 이유는 무엇입니까?


31

Android는 설치된 사용자 앱의 APK 파일을 /data/app디렉토리에, 시스템 앱을 /system/app디렉토리에 유지합니다.

Android가 앱을 시작할 때마다 APK 파일에서 덱스 파일을 추출한다는 의미입니까? 그렇지 않은 경우 APK 파일을 안전하게 삭제하고 앱을 계속 실행할 수 있습니까?

답변:


43

안드로이드 APK는 일반적으로 이러한 것들을 포함합니다.

assets/
lib/
META-INF/
res/
AndroidManifest.xml
classes.dex

설치시 APK 파일은에 복사되고 /data/app, 파일 classes.dex을 실행 dex2oat하여 추출되고 "최적화"됩니다 (Android 5 이상 lib/에서도 추출 됨). 최적화 결과가 저장 /data/dalvik-cache/되므로 설치 또는 업데이트 당 한 번만 앱을 최적화해야합니다 . 다른 모든 것은 APK 안에 유지됩니다. 첫 번째 대답은 매우 분명하다 그래서 : 같은 것들 assetsres그이 앱을 제공해야합니다에 필요한 것, 그들은 APK 내부에 있습니다. APK 파일은 지원 목적으로 보관됩니다. 당신은 APK를 삭제하면 응용 프로그램은 확실히 전혀 시작되지 않습니다. (앱 : 자산은 어디에 있습니까?)

둘째, Google Play 아주 오래 전에 "델타 업데이트"에 대한 지원을 추가했습니다 . 델타 업데이트 절차에서는 이전 패키지와 새 패키지의 차이가 계산됩니다. 그런 다음 GP는 "델타"를 다운로드하고 원본 APK에 변경 사항을 적용하여 업데이트 된 APK를 생성하여 다운로드 크기를 줄입니다.

APK는 항상 서명됩니다. 이로 인해 패키지가 악의적으로 수정되는 것을 막을 수 있습니다. 변경된 사항이나 바이러스의 주입 여부를 모르고 수정 된 앱을 설치하고 싶지는 않습니다. META-INF/내부의 APK는이 목적을 위해 사용할 수 있습니다. 비공식 변경으로 서명이 일치하지 않으며 Android 시스템은 수정 된 앱 설치를 거부합니다.

또한 Android OS를 업데이트하면 모든 dex 파일이 다시 "최적화"되므로 하나씩 다시 설치할 필요가 없습니다. 위에서 말했듯이 최적화에는 classes.dex원본 패키지의 파일이 필요 합니다.


5
Google Play 스토어의 델타 업데이트 기능은 APK가 설치된 버전과 업데이트 된 버전 사이의 델타 및 후속 패치를 계산하도록하는 데 달려 있습니다. 또한 APK는 압축되어 공간을 절약합니다 (누구나 ZipAlign을 기억하십니까?)
Tamoghna Chowdhury

@Tamoghna Space는 실제로 문제가되지 않습니다. 그렇지 않으면 Android 5 이상은 lib/APK에서 추출되지 않았고 iOS는 IPA에서 모든 것을 추출하지 않았습니다. 기본 무결성 검사를위한 것입니다.
iBug

실행 파일의 압축률은 거의 없습니다. 공간 절약은 추출되지 않은 이진화 된 XML 파일과 같은 압축 된 리소스와 관련이 있습니다. 또한 ZipAlign-최적화 된 (워드 정렬 된) 압축 파일에서 리소스 액세스가 다소 빠를 수 있습니다.
Tamoghna Chowdhury

1
따라서 html 및 js 파일과 같은 자산 파일은 APK에서 안드로이드 파일 시스템의 특정 위치로 복사되지 않습니까?
user1788736

1
@ user1788736 예. 그들은 APK에 남아 있습니다.
iBug
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.