Android의 .dex 파일이란 무엇입니까?


193

덱스 파일 에 관한 질문이 있습니다

  • dex안드로이드 에서 파일 이란 무엇입니까 ?
  • Android에서 dex는 어떻게 작동합니까?
  • Android 앱을 디버깅하는 데 어떻게 사용됩니까?
  • Java 클래스 파일과 비슷합니까?

나는 구체적인 정보가 필요하며 이것에 대해 도와주십시오. 실제 사례는 환영합니다!


plz이 링크를 보았습니다 stackoverflow.com/questions/1249973/…
Gensheriff

답변:


226

.dex 파일 정보 :

Dalvik Virtual Machine(Android 시스템 에서 가장 중요한 기능)의 가장 주목할만한 기능 중 하나는 Java 바이트 코드를 사용하지 않는다는 것입니다. 대신 DEX라는 자체 형식이 도입되었으며 바이트 코드 명령어도 Java 바이트 코드 명령어와 동일하지 않습니다.

Compiled Android application code file.

Android 프로그램은 .dex(Dalvik Executable) 파일 로 컴파일되어 .apk장치 의 단일 파일 로 압축됩니다 . .dex파일은 Java 프로그래밍 언어로 작성된 컴파일 된 응용 프로그램을 자동으로 번역하여 작성할 수 있습니다.

덱스 파일 형식 :

 1. File Header
 2. String Table
 3. Class List
 4. Field Table
 5. Method Table
 6. Class Definition Table
 7. Field List
 8. Method List
 9. Code Header
10. Local Variable List

Android에는 Dalvik Executable Format( .dex 파일) 에 대한 설명서가 있습니다 . 공식 문서에서 더 자세한 내용을 확인할 수 있습니다 : Dex File Format

.dex 파일은 Java 클래스 파일과 유사하지만 이전 Android 버전의 Dalkvik Virtual Machine (DVM)에서 실행되었으며 최신 Android 버전의 경우 ART를 사용하여 디바이스에서 설치시 원시 코드로 컴파일되었습니다.

android-sdk에서 제공되는 도구를 decompile사용하여 .dex 할 수 있습니다 dexdump.

일부도 있습니다 리버스 엔지니어링 기술 을 만들 jar file거나 java class fileA로부터 .dex파일.


내 jar 파일에는 자산 폴더에 일부 XML이 포함되어 있습니다. 나는 이것이 .dex의 일부가되기를 원한다. 어떻게 구현할 것인가?
AndroidGuy

@AndroidGuy-Jar 파일에는 안드로이드 라이브러리 패키지를 사용해야하는 안드로이드 리소스 패키지 (/ 자산)가 포함되어 있지 않습니다.
user370305

Android Lollipop의 ART에서 어떻게 작동합니까? 어떤 파일이 어떤 경로에 사용됩니까? 일부는 더 많은 공간이 필요하다고 말했다. 사실인가요? 그렇다면 어떻게됩니까? 내 말은, 네이티브 코드는 항상 바이트 코드보다 훨씬 작고 dex 파일은 작동 방식면에서 바이트 코드와 비슷합니다.
Android 개발자

주목해야 할 중요한 점 dexdump은 디 컴파일러가 아니라 디스어셈블러라는 것입니다.
genghiskhan

90
.dex file

컴파일 된 Android 애플리케이션 코드 파일

Android 프로그램은 .dex (Dalvik Executable) 파일로 컴파일되어 장치의 단일 .apk 파일로 압축됩니다. .dex 파일은 Java 프로그래밍 언어로 작성된 컴파일 된 응용 프로그램을 번역하여 Android에서 자동으로 만들 수 있습니다.


2
내 jar 파일에는 자산 폴더에 일부 XML이 포함되어 있습니다. 나는 이것이 .dex의 일부가되기를 원한다. 어떻게 구현할 것인가?
AndroidGuy

87

dex file은 Dalvik VM에서 실행되는 파일입니다.

Dalvik VM에는 성능 최적화, 검증 및 모니터링을위한 여러 기능이 포함되어 있으며 그 중 하나는 DEX (Dalvik Executable) 입니다.

Java 소스 코드는 Java 컴파일러에 의해 .class파일 로 컴파일됩니다 . 그런 다음 dxAndroid SDK의 일부인 (dexer) 도구는 .class파일을 DEXDalvik 바이트 코드가 포함 된 파일 형식으로 처리합니다 . 이 dx도구는 클래스에있는 모든 중복 정보를 제거합니다. 에서 DEX모든 응용 프로그램의 클래스는 하나 개의 파일로 압축된다. 다음 표는 JVM jar 파일의 코드 크기와 dex도구가 처리 한 파일의 비교를 제공합니다 .

이 표는 시스템 라이브러리, 웹 브라우저 응용 프로그램 및 범용 응용 프로그램 (알람 시계 응용 프로그램)의 코드 크기를 비교합니다. 모든 경우에 dex 도구는 코드 크기를 50 % 이상 줄였습니다.

여기에 이미지 설명을 입력하십시오

표준 Java 환경에서 Java 코드의 각 클래스는 하나의 .class파일이됩니다. 즉, Java 소스 코드 파일에 하나의 공용 클래스와 두 개의 익명 클래스가 있으면 이벤트 처리에 대해 말하면 Java 컴파일러는 총 세 개의 .class파일 을 작성 합니다.

컴파일 단계는 Android 플랫폼에서 동일하므로 여러 .class파일 이 생성됩니다 . 그러나 .class파일이 생성 된 후에 는“dx”도구를 사용하여 모든 .class파일을 단일 .dex또는 Dalvik Executable 파일로 변환 합니다. 그것은이다 .dex달빅 VM에서 실행되는 파일. .dex파일은 메모리 사용을 위해 최적화되었으며, 디자인은 주로 데이터의 공유에 의해 구동된다.


18
좋은 정보. 한 가지 지적 할 것이 있습니다. 메소드 호출 명령 수 한계로 인해 여러 개의 dex 파일이있는 경우가 있습니다. 이 제한은 65k 방법입니다. 이 경우 코드는 단일 파일 안에 있지 않지만 2 개 이상이지만 다른 모든 것은 여전히 ​​적용됩니다. 또한 동적 클래스 로딩이 가능하기 때문에 파일에서 코드를 (다시 dexed 형식으로)로드 할 수 있으므로 코드는 여러 dex 파일 안에 있습니다.
Igor Čordaš
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.