Tencent / puerts

PUER(普洱) Typescript. Let's write your game in UE or Unity with TypeScript.
Other
5.08k stars 707 forks source link

[UE] Bug: UE5安卓打包中出现libnode.so缺失及SSL库的问题 #1751

Open mimiky opened 5 months ago

mimiky commented 5 months ago

前置阅读 | Pre-reading

Puer的版本 | Puer Version

Unreal_v1.0.6p1

UE的版本 | UE Version

5.1

发生在哪个平台 | Platform

Android

错误信息 | Error Message

No response

问题重现 | Bug reproduce

UE5安卓打包时,遇到了以下问题:

  1. 报错显示缺失 libnode.so 文件;
  2. 尝试删了库里头的libnode.so后,需要手动添加上ssl库才能打包成功,目前5.1可以编译打包运行,但不能确保兼容; 根据与Puerts插件开发者的讨论,nodejs构建脚本有问题,都编译带ssl的了。等待后续更新node库
chexiongsheng commented 5 months ago

去掉你配置的ssl,然后下载这个版本的nodejs库解压覆盖到Plugins/Puerts/ThirdParty下对应目录:https://github.com/puerts/backend-nodejs/releases/download/NodeJS_16.16.0_240604/nodejs_bin_16.16.0.tgz

试试问题解决了没

mimiky commented 5 months ago

去掉你配置的ssl,然后下载这个版本的nodejs库解压覆盖到Plugins/Puerts/ThirdParty下对应目录:https://github.com/puerts/backend-nodejs/releases/download/NodeJS_16.16.0_240604/nodejs_bin_16.16.0.tgz

试试问题解决了没

打包是没问题了,但是加载js脚本时出问题了,尝试加载crypto的JavaScript模块时失败 Puerts: Error: (0x0x707b608b38) Pak: Bit/Content/Paks/pakchunk0-Android_ASTC.pak/Bit/Content/JavaScript/puerts/modular.js:160: Error: can not find crypto in ../../../Bit/Content/JavaScript/framework 2024-06-05 11:02:45.392 24480-24564 UE com.Test.App D
2024-06-05 11:02:45.392 24480-24564 UE com.Test.App D Error: can not find crypto in ../../../Bit/Content/JavaScript/framework 2024-06-05 11:02:45.392 24480-24564 UE com.Test.App D at require (Pak: Bit/Content/Paks/pakchunk0-Android_ASTC.pak/Bit/Content/JavaScript/puerts/modular.js:105:23) 2024-06-05 11:02:45.392 24480-24564 UE com.Test.App D at ../../../Bit/Content/JavaScript/framework/FunctionLibrary.js:5:16 2024-06-05 11:02:45.392 24480-24564 UE com.Test.App D at executeModule (Pak: Bit/Content/Paks/pakchunk0-Android_ASTC.pak/Bit/Content/JavaScript/puerts/modular.js:70:9) 2024-06-05 11:02:45.392 24480-24564 UE com.Test.App D at require (Pak: Bit/Content/Paks/pakchunk0-Android_ASTC.pak/Bit/Content/JavaScript/puerts/modular.js:152:29) 2024-06-05 11:02:45.392 24480-24564 UE com.Test.App D at ../../../Bit/Content/JavaScript/modules/umg/main/proxy/MarketplaceConfirmProxy.js:5:27 2024-06-05 11:02:45.392 24480-24564 UE com.Test.App D at executeModule (Pak: Bit/Content/Paks/pakchunk0-Android_ASTC.pak/Bit/Content/JavaScript/puerts/modular.js:70:9) 2024-06-05 11:02:45.392 24480-24564 UE com.Test.App D at require (Pak: Bit/Content/Paks/pakchunk0-Android_ASTC.pak/Bit/Content/JavaScript/puerts/modular.js:152:29) 2024-06-05 11:02:45.392 24480-24564 UE com.Test.App D at ../../../Bit/Content/JavaScript/modules/umg/main/mediator/AvatarCustomizationMediator.js:13:35 2024-06-05 11:02:45.392 24480-24564 UE com.Test.App D at executeModule (Pak: Bit/Content/Paks/pakchunk0-Android_ASTC.pak/Bit/Content/JavaScript/puerts/modular.js:70:9) 2024-06-05 11:02:45.392 24480-24564 UE com.Test.App D at require (Pak: Bit/Content/Paks/pakchunk0-Android_ASTC.pak/Bit/Content/JavaScript/puerts/modular.js:152:29)

chexiongsheng commented 5 months ago

符合预期。crypto是ssl相关模块。禁用ssl这也去掉了。 最稳妥的是把nodejs的ssl版本改成和ue一致,但这puerts做不了,每个ue版本用的ssl不一定一致。我不太可能针对每个ue版本出一个nodejs库。 你有几个选项: 1、不用ssl相关功能; 2、把nodejs的ssl改成和ue一致,自行编译一个版本; 3、承担不一致的可能导致问题的风险,继续用带ssl的版本;

mimiky commented 5 months ago

符合预期。crypto是ssl相关模块。禁用ssl这也去掉了。 最稳妥的是把nodejs的ssl版本改成和ue一致,但这puerts做不了,每个ue版本用的ssl不一定一致。我不太可能针对每个ue版本出一个nodejs库。 你有几个选项: 1、不用ssl相关功能; 2、把nodejs的ssl改成和ue一致,自行编译一个版本; 3、承担不一致的可能导致问题的风险,继续用带ssl的版本;

那我暂时先用着带ssl的版本吧,目前用着没问题,后续空闲了再编看看

mimiky commented 5 months ago

看了下UE5.1应该用的是 1.1.1n ,NodeJS 16.16.0用的 1.1.1q吧,差异挺小的

mimiky commented 5 months ago

5.2 5.3 是1.1.1q,估计这两个版本用着不带ssl是没问题的,不过我没试过

chexiongsheng commented 5 months ago

5.2 5.3 是1.1.1q,估计这两个版本用着不带ssl是没问题的,不过我没试过

我说的带不带ssl是node的编译选项,选了without-ssl后,宿主有没ssl,node都不会有ssl相关功能。without-ssl版本node在我试过的所有ue版本都能用。

如果5.1区别不大倒可以试试用with-ssl的nodejs,JsEnv.build.cs不配置库nodejs的libssl,改为引用UE的ssl模块。