Cocos2dx升级支持 android 64位架构
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位架构相关推荐
- android应用商店升级标准,五大应用商店宣布:共同推进安卓APP升级64位架构
[CNMO新闻]据媒体报道,近日,小米应用商店.OPPO应用商店.vivo应用商店.腾讯应用宝和百度手机助手等五大应用商店宣布,将共同推进国内安卓生态对64位架构的升级支持,目的是更好提升APP性能体 ...
- chrome android 85,终于!安卓版Chrome 85将升级到原生64位:支持Android 10及以上系统...
原标题:终于!安卓版Chrome 85将升级到原生64位:支持Android 10及以上系统 安卓对64位的支持是从2014年的Android 5.0开始的.可时至今日,谷歌自己的Chrome for ...
- 安卓APP升级64位架构
What 最近收到了小米官方发送的安卓APP升级64位架构的通知,具体邮件如下: 尊敬的开发者: 您好! 为更好地提升APP性能体验,降低APP功耗影响,小米应用商店与OPPO应用商店.vivo应用商 ...
- 关于 App 是否支持 64 位架构的适配
2022/04/27 号更新: 补充一个关于适配 64 位架构的必要性: ARM 已逐步取消其 CPU 核心对 32 位的兼容,在骁龙8 Gen 1 处理器中,1 个 3.0GHz 的 X2 超大核和 ...
- 爱奇艺App架构升级之路——64位适配探索与实践
背 景 随着手机硬件的不断发展,近两年的新式手机已经全部采用了64位CPU,64位真的比32位快吗?实际上32位和64位的差异主要体现在内存寻址上,32位最高只支撑4GB内存,而64位则能够最高支撑 ...
- Android 适配 64 位架构
Android 适配 64 位架构 原文地址 https://juejin.cn/post/6964737926617890853 背景 64位的应用性能更好,也能运行在未来仅支持 64 位架构的设备 ...
- 砍掉 16 位、32 位,英特尔提出 x86-S ,直接支持 64 位架构!
整理 | 屠敏,郑丽媛 出品 | CSDN(ID:CSDNnews) 落后了自然要被淘汰,曾经的经典因此也正在逐步消失. 随着 64 位操作系统的普及以及现代软件对更多内存需求的不断增长,很多用户选择 ...
- 小米应用商店支持 64 位架构适配
项目当前问题:小米应用市场上线失败:项目中没有 arm64-v8a 一.代码优化 修改之前 buildTypes {debug {ndk {abiFilters 'armeabi-v7a'}}rele ...
- 32位架构应用转64位架构小结
64位应用适配 ##简介 同桌面系统架构一样,苹果公司从 iOS 7 开始采用64位的A7处理器.在相同的设备上,运行相同的应用,支持64位的应用比支持32位的应用性能更高. 苹果公司的A7处理器支持 ...
最新文章
- android waiting for debugger
- Centos挂载硬盘
- PCB 机器学习(ML.NET)初体验实现PCB加投率预测
- LeetCode 788. Rotated Digits
- VS2008 在IE8中 调试 ActiveX控件 无法进入断点的解决方法 设置VS2008和IE8 调试ATL MFC ActiveX控件
- sql的join语法解析
- unigui发展路线图
- [转载]EmitMapper,AutoMapper,NLiteMapper和手工映射性能大比拼
- 【iOS开发】使用XCode 8进行真机调试的方法(各种报错信息的解决方法)
- [cogs] 传染病控制
- 常用的数据库软件各自有什么特点?
- 指纹识别传感器技术演变历程
- 云打印微信小程序,自助打印机,无人打印
- 如何做客户分析?客户分析的内容有哪些?
- 【书影观后感 四】《围城》十年
- 义帝熊心--秦末汉初
- 删除windows recovery分区
- 高性能计算机传奇(vamei)
- linux lib.a反编译,android反编译-smali文件语法
- 遭遇dns劫持会有哪些现象