最近的cocos-Lua项目,打包android apk的时候老是失败,主要是dex过程中报错以下错误:

-dex:
      [dex] input: D:\projecty\projects\MonsterRun\trunk\MonsterRun\frameworks\runtime-src\proj.android\bin\classes
      [dex] input: D:\projecty\projects\MonsterRun\trunk\MonsterRun\frameworks\cocos2d-x\cocos\platform\android\java\bin\classes.jar
      [dex] input: D:\projecty\projects\MonsterRun\trunk\MonsterRun\frameworks\runtime-src\proj.android\libs\SDK__fat.jar
      [dex] Pre-Dexing D:\projecty\projects\MonsterRun\trunk\MonsterRun\frameworks\cocos2d-x\cocos\platform\android\java\bin\classes.jar -> classes-94a403c7f61e5d2c23fce32f778410b5.jar
      [dex] Pre-Dexing D:\projecty\projects\MonsterRun\trunk\MonsterRun\frameworks\runtime-src\proj.android\libs\SDK__fat.jar -> SDK__fat-93bf3f9d975b6198d3f96d98441a23d2.jar
       [dx] 
       [dx] trouble processing:
       [dx] bad class file magic (cafebabe) or version (0033.0000)
       [dx] ...while parsing com/squareup/okhttp/Address.class
       [dx] ...while processing com/squareup/okhttp/Address.class
       [dx] 
       [dx] trouble processing:
       [dx] bad class file magic (cafebabe) or version (0033.0000)
       [dx] ...while parsing com/squareup/okhttp/Authenticator.class
       [dx] ...while processing com/squareup/okhttp/Authenticator.class
       [dx] 
       [dx] trouble processing:
       [dx] bad class file magic (cafebabe) or version (0033.0000)
       [dx] ...while parsing com/squareup/okhttp/Cache$1.class
       [dx] ...while processing com/squareup/okhttp/Cache$1.class


我看到,全是okhttp的报错,那么就需要翻看okhttp首页看看,它对jdk是否有所要求。

OkHttp supports Android 2.3 and above. For Java,the minimum requirement is 1.7.


所以我认为一定是因为java jdk的版本导致的,因为我在导出sdk的jar包的时候,有指定了jdk的版本,而cocosIde的项目也有设置jdk的选项。

我在打包sdkjar包中的混淆中指定了javac编译java文件的版本:



而在cocosIDE中也有设置jdk的环境变量:


由此我就猜想,可能与java的jdk的版本有关。因为java的jdk版本对工程的使用往往都出现很多坑,例如在eclipse中用jdk7打的jar包,可能无法被在jdk6环境下的eclipse加载。因此,我把打jar包的命令升至1.7,重新打jar包。但是,问题依然存在。


jdk一致之后,问题仍然存在。问题一定是与dx命令有关的东西了。什么与dx命令有关呢?dx命令在哪里?所以我们有必要了解cocosIDE对android的apk的打包过程何时使用了dx,怎么使用dx。


1.回顾整个打包过程。

在Cocos-IDE的系统输出窗口可以到整个apk的打包过程,首先先是ndk-build打包so文件,然后就是Lua文件编译,再之后就进行android打包。

从中,我们看到在Lua文件编译完成之后,进行了android apk的打包。

其中打包命令在build.xml中。为了确定打包命令在其中,我们在cmd命令行中cd到该目录下,运行ant. 结果cmd中的输出内容和系统输出窗口的内容一致,证明该build文件是我们android打包apk的命令文件。


2.打开文件,找到打包的命令

打开对应的android工程下的build.xml,看到以下一句命令:

主要的打包命令是依赖了androidsdk文件夹下面的tools里面的ant命令。


3. 接着打开tools/ant/build.xml

终于,找到了cocos-IDE中打包android——apk包时使用的打包命令了,其使用的是androidsdk中带的build命令。

那么dx命令在哪里呢?


4. 为了找到dx命令的调用,我回到IDE打包的系统输出窗口,我们找到这样的输出(这个输出是后来成功打包的输出):



我看见了输出了build Tools的版本号,心里想,莫非是因为androidSDK的build-tools版本太低了吗?因为据我运用编译与反编译的多年经验来看,android的build-tools的版本对android工程的编译有着很大的影响。所以我赶紧打开SDK MAnager更新了build-tools.(以下图片都是后面已经更新好的截图)

5.更新完build-tools之后,再在cocos-IDE中打包apk,发现问题依然存在。

所以再次翻看ant/build.xml命令,看dx工具究竟在哪里被运用了。

回到文件头部的位置,我们可以看到,ant命令中主要引入那些文件夹里面的工具库:

看到没有,build命令里面,压根就没有调用build-tools文件夹的文件,它用了tools下面的dx命令和platform-tools下的adb。所以就再去更新tools吧。


6.把tools更新到25.0.0版本之后,再进行打包。终于可以了。


综上所述,如果dx出错,最好就更换一个合适的版本,因为dx的版本也会随着android-tools的版本作出更新,具体你们可以把dx文件命令配置到path中,通过cmd命令:

dx --version , 看到dx的版本号。

Cocos-Lua IDE中打包android apk失败---一步一步揭开CocosIDE打包apk的过程的更多相关文章

  1. 详解Html5页面实现下载文件(apk、txt等)的三种方式

    这篇文章主要介绍了详解Html5页面实现下载文件(apk、txt等)的三种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. android – 在IntelliJ中减小调试APK的大小

    我正在合作开发具有9个Android库和10个jar库的中型Android项目.我在IntelliJ中开发,我的协作者在Eclipse中工作.在Eclipse中,调试APK的大小约为2.5MB,在IntelliJ中它是20MB.这怎么可能?我可以在IntelliJ中减小APK的大小,以便更快地将其上传到设备中吗?解决方法APK是一个zip文件.将扩展名更改为.zip并解压缩.看看里面有什么.

  3. android – 如何在没有eclipse的情况下构建apk或使用配置文件修改apk版本?

    我想从xml文件构建一个带有一些大配置的apk.我想知道是否有任何方法可以控制apk的构建过程或者是否有任何方法可以从我们的源代码创建apk并进行一些修改我们的源基于我们的配置xml文件.或任何其他方式来构建apk文件我不希望每次应用程序运行时都读取我的配置文件,我想在应用程序本身中包含更改欢迎所有建议,评论,答案,想法提前致谢…

  4. android – 未配置应用程序通过Google Play结算的应用程序

    我正在研究一个Android项目,我正在尝试实施InAppBillingV3.我已将我的应用上传到GooglePlay,并在应用中添加了IAP.我可以成功检索我的应用程序的IAP列表及其价格,但当我实际尝试购买时,我的设备会出现以下错误(没有错误)ThisversionoftheapplicationisnotconfiguredforbillingthroughGooglePlay.Checkt

  5. android – Play商店错误“您上传了使用不安全证书签名的APK”

    我正在尝试将游戏上传到Unity3D开发的Play商店.我已经使用Unity的内置方法使用所有必需的参数签署了apk但我在尝试上传Play商店上的APK时遇到此错误解决方法现在也有同样的错误……新的应用程序……似乎我们需要手动创建击键UPD:是的,它有所帮助

  6. android – zipalign:找不到命令 – Ubuntu

    我正在尝试使用命令行在Ubuntu14.04LTS系统上压缩“input.apk”文件,因为我还没有访问源代码.如果我没有弄错,我应该可以使用以下命令执行此操作但我得到以下输出我确保zipalign文件在我的…sdk/tools目录中,我必须从我的…build-tools/android-4.4W文件夹中复制,因为它最初缺少.当我按照另一个问题的建议输入这一行时我得到以下输出这是否意味着我需要一个.zip文件而不是我的.apk来zipalign?正如@Haresh的评论中所述,以下命令有效解决方法尝试运行

  7. android – 你上传了一个以调试模式签名的APK.您需要在发布模式错误中签署APK

    我正在尝试在GooglePlay商店上传应用程序.我正在构建.apk并使用Maven进行签名.我使用maven-jarsigner-plugin来签署.apk文件.我正在使用我使用Eclipse向导创建的密钥来签署另一个Android应用程序.我使用以下命令对.apk文件进行zipalign:zipalign[-f][-v]infile.apkoutfile.apk当我尝试在Playstore上上

  8. android – 按密度分割APK仍包含所有资源

    我决定尝试apksliptting来减少我的apk的大小.我将以下内容添加到我的gradle构建文件中这成功地为各种密度生成单独的apks.但是,我注意到所有apks都是相同的大小,没有一个比通用apk小.所以,我将一个加载到apk分析器中,发现它包含所有资源.没有人被剥夺.因此,所有配置都有效地生成了具有不同文件名的相同apk.我错过了什么吗?是否有任何其他构建选项可能会阻止正在删除的资源?

  9. 如何检测Android APK是否在其清单中将debuggable设置为true或false而不安装它?

    正如标题所说,我希望能够在计算机上找到APK是否已将debuggable设置为true或false,而无需将其安装在设备上,运行它并查看它是否显示在DDMS中.解决方法这是“一旦你知道如何”的事情之一–使用aapt工具检查清单.该命令将为您提供AndroidManifest.xml文件的编译形式的转储–输出将类似于A:android:debuggable(0x0101000f)=(type0x12

  10. 如何使用Android更新程序脚本安装APK

    我正在尝试使用Android的更新程序脚本语言(Edify?我建议完全卸载该应用并再次尝试.在我看来,该特定功能不适合安装该应用程序.您可能想尝试通过命令安装它:

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部