2012-06-29 3 views
4

얀 버켈 (Jan Berkel)의 SBT 안드로이드 플러그인에 대한 해킹을하고 있는데, 여러 개의 .dex 파일을 합쳐서 하나의 .dex 파일에 병합하는 방법이 있다면 방황하고 있습니다. 예를 들어두 개 이상의 .dex 파일을 스칼라를 사용하여 하나의 .dex 파일로 병합하는 방법이 있습니까?

, 나는 경우이 :

classes1.dex 
classes2.dex 
classes3.dex 

그들 모두 3를 포함하고 다음을해야합니다 하나 개의 classes.dex 파일 (일부 허용 시간) 스칼라를 사용하여 병합 할 수있는 방법이 있나요 구조 :

classes.dex 
|-- classes1/... 
|-- classes2/... 
\-- classes3/... 

답변

6

그래, 내가 뭔가를 찾은 것 같습니다.

import com.android.dx.io.DexBuffer 
import com.android.dx.DexMerger 
import com.android.dx.merge.CollisionPolicy 
... 
val dexA = DexBuffer(File(classes1DexFilePath)) 
val dexB = DexBuffer(File(classes2DexFilePath)) 
val dexMerger = DexMerger(dexA, dexB, CollisionPolicy.FAIL) 
val dexM = dexMerger.merge() 
dexM.writeTo(File(classesDexFilePath)) 

누구나 확인할 수 있습니까? 이 작동하는 경우

또한, 다음 2 개 이상의 덱스 파일을 병합하면 방법을 쓰기 제공, 최대 (최대 (A, B), C)와 동일해야하는 프로토 타입
DexBuffer merge(DexBuffer dexA, DexBuffer dexB)

출처 :
DexMerger
DexBuffer
CollisionPolicy

+0

어떻게 DexBuffer, DexMerger 및 CollisionPolicy 클래스를 가져 오시겠습니까? 링크가 비어 있습니다. – soupwaylee

1

이 일하고있다. r22는이 방법을 사용하여 android-support-v4.jar 및 annotations.jar을 먼저 dex 형식으로 변환합니다. Ant는 그런 다음 dx.bat를 사용하여 컴파일 된 .class 파일과 병합합니다.