• Cocos2dx打包apk时变更NDK引发问题及解决


    现在官方的Cocos Studio已经支持打包apk文件,写该随笔的时候还没试过官方的打包功能,所以就按自己的学习顺序先把打包的心得写下。

    问题及最终解决方案:

    其中耗时最长的问题就是ndk-r10改成ndk-r9d后一直编译不通过;

    最终解决办法是删除项目路径下/proj.android/obj/local/armeabi目录下的所有文件。(当时因为使用cocos2dx2.2.3版本源码学习才遇到该问题,可能cocos2dx最新版本已无该问题)。

    另外发现其他编译出错,如No rule to make target,也可以删除该目录试试。

    发现问题过程:

    初学Cocos2dx,了解了下windows平台编译android包的流程:

    1.需要以下软件包:

    1) adt(eclipse集成环境可用于编译android项目)

    2) ndk(一系列工具可按linux下makefile格式编译c和c++的动态库,然后自动将so和java应用打包为apk)

    3) cygwin(提供windows下可用的linux命令,如make,这些命令用于ndk的编译工作,Cygwin还有很多其他作用,因为这里只是供ndk使用,所以不赘述)

         笔者当初下载Cygwin的时候是2.87(x64)版本,使用的163的镜像,下完发现如果全安装需要20多G的硬盘空间。后来通过查资料知道供ndk使用只需要将Devel点为install,其他都为default即可。

         第一次笔者使用的ndk版本是r10,后来有问题改为r9d。

    2.添加环境变量

    1) 在系统环境变量PATH中追缴加Cygwin\bin;

    2) 新建环境变量NDK_ROOT,值为ndk所在路径

         添加完后就可以编译了。笔者此时编译的时候遇到一个问题(对于比较干净的系统应该不会遇到这个问题),提示我出错,错误信息如下:

    ERROR: You are using a non-Cygwin compatible Make program.
    Currently using: C:/MinGW/bin/make
    
    To solve the issue, follow these steps:
    
    1. Ensure that the Cygwin 'make' package is installed.
       NOTE: You will need GNU Make 3.81 or later!
    
    2. Define the GNUMAKE environment variable to point to it, as in:
    
         export GNUMAKE=/usr/bin/make
    
    3. Call 'ndk-build' again.
    

      开始查了半天没找到解决方法,后来仔细看发现Currently using:C:/MinGW/bin/make。这个make并不是Cygin/bin下面的make,然后我想起来之前配置eclipse c++环境使用了MINGW,暂时从Path中删除该值,问题解决。

    3.编译及运行

    此时编译成功,于是拿着我的android跑跑看看,结果一运行程序立刻停止响应,从LogCat看到的错误:

    SharedLibrary  : libcocos2dcpp.so undefined reference to 'rand'
    

    网上查查发现大多数使用r10都有这个问题,没有实际的解决方案,于是重新下载了ndk r9d的包,修改NDK_ROOT环境变量后再次编译,这次的结果是编译不通过,编译的时候就报上面的rand错误。仔细检查后发现编译的时候虽然开始提示是用的r9d的环境,但是编译还是会用到r10的路径,不知道为什么。于是把r10移动到其他地方,然后把项目路径下/proj.android/obj/local/armeabi目录清空。再次编译,程序终于可以正常运行在Android手机上了。

    其他解决方法:

    1.重装系统后,有可能编译失败,大多是因为重装系统后一些文件夹没有读写权限造成的,这时可以删除proj.android目录下的一些临时文件夹试试(包括assets,bin,libs,obj,res)。

    2.有一些权限问题怎么删除文件都无法解决的,可以修改"build_native.sh"

    第60行:

    cp -rf "$file" "$APP_ANDROID_ROOT"/assets

     -->cp -rfp "$file" "$APP_ANDROID_ROOT"/assets

    第64行:

    cp "$file" "$APP_ANDROID_ROOT"/assets

    --> cp -p "$file" "$APP_ANDROID_ROOT"/assets

    引用自:http://www.oschina.net/question/1252613_137222

  • 相关阅读:
    Linux中的官方源、镜像源汇总
    提示"libc.so.6: version `GLIBC_2.14' not found"
    win8.1 安装msi软件出现 2503、2502
    平均负载(Load average)
    oracle 导入报错:field in data file exceeds maximum length
    一个命令的输出作为另外一个命令的输入
    Http 状态码
    Linux 命令总结
    ORA-12505: TNS: 监听程序当前无法识别连接描述符中所给出的SID等错误解决方法
    轻松应对IDC机房带宽突然暴涨问题
  • 原文地址:https://www.cnblogs.com/yaoh/p/4338990.html
Copyright © 2020-2023  润新知