Cocos2dx升级支持 android 64位架构

  • 背景
  • 现有编译环境
  • 升级步骤
  • 编译报错修复
  • 打包测试

背景

国内各大安卓应用平台宣布2021年12月底,所有app需要提供64位架构包才能上架,具体可见:
我们项目因为上线比较早,用的引擎版本较低,没办法,必须升级,好在cocos早在3.13版本就已经支持android 64位架构,相对来讲和我们现在用的版本差异不是很大,所以升级工作还是比较简单的。

现有编译环境

  • Cocos2dx 3.5 (quick 3.5)
  • JDK1.8.0
  • android-ndk-r10e
  • android-sdks
  • apache-ant-1.9.3

升级步骤

1.下载Cocos2dx3.13版本源码,比较和当前版本差异,大致能确定引擎为支持64位安卓应用,更新了哪些第三方库,以及修改了哪些编译选项。

2.修改当前项目编译命令,增加–app-abi选项,并指定生成arm64-v8a架构,可以同时指定多个,但没必要。project_compile脚本里有说明:

group.add_argument("--app-abi", dest="app_abi", help='Set the APP_ABI of ndk-build. Can be multi value separated with ":".Sample : --app-aib armeabi:x86:mips. Default value is "armeabi".')

3.尝试打包,结果不出意外出现一些编译错误

编译报错修复

1.多个三方库没有64位架构包

libcurl.a

Android NDK: ERROR:/Users/game/publish/frameworks/runtime-src/proj.android/../../cocos2d-x/external/curl/prebuilt/android/Android.mk:luajit_static: LOCAL_SRC_FILES points to a missing file
Android NDK: Check that /Users/game/publish/frameworks/runtime-src/proj.android/../../cocos2d-x/external/curl/prebuilt/android/arm64-v8a/libcurl.a exists  or that its path is correct

很明显是没有arm64-v8a架构的libcurl库,其他几个库找不到也是类似原因。

libluajit.a

Android NDK: ERROR:/Users/game/publish/frameworks/runtime-src/proj.android/../../cocos2d-x/external/lua/luajit/prebuilt/android/Android.mk:luajit_static: LOCAL_SRC_FILES points to a missing file
Android NDK: Check that /Users/game/publish/frameworks/runtime-src/proj.android/../../cocos2d-x/external/lua/luajit/prebuilt/android/arm64-v8a/libluajit.a exists  or that its path is correct

libfreetype.a

Android NDK: ERROR:/Users/game/publish/frameworks/runtime-src/proj.android/../../cocos2d-x/external/freetype2/prebuilt/android/Android.mk:cocos_freetype2_static: LOCAL_SRC_FILES points to a missing file
Android NDK: Check that /Users/game/publish/frameworks/runtime-src/proj.android/../../cocos2d-x/external/freetype2/prebuilt/android/arm64-v8a/libfreetype.a exists  or that its path is correct

解决办法:
替换3.13版本中对应的库文件和代码,直接拷贝prebuilt目录下arm64-v8a库到原目录,注意如果本身有对这些库进行修改,则要考虑是否要合并到新版本中,不要盲目覆盖。

2.语法错误

更新curl库后,逻辑模块出现几处同一原因造成的编译报错,如:
AssetsManager.cpp:545

AssetsManager.h中_curl定义如下:

很明显与函数声明中参数类型不匹配:

解决方法:
将void * curl 定义改成 CURL * curl即可, 或者把curl.h中的
typedef struct Curl_easy CURL; 改回 typedef void CURL;

CC FileStorage 和 CCFileUtils-android 部分函数参数类型int改为ssize_t

3.其他警告
cc1plus: warning: unrecognized command line option “-Wno-extern-c-compat” cocos2dx早期版本用clang编译器才有的选项,用gcc编译器后废弃了,可以无视
cc1: warning: command line option ‘-std=c++11’ is valid for C++/ObjC++ but not for C 意思是指定c++版本,c语言库不支持,可以忽略

打包测试

重新打包,成功生成apk文件,分别在安卓64位手机上安装测试正常运行,因为没找到32位手机,只能在32位的模拟器上安装测试,结果是安装不了,符合预期,在64位模拟器上能正常安装并运行。

解压apk也可以看出只生成了arm64-v8架构的库:

Cocos2dx升级支持 android 64位架构相关推荐

  1. android应用商店升级标准,五大应用商店宣布:共同推进安卓APP升级64位架构

    [CNMO新闻]据媒体报道,近日,小米应用商店.OPPO应用商店.vivo应用商店.腾讯应用宝和百度手机助手等五大应用商店宣布,将共同推进国内安卓生态对64位架构的升级支持,目的是更好提升APP性能体 ...

  2. chrome android 85,终于!安卓版Chrome 85将升级到原生64位:支持Android 10及以上系统...

    原标题:终于!安卓版Chrome 85将升级到原生64位:支持Android 10及以上系统 安卓对64位的支持是从2014年的Android 5.0开始的.可时至今日,谷歌自己的Chrome for ...

  3. 安卓APP升级64位架构

    What 最近收到了小米官方发送的安卓APP升级64位架构的通知,具体邮件如下: 尊敬的开发者: 您好! 为更好地提升APP性能体验,降低APP功耗影响,小米应用商店与OPPO应用商店.vivo应用商 ...

  4. 关于 App 是否支持 64 位架构的适配

    2022/04/27 号更新: 补充一个关于适配 64 位架构的必要性: ARM 已逐步取消其 CPU 核心对 32 位的兼容,在骁龙8 Gen 1 处理器中,1 个 3.0GHz 的 X2 超大核和 ...

  5. 爱奇艺App架构升级之路——64位适配探索与实践

    背  景 随着手机硬件的不断发展,近两年的新式手机已经全部采用了64位CPU,64位真的比32位快吗?实际上32位和64位的差异主要体现在内存寻址上,32位最高只支撑4GB内存,而64位则能够最高支撑 ...

  6. Android 适配 64 位架构

    Android 适配 64 位架构 原文地址 https://juejin.cn/post/6964737926617890853 背景 64位的应用性能更好,也能运行在未来仅支持 64 位架构的设备 ...

  7. 砍掉 16 位、32 位,英特尔提出 x86-S ,直接支持 64 位架构!

    整理 | 屠敏,郑丽媛 出品 | CSDN(ID:CSDNnews) 落后了自然要被淘汰,曾经的经典因此也正在逐步消失. 随着 64 位操作系统的普及以及现代软件对更多内存需求的不断增长,很多用户选择 ...

  8. 小米应用商店支持 64 位架构适配

    项目当前问题:小米应用市场上线失败:项目中没有 arm64-v8a 一.代码优化 修改之前 buildTypes {debug {ndk {abiFilters 'armeabi-v7a'}}rele ...

  9. 32位架构应用转64位架构小结

    64位应用适配 ##简介 同桌面系统架构一样,苹果公司从 iOS 7 开始采用64位的A7处理器.在相同的设备上,运行相同的应用,支持64位的应用比支持32位的应用性能更高. 苹果公司的A7处理器支持 ...

最新文章

  1. android waiting for debugger
  2. Centos挂载硬盘
  3. PCB 机器学习(ML.NET)初体验实现PCB加投率预测
  4. LeetCode 788. Rotated Digits
  5. VS2008 在IE8中 调试 ActiveX控件 无法进入断点的解决方法 设置VS2008和IE8 调试ATL MFC ActiveX控件
  6. sql的join语法解析
  7. unigui发展路线图
  8. [转载]EmitMapper,AutoMapper,NLiteMapper和手工映射性能大比拼
  9. 【iOS开发】使用XCode 8进行真机调试的方法(各种报错信息的解决方法)
  10. [cogs] 传染病控制
  11. 常用的数据库软件各自有什么特点?
  12. 指纹识别传感器技术演变历程
  13. 云打印微信小程序,自助打印机,无人打印
  14. 如何做客户分析?客户分析的内容有哪些?
  15. 【书影观后感 四】《围城》十年
  16. 义帝熊心--秦末汉初
  17. 删除windows recovery分区
  18. 高性能计算机传奇(vamei)
  19. linux lib.a反编译,android反编译-smali文件语法
  20. 遭遇dns劫持会有哪些现象

热门文章

  1. EasyNLP带你实现中英文机器阅读理解
  2. 代码操作Word时,目录自动更新的两种方法
  3. 用yate2实现软VoIP语音通话(SIP协议)
  4. oracle数据库sql基础知识,Oracle数据库基础知识为内部培训资料.doc
  5. 流程DEMO-出差申请单
  6. mac上的http请求监控软件
  7. c++ 中map 的find 用法
  8. python项目之世界杯八强连连看
  9. 【IT项目管理】第6章 驾驭IT项目成本
  10. 录音如何翻译文字你知道吗?三种技巧教你手机怎么录音翻译