博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AS问题解决系列1—Unable to execute DX错误
阅读量:4966 次
发布时间:2019-06-12

本文共 1565 字,大约阅读时间需要 5 分钟。

 

http://my.oschina.net/1pei/blog/478968

摘要 在将一个开源Android代码import到Android Studio 1.2.2中时,解决了编译期间出现的“Unable to execute DX(Multiple dex files define)”问题,并学习了DX工具在应用程序编译期间所起的作用。

    今天在将一个开源Android代码import到Android Studio 1.2.2中,在编译期间出现一个“Unable to execute DX”的编译错误,错误类型是“Multiple dex files define”,具体错误信息见下图:

    原因:该project包含好几个module,在源代码被import到Android Studio时,在根目录下自动生成了.idea/libraries文件夹,其中有两个xml文件,

    

     每个xml文件中都包含有下面类似的name为libraryTable的component:

    

   这两个xml的目的就是指定项目需要包含的sdk或libs中的jar包。当项目在build的时候,两个相同的jar都被打包到dex文件中,编译器搞不定,就出了这么个错误了。

   解决的办法也比较简单:将其中一个xml文件删除,只保留一个xml文件,这样项目build就顺利通过了。

 

   后记:根据[3],这个.idea目录下的文件是用于保存IntelliJ IDEA的设置,当设置修改后这里的文件应当会有变化。 

   那么,什么是DX呢?参考[4]以及本地Android Studio安装路径有以下总结:

   DX工具将Java class文件转换为一个.dex (Dalvik Executable)文件。

   dx.jar工具所在的目录:Android/sdk/build-tools/22.0.1/lib

    dx.bat所在的目录:Android/sdk/build-tools/22.0.1/lib

 

    DX工具在Android中是做什么用的?

    Java源文件可通过Java编译器转换为Java class文件。

    dx工具将Java class文件转换为一个.dex (Dalvik Executable)文件。应用程序的所有class文件都放在这个.dex文件中,在转换过程中class文件中的冗余信息被优化掉。例如,在不同的class文件中如果有相同的String,那么.dex文件只包含这个String的一个引用。因此.dex文件要比对应的class文件要小。

    .dex文件与Android项目中的资源,例如图片资源,XML文件等, 被打包到一个.apk (Android Package)文件中。

    Android编译过程可参见下图:

 

   

 

   上图中的aapt (Android Asset Packaging Tool) 将创建apk, 最终的.apk文件包含应用程序执行所有必要的数据,可通过ADB(Android Device Bridge)工具来部署,见下图。

   

 

参考资料

[1] Android项目Build报错:Unable to execute DX, 

[2] Unable to execute DX(Multiple dex files define), 

[3] Managing Projects Overview, 

[4] Android dx tool, 

[5] Building and Running Overview, http://developer.android.com/intl/zh-cn/tools/building/index.html

转载于:https://www.cnblogs.com/exmyth/p/5326069.html

你可能感兴趣的文章
Hexo中添加emoji表情
查看>>
setsocketopt() usage
查看>>
Xml处理工具类(Jdom)
查看>>
返回文件路径中的想要的值
查看>>
hdu1502 , Regular Words, dp,高精度加法
查看>>
maven常用配置信息和常量
查看>>
20120227_CET6
查看>>
SpringBoot在idea中的热部署配置
查看>>
MyEclipse连接SQL Server 2008数据库的操作方法
查看>>
SqlCel 和MySQL for Excel在批量处理数据上的优劣
查看>>
leetcode【67】-Bulb Switcher
查看>>
JS验证图片格式和大小并预览
查看>>
调节心态的十种做法
查看>>
laravel5.2 移植到新服务器上除了“/”路由 ,其它路由对应的页面显示报404错误(Object not found!)———新装的LAMP没有加载Rewrite模块...
查看>>
潜罪犯
查看>>
编写高质量代码--改善python程序的建议(六)
查看>>
windows xp 中的administrator帐户不在用户登录内怎么解决?
查看>>
[spfa] Jzoj P4722 跳楼机
查看>>
代码审计入门后审计技巧
查看>>
Linux-Rsync服务器/客户端搭建实战
查看>>