有没有办法使用Scala将两个或多个.dex文件合并到一个.dex文件中?

ior*_*vic 7 merge android scala dex sbt-android-plugin

我正在对Jan Berkel的SBT Android插件进行一些攻击,如果有一种方法可以将多个.dex文件合并到一个.dex包含所有文件的文件中,我就会徘徊.

例如,如果我有这个:

classes1.dex
classes2.dex
classes3.dex
Run Code Online (Sandbox Code Playgroud)

有没有办法将Scala(在一些可接受的时间内)合并到一个classes.dex包含所有3 个文件的单个文件中,并具有以下结构:

classes.dex
|-- classes1/...
|-- classes2/...
\-- classes3/...
Run Code Online (Sandbox Code Playgroud)

ior*_*vic 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))
Run Code Online (Sandbox Code Playgroud)

任何人都可以证实这确实有效吗?

此外,如果这样做,那么合并超过2个dex文件应该与Max(Max(A,B),C)相同,前提是你编写一个带有原型的方法
DexBuffer merge(DexBuffer dexA, DexBuffer dexB)

资料来源:
DexMerger
DexBuffer
CollisionPolicy

  • 您将如何导入 DexBuffer、DexMerger 和 CollisionPolicy 类?链接是空的。 (2认同)