改成 static ccstd::string xxteaKey;
3.7.4 版本按照此方法 16kb 检测过了,但是运行时提示engine/native/cocos/application/CocosApplication.cpp:location: v8::Template::SetAccessorProperty, message: Getter must have a call handler
是不是 引擎的ts 层需要有相关修改
仔细对比了一下,这个官方替换 v8库是平替 3.8.7 的 v8,3.8 以下的 v8 库直接替换是有问题的吧,我记得官方说 3.8 有升级过 v8 库,应该需要改一些其他代码适配
3.6没有遇到你的说的问题,方案是已经适配过新版本v8的,不适配编译都无法通过的
这个是运行时报错,我这边编译也过了,不过似乎虽然有报错但没啥影响
我看日志了, 3.6运行时没看到这个错误,空了下个374试试
大佬,3.7.4这个external这个地方复制哪些文件,就是不清楚这个engine-native\external\android这个目录哪些文件要改的,
这个里面没啥要改的代码文件,只需要替换v8就行了
官方的看着头大,用不用的都往上面丢。
以cocos-engine-external-387-16kb版本的v8为列
如果只替换了v8静态库,那就不需要改。 如果还替换了include,那就需要改 因为这个版本 ScriptOrigin 的构造器里没有兼容isolate参数
感谢楼主分享!
基于3.7.4的项目现在跑通了,
将该版本心得分享出来供相同版本的同学参考。
很多都是参考楼主的代码,勿见怪哈 
哥们 我这边3.7.4 根据pr修改完之后,打出来的apk 用 APK 分析,提示还是不支持,但是没有支持,但是只显示resoures.arsc 是No。这样我要咋改
我用的是cocosCreator 3.7.4
gradle:9.0.0
agp version:8.10.0
NDK version:26.1.10909125
Android Stuido:Android Studio Narwhal | 2025.1.1 Patch 1
你的NDK版本不会自动开启16kb,你需要手动开启。方案里有如何开启; 如果你已经开启过了,再检查你的v8版本是否已经替换
bro,你需要在Class.cpp里改下SetAccessorProperty传的属性,你可以参考下面的代码片段改下这两个函数
Line 213-234
bool Class::defineProperty(const char *name, v8::FunctionCallback getter, v8::FunctionCallback setter, void *data) {
v8::MaybeLocal<v8::String> jsName = v8::String::NewFromUtf8(__isolate, name, v8::NewStringType::kNormal);
if (jsName.IsEmpty()) {
return false;
}
auto prototypeTemplate = _constructorTemplate.Get(__isolate)->PrototypeTemplate();
auto externalData = createExternal(__isolate, data);
v8::Local<v8::FunctionTemplate> getterTemplate = v8::Local<v8::FunctionTemplate>();
v8::Local<v8::FunctionTemplate> setterTemplate = v8::Local<v8::FunctionTemplate>();
if (getter != nullptr) {
getterTemplate = v8::FunctionTemplate::New(__isolate, getter, externalData);
}
if (setter != nullptr) {
setterTemplate = v8::FunctionTemplate::New(__isolate, setter, externalData);
}
prototypeTemplate->SetAccessorProperty(jsName.ToLocalChecked(), getterTemplate, setterTemplate);
return true;
}
Line 253-274
bool Class::defineStaticProperty(const char *name, v8::FunctionCallback getter, v8::FunctionCallback setter, void *data) {
v8::MaybeLocal<v8::String> jsName = v8::String::NewFromUtf8(__isolate, name, v8::NewStringType::kNormal);
if (jsName.IsEmpty()) {
return false;
}
auto externalData = createExternal(__isolate, data);
v8::Local<v8::FunctionTemplate> getterTemplate = v8::Local<v8::FunctionTemplate>();
v8::Local<v8::FunctionTemplate> setterTemplate = v8::Local<v8::FunctionTemplate>();
if (getter != nullptr) {
getterTemplate = v8::FunctionTemplate::New(__isolate, getter, externalData);
}
if (setter != nullptr) {
setterTemplate = v8::FunctionTemplate::New(__isolate, setter, externalData);
}
_constructorTemplate.Get(__isolate)->SetAccessorProperty(jsName.ToLocalChecked(), getterTemplate, setterTemplate);
return true;
}
我们是Cocos 3.8.1魔改上来的,应该和你这边遇到的问题类似
我们已经修复了,就是需要改引擎ts层相关代码;你说的这个确实也要改一下
新V8里v8::FunctionTemplate::New 如果用作 Accessor 的 Getter,V8 要求这个 Template 必须明确指向一个可执行的 CallHandler。这个单纯是API问题把,我们没做TS层修改

