2012-06-29 66 views
4

我做的揚伯克爾的SBT的Android插件一些黑客,我是遊蕩,如果有多個.dex文件合併成一個文件.dex將包含所有這些元素的方式。有沒有辦法將兩個或更多.DEX文件合併到使用Scala的一個.DEX文件?

舉例來說,如果我有這樣的:

classes1.dex 
classes2.dex 
classes3.dex 

有沒有辦法用斯卡拉(在某些可接受的時間)到一個單一的classes.dex文件合併它們將包含他們的所有3個,並有以下結構:

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個DEX文件應該是相同的最大(MAX(A,B),C),提供你寫方法,其與原型
DexBuffer merge(DexBuffer dexA, DexBuffer dexB)

來源:
DexMerger
DexBuffer
CollisionPolicy

+0

你會如何導入DexBuffer,DexMerger和CollisionPolicy類?鏈接是空的。 – soupwaylee

1

它的工作。 R22採用這種方式先預DEX And​​roid的支持,v4.jar和annotations.jar成DEX格式。 Ant然後使用dx.bat將它們與已編譯的.class文件合併。

相關問題