我正在对Jan Berkel的SBT Android插件进行一些黑客攻击,我想知道是否有一种方法可以将多个.dex文件合并成一个包含所有文件的.dex文件。
例如,如果我有这个:
classes1.dex
classes2.dex
classes3.dex有没有办法使用Scala (在某种可接受的时间内)将它们合并成一个包含所有3个元素并具有以下结构的classes.dex文件:
classes.dex
|-- classes1/...
|-- classes2/...
\-- classes3/...发布于 2012-06-29 18:15:51
好吧,看起来我发现了点什么。
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(Max(A,B),C)相同,前提是您编写了一个带有原型的方法
DexBuffer merge(DexBuffer dexA, DexBuffer dexB)
资料来源:
DexMerger
DexBuffer
CollisionPolicy
发布于 2018-07-27 12:24:10
我找到了一种不需要从源代码编译的方法,只需使用SDK编译的jar即可。
java -cp dx.jar com.android.dx.merge.DexMerger output.dex input1.dex input2.dex与android\sdk\build-tools\26.0.2\lib一样,dx.jar也位于Android SDK目录中。dex文件有64k方法限制,所以它不能在一个dex文件中容纳这么多内容。
发布于 2013-09-25 13:31:37
起作用了。r22使用这种方式先将android-support-v4.jar和annotations.jar预编译成dex格式。然后,Ant使用dx.bat将它们与编译后的.class文件合并。
https://stackoverflow.com/questions/11257378
复制相似问题