왜 Dalvik Cache를 삭제해야합니까?


46

사용자 지정 ROM을 업데이트 할 때는 항상 Dalvik 캐시지우 라는 지침이 있습니다. 이것이 꼭 필요한 이유는 없습니다.

시스템이 부팅되는 동안 로그 캣을 보면서 앱이 변경되면 dex파일이 무효화 된 다음 다시 생성 된다는 것을 분명히 알 수 있습니다 . 그러나 여전히 내가 이것을 언급 할 때 나는 침묵에 직면했다. 일부 ROM 개발자 조차도이 사실을 인식하지 못하는 것처럼 다른 모든 사람들이하기 때문에이 작업을 수행하고 있습니다.

따라서 질문 :

  • 부팅 중에 Dalvik 파일이 무효화되지 않은 Android 버전이 있습니까?
  • 시스템이해야 할 일을하도록하는 대신, 스스로이 작업을 수행 할 때 어떤 이점이 있습니까?

이상적인 답변은 관련 코드에 대한 참조를 포함하므로 다음에 이것이 올 때 참조 할 것입니다.

답변:


43

질문에 대답하려면 :

  • 부팅시 Dalvik이 무효화되지 않은 Android 버전을 인식하지 못합니다. 어쩌면 초기 버전 1.0에는 Eclair, Froyo, Gingerbread, Ice Cream Sandwich를 겪었을 수도 있습니다. 소스 트리를 살펴보고 CupCake 또는 Donut (각각 1.5 및 1.6)으로 리베이스해야합니다.

  • 자세한 이유 :)

와이프 캐시를 사용해야 하는 이유는 시스템 APK를 포함한 모든 APK에 덱스 파일이 첨부되어 있기 때문입니다. ROM이 처음 부팅 될 때 Android의 Dalvik은 이러한 APK를 각각 하나씩 통과하여 추출합니다. dex 파일을 캐시 /data/dalvik-cache에 넣고 앱 자체의 실행 속도를 높입니다.

대부분의 ROM에는 odex 'apk가 있으며 캐시는 외부 파일로 apk 자체에 번들로 제공됩니다.

많은 커스텀 ROM modders는 apk deodex 'd를 가질 것입니다 . 이는 dex 파일이 apk를 테마 / 수정하기 쉽도록 대체하고 다시 패키지한다는 의미입니다.

사용자 정의 ROM을 플래시하고 캐시를 지우지 않으면 최신 사용자 정의 ROM의 APK에는 다른 dex 파일이 첨부되어 있으며 Dalvik이이를 통과하면 디렉토리에있는 기존의 캐시 된 dex 파일을보고 앱을 건너 뛰면 강제 종료 또는 ANR (Application Not Responding)이 보장됩니다.

ClockWorkMod Recovery를 사용하고 데이터 지우기 를 선택 하면 데이터 자체가 손실되지 않으며 예, 앱과 관련된 모든 설정이 깨끗하게 지워 /data/app집니다.

당신이 할 수 있도록 캐시를 닦아 하지만 데이터를 닦아 효과적으로 수행 무엇, 그것은 설정이 유지가있는 장소에 새로운 APK가에 슬롯된다. 불안정한 / 테스트 ROM 빌드가 플래시되고 설정이 캐시 지우기로 유지되는 CyanogenMod nightlies의 경우 매우 일반적인 시나리오입니다. 마일리지는 시장에서 다운로드 한 앱에 따라 다릅니다 (버전 범프에 따라 설정이 변경되었을 수 있음).

최상의 결과를 얻으 려면 앱 자체 내에서 무결성을 유지하고 프로그램 오류가 없도록 Wipe DataWipe Cache 를 모두 수행하는 것이 좋습니다 .

그렇습니다. 부팅 시간은 느리지 만 초기 순간은 한 번입니다. 그 후에는 더 빨리 부팅됩니다. 간단히 말해서 CWM을 통해 캐시 자체를 명시 적으로 닦아내는 것은 실제로 속도를 높이고 이전 버전의 잔해가 없어 질 수 있도록 도와줍니다 (이 단계에서는 모든 공정성에서 귀하의 질문을 실제로 실현하고 있습니다. 안드로이드가 새로운 ROM을 플래시 할 때 부팅시 캐시 자체의 무효화를 수행하지 않는 것을 보았습니다 ..)

소스 루크를 진지하게 사용하십시오 ! :디

frameworks/base/core/java/com/android/internal/os/ZygoteInit.java각 apk 런타임의 부팅 코드입니다. dalvik디렉토리 트리에있는 네이티브 C 코드와 상호 작용하여 특정 칩셋 명령어가 포함되어 apk에서 네이티브 CPU 명령어 세트로 바이트 코드를 해석합니다. ARMv6은 ARMv5의 해킹 된 버전 (Eclair 이전의 이전 Android 버전에서 원래 칩셋 임)이므로 Google의 AOSP 소스에 ARMv6이 표시되지 않습니다. CyanogenMod는 ARMv6을 소스에 포함합니다.


이 논의를 위해 공식 CM7 릴리스에 대해 이야기한다고 가정 해 봅시다. 내가 달빅 캐시를 지운 적이 없으며 그렇게함으로써 해결 될 문제를 경험 한 적이 없다는 말부터 시작하겠습니다. 파일이 중복되어 있지 않기 때문에 여러 개의 (o) 덱스 파일이 존재할 수 없으므로 부팅시 이전 파일이 새로 생성 된 파일로 대체됩니다. 아 그리고 정말로 큰 문제라면 개발자가 이것을 업데이터 스크립트에 추가하지 않는 이유는 무엇입니까? 감사합니다.
RR

1
실제로 업데이트 프로그램 스크립트에 명시 적으로 넣을 수는 있지만 "아아, 내가 설정 / 데이터를 잃어 버렸고"CM이 아마도 불꽃 질문 / 답변으로 화상을 입지 않기를 원했기 때문에 플래시 할 때 다른 사람들을 화나게 할 수 있습니다. CM의 새 릴리스를 플래시 할 때 왜 캐시를 지우셨습니까? " -CM의 책임으로 인해 최종 사용자에게 해당 옵션이 제공 되었습니까? 다시 지우지 않고 번쩍이고 포럼에서 "내 응용 프로그램이 충돌하는 경우"와 같은 소리를 내면 CM이 돌아 서서 "지우셨습니까?"라고 말할 수 있습니다.
t0mm13b

내 말은하지 않았다 data/data하지만 data\dalvik-cache. 아마도 시스템 일 것입니다.
RR

1
재고 AOSP ROM이 복잡해졌으며 CM은 deodex를 사용하도록 빌드 시스템을 수정했습니다 .... 그냥 말하기;)
t0mm13b

2
자세한 답변 t0mm13b에 감사드립니다. 글쎄요 .. 게시 된 질문에 대한 간단한 대답은 "아니요. 부팅 할 때 기본적으로 지워집니다"입니다. 옳은?
GollyJer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.