http://www.cocoachina.com/bbs/read.php?tid=215700
錯(cuò)誤如下。。。但是使用eclipse生成apk包時(shí)不收影響。。
-dex:
[dex] input: E:\cocos\Mine\frameworks\runtime-src\proj.android\bin\classes
[dex] input: E:\cocos\Mine\frameworks\js-bindings\cocos2d-x\cocos\platform\android\java\bin\classes.jar
[dex] Pre-Dexing E:\cocos\Mine\frameworks\js-bindings\cocos2d-x\cocos\platform\android\java\bin\classes.jar -> classes-022efb48739f8be18b60e7464733537d.jar
[dex] Converting compiled files and external libraries into E:\cocos\Mine\frameworks\runtime-src\proj.android\bin\classes.dex...
[dx]
[dx] UNEXPECTED TOP-LEVEL EXCEPTION:
[dx]
com.android.dx.util.DexException: Multiple dex files define Lorg/cocos2dx/lib/Cocos2dxAccelerometer;
[dx] at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:592)
[dx] at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:550)
[dx] at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:531)
[dx] at com.android.dx.merge.DexMerger.mergeDexBuffers(DexMerger.java:168)
[dx] at com.android.dx.merge.DexMerger.merge(DexMerger.java:186)
[dx] at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:300)
[dx] at com.android.dx.command.dexer.Main.run(Main.java:232)
[dx] at com.android.dx.command.dexer.Main.main(Main.java:174)
[dx] at com.android.dx.command.Main.main(Main.java:91)
[dx]
BUILD FAILED
E:\BST\adt-bundle-windows-x86-20130917\sdk\tools\ant\build.xml:892: The following error occurred while executing this line:
E:\BST\adt-bundle-windows-x86-20130917\sdk\tools\ant\build.xml:894: The following error occurred while executing this line:
E:\BST\adt-bundle-windows-x86-20130917\sdk\tools\ant\build.xml:906: The following error occurred while executing this line:
E:\BST\adt-bundle-windows-x86-20130917\sdk\tools\ant\build.xml:284: null returned: 2
---------------------------
查資料發(fā)現(xiàn),發(fā)現(xiàn):
cocos compile 的腳本里會(huì)自動(dòng)把“frameworks\js-bindings\cocos2d-x\cocos\platform\android\java\bin\classes.jar”(2dx的java代碼)添加到classes.dex中。
而當(dāng)用eclipse打開android項(xiàng)目時(shí),默認(rèn)是沒有引入2dx的java類的,此時(shí)如果想正常運(yùn)行android項(xiàng)目,需要引入2dx的jar包,或者引入2dx的java源碼。
如 果引入java的源碼,當(dāng)再次執(zhí)行“cocos compile”時(shí),2dx的java源碼生成的class文件,會(huì)跟默認(rèn)引入的“frameworks\js-bindings\cocos2d-x \cocos\platform\android\java\bin\classes.jar”發(fā)生沖突,會(huì)報(bào) “com.android.dx.util.DexException: Multiple dex files define ……”的錯(cuò)誤;
如 果不引入java源碼,而是直接在“Build path”中引入了jar包(位于引擎的:frameworks\js-bindings\cocos2d-x\cocos\platform \android\java\bin\下的classes.jar),此時(shí)android的項(xiàng)目不報(bào)錯(cuò)了,但是直接使用eclipse生成apk包時(shí)會(huì)發(fā) 現(xiàn)安裝到手機(jī)上無(wú)法運(yùn)行,這是因?yàn)轫?xiàng)目需要的2dx文件沒有被打入到apk中。此時(shí),可以將對(duì)應(yīng)的jar包放到android項(xiàng)目的libs目錄里 (frameworks\runtime-src\proj.android\libs\),這樣生成的apk包就可以正常運(yùn)行了。
但是,如果這樣做了,再次執(zhí)行“cocos compile”時(shí),發(fā)現(xiàn)還會(huì)報(bào)如上的錯(cuò)誤,這是因?yàn)槟_本里會(huì)默認(rèn)將libs目錄里的文件添加到classes.dex中。
綜上所述:
出現(xiàn)如上錯(cuò)誤的原因是在使用“cocos compile”腳本時(shí),2dx文件被重復(fù)添加了。
不過(guò),如果像我這樣操作,使用“cocos compile”編譯腳本(主要是因?yàn)樵撃_本會(huì)將js文件和資源拷貝的android項(xiàng)目里),使用eclipse將android項(xiàng)目打包成apk,可以忽略如上問(wèn)題的;感覺很不爽。。。。
-------------解決方法
注釋掉project.properties文件中的#android.library.reference.1=../cocos2d/cocos/platform/android/java就可以啦?。。?