dex 최적화 가 Arouter 검색 경로 에 미 친 영향
질문:dex 파일 이 무엇 입 니까?dex 파일 최적화 는 또 무엇 입 니까?
dex 파일 최적화 가 프로젝트 에 어떤 문 제 를 가 져 올 지,어떻게 이런 문 제 를 해결 합 니까?
1.1 APK 의 컴 파일 과 패키지 프로 세 스
1.aapt 를 통 해 자원 파일 res 를 포장 하고 R.java,resources.arsc 와 res 파일 을 생 성 합 니 다(바 이 너 리&비 바 이 너 리 는 원래 코드 를 유지 합 니 다).
2.aidl 파일 을 처리 하고 자바 인터페이스 파일 생 성(aidl 이 없 으 면 무시)
3.자바 컴 파일 을 통 해 R.자바,자바 인터페이스 파일 을 컴 파일 하여 대응 하 는.class 파일 생 성(자바 컴 파일 러)
4.dex 명령 을 사용 하여.class 파일 과 제3자 sdk 라 이브 러 리 의.class 파일 을 classes.dex 파일 로 변환 합 니 다.
5.apkbuilder 를 통 해 aapt 에서 생 성 된 CompiledResources 와 다른 자원 파일,classes.dex 파일 을 포장 하여 apk 를 생 성 합 니 다.
6.같은 경우 Jarsigner 도 구 를 사용 하여 위의 apk 에 debug 또는 release 서명 을 할 수 있 습 니 다.
apk 의 컴 파일 과 포장 프로 세 스 그림 은 다음 과 같 습 니 다.
실제 프로젝트 개발 에서 5,6 두 단 계 는 젠 킨 스 플랫폼 을 통 해 릴 리 스 패 키 지 를 직접 생 성하 면 수 요 를 만족 시 킬 수 있다.
1.2 dex 파일 의 응용 장면
dex 파일 이 자주 사용 하 는 장면 을 살 펴 보면 APK 의 다이어트,열 복원,플러그 인 화,응용 보강,Android 역방향 공정,64K 방법 수 제한 이 유행 합 니 다.
방법 수 제한 예 를 들 어 위의 4 단계 에서 class 파일 을 dex 파일 로 변환 합 니 다.기본 값 은 dex 파일 만 생 성 합 니 다.단일 dex 파일 의 방법 수 는 65536 을 초과 해 서 는 안 됩 니 다.그렇지 않 으 면 컴 파일 이 틀 릴 수 있 습 니 다.그러나 우 리 는 App 을 개발 할 때 반드시 라 이브 러 리 를 통합 할 것 입 니 다.방법 은 모두 65536 을 초과 합 니 다.이 문 제 를 해결 하 는 방법 은 dex 를 설치 할 수 없습니다.여러 dex 로 설치 합 니 다.gradle 에 한 줄 설정 을 추가 합 니 다:multiDex Enabled true.
dex 파일 의 응용 장면 은 인터넷 에서 많이 소개 되 는데 본 고 는 소개 하지 않 습 니 다.프로젝트 에서 실제 발생 한 문 제 를 분석 하여 dex 최적화 에 대해 진일보 한 이 해 를 가진다.
2.dex 에서 vdex,odex 까지
2.1 ART 사전 최적화
ART(Android runtime)는 무엇 입 니까?가상 머 신 으로 자바 코드,앱 을 운영 합 니 다.Android 발전 사 를 참고 하면 Android 5.0 은 ART 를 Android 4.4 및 이전에 사 용 했 던 DVM(Dalvik VM)이 아 닌 기본 가상 머 신 으로 사용 합 니 다.
DVM 과 ART 와 Android 의 관 계 를 돌 이 켜 보면 자바 를 실행 하 는 몇 가지 가상 컴퓨터 의 작업 체 제 를 알 아 보 겠 습 니 다.(1)JVM:JVM 가상 컴퓨터 가 실행 하 는 것 은 자바 바이트 코드 입 니 다.자바 파일 이 JVM 으로 이동 하 는 과정 은 자바->자바 bytecode(class)->자바 bytecode(jar)입 니 다.
DVM:DVM 가상 컴퓨터 에서 실 행 된 dex 바이트 코드 를 분석 합 니 다.자바 파일 이 DVM 으로 이동 하 는 과정 은 자바->자바 by tecode(class)->dalvik by tecode(dex)입 니 다.
ART:ART 가상 머 신 은 로 컬 머 신 코드 를 실행 합 니 다.자바 파일 이 ART 로 이동 하 는 과정 은 자바->자바 bytecode(class)->dalvik bytecode(dex)->optimized android runtime machine code(oat)
이 를 통 해 알 수 있 듯 이 DVM 에서 ART 로 의 변 화 는 실제 자바 파일 에서 가상 컴퓨터 로 의 실행 코드 의 과도 이다.상대 적 으로 ART 는 oat 의 과정 이 많아 졌 고 ART 는 AOT(Ahead-Of-Time)로 컴 파일 되 었 다.응용 프로그램 이 처음 설치 되 었 을 때 바이트 코드 를 기계 코드 로 미리 컴 파일 하여 로 컬 에 존재 했다.DVM 은 JIT(Just-In-Time)로 컴 파일 되 었 고 응용 프로그램 이 실 행 될 때마다바이트 코드 는 모두 컴 파 일 러 를 통 해 즉시 기계 코드 로 바 뀌 어야 계속 실 행 될 수 있다.ART 는 DVM 에 비해 바이트 코드 를 분석 하 는 과정 을 줄 이기 때문에 실행 할 때 사용 하 는 메모리 가 줄 어 들 고 응용 프로그램의 운행 효율 을 향상 시 킵 니 다.
2.2 ART 의 운영 방식
ART 는 안 드 로 이 드 5.0 시대 에 AOT 를 사용 하면 512 M 기기 에서 시스템 을 작 동시 킬 수 있다 고 불 렸 다.안 드 로 이 드 7.0(N)부터 ART 는 AOT,실시 간(JIT)컴 파일 과 프로필 안내 형 컴 파일 을 결합 했다.
이 몇 가지 모델 은 구 글 의 Pixel 장 치 를 예 로 들 어 다음 과 같은 컴 파일 절 차 를 설정 할 수 있다.
1)애플 리 케 이 션 을 처음 설치 할 때 AOT 컴 파일 을 하지 않 습 니 다.몇 번 실행 되 었 을 때 시스템 은 이 를 번역 하고 자주 실행 하 는 방법 에 대해 JIT 컴 파일 을 합 니 다.
2)장치 가 유 휴 되 고 충전 되 었 을 때,데 몬 을 컴 파일 하 는 프로 세 스 가 실 행 됩 니 다.몇 번 의 실행 기간 에 생 성 된 프로필 에 따라 자주 사용 하 는 코드 를 AOT 컴 파일 할 수 있 습 니 다.
다음 에 응용 프로그램 을 다시 시작 할 때 설정 파일 안내 코드 를 사용 하고 실행 할 때 이미 컴 파일 된 방법 에 대해 JIT 컴 파일 을 하지 않도록 합 니 다.후속 실행 기간 에 JIT 컴 파일 을 진행 한 방법 은 설정 파일 에 추 가 됩 니 다.그리고 데 몬 을 컴 파일 하면 이 방법 들 을 AOT 컴 파일 합 니 다.
ART 는 컴 파일 러(dex2oat 도구)와 Zygote 를 시작 하기 위해 불 러 오 는 실행 시(libart.so)를 포함한다.dex2oat 도 구 는 APK 파일 을 받 아들 이 고 하나 이상 의 컴 파일 파일 파일 을 만 든 다음 실행 할 때 이 파일 을 불 러 옵 니 다.파일 의 개수,확장자,이름 은 버 전에 따라 다 르 지만 Android O 버 전에 서 는 다음 과 같은 파일 이 생 성 됩 니 다.
vdex:APK 의 압축 되 지 않 은 DEX 코드 를 포함 하고 검증 속 도 를 높이 기 위 한 메타 데이터 도 있 습 니 다.
odex:APK 에서 AOT 로 컴 파일 된 방법 코드 가 포함 되 어 있 습 니 다.
art(optional):APK 에 열 거 된 일부 문자열 과 클래스 를 포함 하 는 ART 내부 표 시 는 시작 속 도 를 빠르게 하 는 데 사 용 됩 니 다.
2.3 vdex,odex 의 역할
APK(제조 업 체 의 시스템 응용 패키지 예)의 패 키 지 를 압축 해제 하면 다음 구 조 를 볼 수 있 습 니 다.dex 파일 이 포함 되 어 있 지 않 습 니 다.
핸드폰 에 사용 되 는 디 렉 터 리 구 조 를 살 펴 보면 vdex,odex 파일 은 apk 의 모든 코드 를 포함 하고 classes.dex 파일 도 정상적으로 포 함 됩 니 다.vdex,odex 는 기계 코드 이기 때문에 볼 수 있 는 2 급 코드 로 직접 전환 할 수 없습니다.
2.4 vdex,odex 와 classes.dex 의 관계
시스템 컴 파일 된 bug 일 수도 있 고 ART 파일 을 생 성 한 후에 odex,vdex 파일 을 2 차 로 처리 한 것 일 수도 있 습 니 다.현상 은 이 렇 습 니 다.odex 에 있 는 dex 파일 을 가 져 오 려 고 합 니 다.dex 파일 이 없 음 을 알려 줍 니 다.
odex 에 dex 파일 이 있 는 지 다시 확인 하기 위해 010 Editor 를 사용 하여 다시 확인 하면 recent Files 아래 에 dex 파일 이 없 는 것 을 볼 수 있 습 니 다.
vdex 의 dex 파일 을 가 져 오 려 고 시도 해도 가 져 올 수 없습니다.
그래서 odex(또는 vdex)에 classes.dex 가 포함 되 어 있다 는 말 은 정확 하지 않다.
3.아 라 우 터 는 무엇 입 니까?
아 리 의 길 은 구성 요소 로 기능 이 매우 많 습 니 다.제 가 사용 하 는 실제 장면 은 페이지 를 뛰 어 넘 는 것 입 니 다.구체 적 인 기능 은 아 리 정상 회의 에서arouter 소개를 참고 할 수 있다.
정상 회의 에서 언급 한 점 을 참고 해 밑받침 으로 삼 는 것 도 우리 가 다음 에 이야기 할 점 이다."마지막 으로 나 누고 싶 은 것 은 아 라 우 터 의 미래 개발 계획 이다.앞으로 ARouter 는 플러그 인 화 를 지원 하고 매 핑 관계 문서 생 성 을 지원 할 것 입 니 다.플러그 인 화 는 현재 많은 대형 앱 에서 사용 할 수 있 는 기술 방안 이기 때문에 많은 Dex 와 기능 이 앱 에 동적 으로 전송 되 는데 이런 상황 에서 모든 Dex 파일 을 찾 을 수 없습니다.즉,불 러 오지 않 은 Dex 의 경우 안의 매 핑 관 계 는 넘 어 갈 수 없습니다.따라서 Dex 파일 위치 가 바 뀌 면 일반적인 방안 은 Dex 를 찾 을 수 없고 맵 파일 초기 화 를 실현 할 수 없 으 며 이 부분 은 다음 버 전에 서 지 원 됩 니 다."
아 리 가 식별 할 수 있 는 arouter 경 로 는 다음 과 같다.
다시 말 하면 arouter 는 dex 파일 의 위치 변화 나 경로 변화 로 인해 찾 을 수 없 을 수도 있 습 니 다.
구덩이
4.1 현상
2.4 에서 odex 파일 에 dex 가 포함 되 어 있 지 않 고 arouter 검색 경 로 는 그룹 별로 불 러 오 는 규칙 에 따라 끝까지 요약 합 니 다.사실은 class 파일 을 찾 는 것 입 니 다.다음 그림 과 같 습 니 다.
한편,class 파일 의 정 보 는 dex 파일 에 기록 되 어 있 기 때문에 이상 이 발생 했 습 니 다.arouter 를 사용 하여 페이지 를 이동 할 때 classNotFound exception 이 나타 납 니 다.
4.2 해결 방안
해결 방안 을 찾 으 려 면 odex 가 arouter 경로 에 영향 을 주지 않도록 하 는 방법 을 알 아야 합 니 다.이 부분 은 관련 경험 이 없 을 때 해결 방안 을 찾기 어렵 고 조금 만 찾 을 수 있 습 니 다.ART 의 작업 원 리 를 검색 하여 글<설정 ART>을 찾 습 니 다.그 중에서 글 은 다음 과 같 습 니 다.
그 러 니까 LOCAL 설정 을 통 해DEX_PREOPT 의 속성 은 odex 의 최 적 화 를 방지 할 수 있 기 때문에Android.mk에서 이 속성 을 설정 한 곳 을 찾 아 LOCAL 을 설정 합 니 다.DEX_PREOPT := nostripping。
컴 파일 할 때 dex 최적화(odex 파일 생 성)를 할 뿐만 아니 라 apk 에서 dex 를 분리 하지 않 습 니 다.그래서 아래 의 apk 생 성 후의 경 로 를 비교 한 다음 에 dex 가 박리 되 지 않 는 경 로 를 보고 아래 에 classes.dex 파일 이 포함 되 어 있 습 니 다.
jadx 를 사용 하여 이 classes.dex 파일 을 열 었 는데 arouter 의 경로 파일 이 여기에 있 는 것 을 발 견 했 습 니 다.그래서 arouter 의 이동 이 정상 적 이 고 이상 이 나타 나 지 않 습 니 다.
총화
odex 는 이러한 시스템 이 하 는 일 을 최적화 시 키 면 예상 치 못 한 결과 가 나타 날 수 있 습 니 다.만약 에 업 체 의 응용 을 책임 지면 프로젝트 를 내장 해 야 합 니 다.이 럴 때 주의해 야 합 니 다.응용 에 제3자 프레임 워 크 가 포함 되 어 있 을 때 경로,자원 의 인용 에 문제 가 없 음 을 주의해 야 합 니 다.정상 적 인 상황 에서 odex 파일 은 당신 의 경로 에 영향 을 주지 않 지만.그러나 odex 에 실 수 를 할 수 밖 에 없습니다.odex 에 있어 서 안의 자원 은 저장 할 필요 가 없 기 때문에 art 파일 을 생 성하 여 실행 할 수 있 습 니 다.아 트 의 설정 을 합 리 적 으로 사용 하면 많은 문 제 를 해결 하 는 데 도움 이 됩 니 다.
이상 은 dex 최적화 가 Arouter 검색 경로 에 미 친 영향 에 대한 상세 한 내용 입 니 다.dex 최적화 Arouter 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.