首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法使用Scala将两个或更多的.dex文件合并成一个.dex文件?

有没有办法使用Scala将两个或更多的.dex文件合并成一个.dex文件?
EN

Stack Overflow用户
提问于 2012-06-29 14:56:55
回答 4查看 5.2K关注 0票数 8

我正在对Jan Berkel的SBT Android插件进行一些黑客攻击,我想知道是否有一种方法可以将多个.dex文件合并成一个包含所有文件的.dex文件。

例如,如果我有这个:

代码语言:javascript
复制
classes1.dex
classes2.dex
classes3.dex

有没有办法使用Scala (在某种可接受的时间内)将它们合并成一个包含所有3个元素并具有以下结构的classes.dex文件:

代码语言:javascript
复制
classes.dex
|-- classes1/...
|-- classes2/...
\-- classes3/...
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-29 18:15:51

好吧,看起来我发现了点什么。

代码语言:javascript
复制
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

票数 6
EN

Stack Overflow用户

发布于 2018-07-27 12:24:10

我找到了一种不需要从源代码编译的方法,只需使用SDK编译的jar即可。

代码语言:javascript
复制
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文件中容纳这么多内容。

票数 2
EN

Stack Overflow用户

发布于 2013-09-25 13:31:37

起作用了。r22使用这种方式先将android-support-v4.jar和annotations.jar预编译成dex格式。然后,Ant使用dx.bat将它们与编译后的.class文件合并。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11257378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档