Android 16KB 页面大小特性支持 & 引擎库更新

是否有先执行 npm install, 另外如果是因为缓存问题,建议删除项目目录下的 library, temp等目录。

我想在3.8.3版本中修改,但是引擎里面没有 [NativeExecutorRenderGraph.h]这文件,要怎么修改?

合并 external 下的修改。引擎只看env.h的修改,其他的.gradle等参考 对应pr

请问 2.x 的进度如何了

最近会安排跟进处理

尝试更新项目包:

  • 拉取了官方3.8.7-16k的适配native
  • 升级了Android NDK(28.1.13356709)/SDK(compile34 target35 buildtools 35.0.0)/Studio(2025.1.2) AGP(8.6.1) Gradle(8.7)
  • 编译出现 v8::ScriptOrigin origin(xxxx)构造函数参数问题,也修改正常了.
  • 打包了游戏(包含v7 v8 x86-64),检测so(libcocos libswappy)也是16k(v7除外)
  • 在AVD(API36 x86-64 GoogleAPI 16k的镜像,检测是16k page,adb shell getconf PAGE_SIZE)运行起来还是崩溃
  • 在4k page的真机上运行没有问题.
09-03 08:55:42.171  5971  5971 F DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
09-03 08:55:42.171  5971  5971 F DEBUG   : Build fingerprint: 'google/sdk_gphone16k_x86_64/emu64xa16k:16/BE2A.250530.026.F3/13894323:userdebug/dev-keys'
09-03 08:55:42.171  5971  5971 F DEBUG   : Revision: '0'
09-03 08:55:42.171  5971  5971 F DEBUG   : ABI: 'x86_64'
09-03 08:55:42.171  5971  5971 F DEBUG   : Timestamp: 2025-09-03 08:55:41.582149463+0000
09-03 08:55:42.171  5971  5971 F DEBUG   : Process uptime: 1s
09-03 08:55:42.171  5971  5971 F DEBUG   : Page size: 16384 bytes
09-03 08:55:42.171  5971  5971 F DEBUG   : Cmdline: com.xxxx.xxxxx
09-03 08:55:42.171  5971  5971 F DEBUG   : pid: 5940, tid: 5959, name: Thread-2  >>> com.soida.bouncyball <<<
09-03 08:55:42.171  5971  5971 F DEBUG   : uid: 10214
09-03 08:55:42.171  5971  5971 F DEBUG   : signal 5 (SIGTRAP), code 128 (SI_KERNEL), fault addr 0x0000000000000000
09-03 08:55:42.171  5971  5971 F DEBUG   :     rax 0000000000000000  rbx 00007db952398000  rcx 0000000000004000  rdx 0000000000001000
09-03 08:55:42.171  5971  5971 F DEBUG   :     r8  0000000000000010  r9  000000000018000d  r10 748d9c5ddbd1e995  r11 00007db9c828cd30
09-03 08:55:42.171  5971  5971 F DEBUG   :     r12 00007db952398000  r13 00007dba4825beb0  r14 0000000000001000  r15 00007dbae8274810
09-03 08:55:42.171  5971  5971 F DEBUG   :     rdi 00007db952398000  rsi 0000000000001000
09-03 08:55:42.171  5971  5971 F DEBUG   :     rbp 00007db9ae6f42d0  rsp 00007db9ae6f40a0  rip 00007db951509e01
09-03 08:55:42.171  5971  5971 F DEBUG   : 17 total frames
09-03 08:55:42.171  5971  5971 F DEBUG   : backtrace:
09-03 08:55:42.171  5971  5971 F DEBUG   :       #00 pc 0000000001505e01  /data/app/~~L_98XhaKDLtqjO6phA_Cig==/com.soida.bouncyball-Zy_eX3sAZAmfXshBPnLeiw==/base.apk!libcocos.so (offset 0x110000) (BuildId: a40b193c324d7dc4eabc0c6badfce5ba518255b9)
09-03 08:55:42.171  5971  5971 F DEBUG   :       #01 pc 000000000171ccab  /data/app/~~L_98XhaKDLtqjO6phA_Cig==/com.soida.bouncyball-Zy_eX3sAZAmfXshBPnLeiw==/base.apk!libcocos.so (offset 0x110000) (BuildId: a40b193c324d7dc4eabc0c6badfce5ba518255b9)
09-03 08:55:42.171  5971  5971 F DEBUG   :       #02 pc 000000000151d4d7  /data/app/~~L_98XhaKDLtqjO6phA_Cig==/com.soida.bouncyball-Zy_eX3sAZAmfXshBPnLeiw==/base.apk!libcocos.so (offset 0x110000) (BuildId: a40b193c324d7dc4eabc0c6badfce5ba518255b9)

1赞

我再试试,之前试过2次是没问题的。你要先把旧的apk 卸载后才可以。

每次都是先手动卸载,再Run CocosGame

模拟器你如果用的是x86架构,构建的cpu也需要选x86, 不然必崩。 gradle.properties 修改 prop_app_abi

PROP_APP_ABI=arm64-v8a:armeabi-v7a:x86_64
你是说只放x86-64?我现在的包是有这个三个版本的.

你试试只放一个试试

确认只有x86_64,so检测也是16k,AVD运行闪退.

@soida 我一个多月前验证的,我再验证看看。

嗯. 好的.麻烦了.

我拉取是

git clone --branch v3.8.7-16k --depth=1 https://github.com/cocos/cocos-engine.git

@soida external 更新了? 确认更新后,麻烦确认 Variants abi是 x86_64
企业微信截图_17568920594554

我这里没问题,

企业微信截图_17568932912783

ok 那我再检查下.

先说结论,项目基于 3.8.5,参考 PR 大部分配置,可以运行跑起来,目前测试中,没明显崩溃

一些参考

  • 由于 PR 是基于 3.8.7 的,所以如果你的项目是 3.8.7 ,那么完全抄这个PR,应该没问题

  • 我这边是基于 3.8.5 的,就相差了两个版本,这个PR不完全对,还有一些地方需要更改(这部分更改可能是在 3.8.6上完成,所以PR没有列出来),构建时会有报错提示,但基本还可以小修完成

  • 那如果你是更低版本,参考这个PR适配,可能还有具体版本具体问题分析的情况

external

我是完全搬仓库下来,但如果你是更低版本的 3.x 估计应该也行?

压缩vs不压缩

  • 非GP分发或者侧载分发:此类型分发渠道,基本都是要弄apk包。apk包的体积非常敏感。结论是: apk 基本需要开启压缩,不然 apk 体积实在太大了(单一 64位的 API 架构就去到 45M 左右,要是在支持 v7 和 32位 架构,这个包就去到120M左右了,这还没有包含你的游戏内容)
  • GP分发:aab 则不用开启压缩
    packagingOptions {
        jniLibs {
            useLegacyPackaging = true/false
        }
    }

目前没有崩溃

嗯可以了. 原因是 我拉取 cocos-engine-external 分支没有拉到 3.8.7-16k,拉取的是3.8.7的…

遇到一个编译错误 (可能是NDK版本引发的API变动)

external/sources/Swappy/src/swappy/common/ChoreographerThread.cpp

ALooper_pollAll(-1, &outFd, &outEvents, &outData);

修改为

 int events; // 如果回调函数处理所有事情,这个变量可能不是严格必需的
 ALooper_pollOnce(-1, nullptr /* outFd */, &events /* outEvents */, nullptr /* outData */);