Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

笔记:在arm64的折腾 #122

Open
congHu opened this issue Oct 17, 2024 · 3 comments
Open

笔记:在arm64的折腾 #122

congHu opened this issue Oct 17, 2024 · 3 comments

Comments

@congHu
Copy link

congHu commented Oct 17, 2024

预先准备

  1. 删除 ~/.config/wechat-devtools 目录,重新打开项目(若发布 issue 即默认阁下执行了此操作且问题没有解决);
  2. HelloWorld是否正常(登录状态新建默认项目,执行复现步骤):不太正常
  3. 注意:如果你的问题是编译器错误,那么请提供可复现的demo,否则会被直接关闭。

问题描述

编译成功、真机预览成功,左侧运行前可显示欢迎界面,运行后只能看到小程序的标题栏,小程序页面空白,右侧调试工具显示空白,控制台报错

[8484:8484:1017/180102.329379:ERROR:CONSOLE(2)] "Uncaught SyntaxError: Unexpected token o in json at position 1", source: devtools://devtools/bundled/third_party_sentry.js (2)

问题复现

  • 下载并安装了特定版本的node: node-v16.4.2-linux-arm64
  • https://github.com/LeonardLaszlo/nw.js-armv7-binaries/releases找到下载nw55-arm64_2021-12-05.tar.gz,解压出来后,再解压usr/docker/dist/nwjs-chrome-ffmpeg-branding/nwjs-v0.55.0-linux-arm64.tar.gz,并替换掉原有的nwjs文件夹
  • 在新的nwjs文件夹中重新建立以下软链接:
    cd ./nwjs
    ln -s node16.4.2的安装路径/node node
    ln -s node node.exe
    ln -s ../package.nw/ package.nw
    
    此时nwjs文件夹中的文件file *结果如下:
    crashpad_handler:        ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[xxHash]=9d60b7729c144dfb, with debug_info, not stripped
    credits.html:            HTML document text HTML document, ASCII text
    icudtl.dat:              data
    lib:                     directory
    locales:                 directory
    node:                    symbolic link to /usr/local/node16/bin/node
    node.exe:                symbolic link to node
    nw:                      ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[xxHash]=a47a13033e58fafa, stripped
    nw_100_percent.pak:      data
    nw_200_percent.pak:      data
    package.nw:              symbolic link to ../package.nw/
    resources.pak:           data
    swiftshader:             directory
    v8_context_snapshot.bin: data
    
  • 运行./bin/wechat-devtools
  • 提示“无法加载以下来源的扩展程序: .清单文件缺失或不可读取”,点击“确认”忽略,程序继续往后执行
  • 登录窗口成功弹出,然后扫码并成功登录了微信号
  • 创建一个简单helloworld模板项目,打开编译运行项目
  • 主程序窗口成功显示,左侧显示欢迎界面,右侧文件列表、编辑器、调试器均空白,此时弹出是否信任项目,点击信任
  • 左侧显示灰色文字的编译过程,编译结束后,顶部显示模拟的状态栏、小程序标题栏、胶囊按钮,底部显示模拟手机的底部条。右侧视图无变化,文件列表、编辑器、调试器均空白
  • 点击“预览”按钮生成了二维码,并用真机扫码运行预览

期望的效果

打开项目正常看到小程序编译运行的结果,正常使用调试器

截屏

Screenshot_2024-10-17-18-05-38-045_com gaurav avnc
Screenshot_2024-10-17-20-58-55-458_com gaurav avnc

版本信息 (这是必要的):

  • 使用版本包: WeChat_Dev_Tools_v1.06.2407120-1_x86_64_linux.tar.gz
  • 硬件与系统的简单介绍:
    • 小米平板6pro|骁龙8+gen1|8+128g|MIUI14.0.9.0|Android13|已解锁BL|Magisk修补ROOT权限
    • 使用LinuxDeploy的rootfs.tar方法安装debian12-bookworm|Xfce桌面环境|tigerVNC图形子系统
    • Debian版本:12.5-bookworm-aarch64
    • 内核版本:5.10.136-android12-9-00021-g821df8f5bd36-ab9585204
  • nw版本:v0.55.0, Chromium 92.0.4515.107
  • node版本:v16.4.2

代码片段

额外的信息

2024-10-17:目前已经可以编译然后真机预览和上传,可以在一些应急场景下使用。本来不抱任何希望的,现在有种快成功的感觉了,在此记录一番

由于报错unexpected token o,因此鄙人推断:代码的某处运行了JSON.parse的解析方法时,入参的字符串出现了"[object Object]"。在普通x86PC运行时正常,此处应该是正常传入了某个对象的JSON字符串。经鄙人简单分析,后续可尝试的步骤包括但不限于:

  • 尝试打开nw的调试器查看更多更详细的报错输出
  • 尝试更换不同版本的nw和node二进制。鄙人在x86ubuntu上测试过,软件包内的nwjc, payload, nacl_*, chromedriver这四个x64二进制的存在与否对当前的现状似乎无影响,因此问题的重心暂时还是在nodenw当中。
  • 尝试更换交叉编译器或者更改某些编译参数,重新编译arm64版本的nw
  • 尝试碰运气,使用网络抓包分析"[object Object]"的字符串是否由网络接口获得,进而排除调用接口时因为环境参数不同,传参后导致网络接口返回错误的结果的可能性。
  • 尝试解包并解读package.nw当中的源码,结合报错信息进行debug
  • 尝试更换赛道,使用box64运行本软件包
控制台输出(节选)

Error: unrecognized flag --harmony-weak-refs
Try --help for options
[8276:8276:1017/175929.114708:ERROR:sandbox_linux.cc(376)] InitializeSandbox() called with multiple threads in process gpu-process.
[8277:8284:1017/175933.467925:ERROR:cert_verify_proc_builtin.cc(601)] No net_fetcher for performing AIA chasing.
...重复5次
[8484:8484:1017/180101.851874:ERROR:CONSOLE(2)] "console.assert", source: devtools://devtools/bundled/third_party/sentry.js (2)
...重复6次
[8484:8484:1017/180101.893582:ERROR:CONSOLE(2)] "Uncaught SyntaxError: Unexpected token o in JSON at position 1", source: devtools://devtools/bundled/third_party/sentry.js (2)
...重复26次
ls: 无法访问 '/dev/disk/by-id/': 没有那个文件或目录
@msojocs
Copy link
Owner

msojocs commented Oct 17, 2024

https://github.com/msojocs/wx-compiler

这是编译器,你有编译成arm64吗?

@congHu congHu closed this as completed Oct 26, 2024
@congHu
Copy link
Author

congHu commented Oct 26, 2024

感谢大佬!现在又向前推进了一步。
在本机环境下,在编译wcsc期间报错has incomplete type,相关代码cpp文件加上#include <array>,编译顺利成功。
wcc_wcsc_aarch64.tar.gz

添加了#include <array>的代码文件如下:

src/wxss/css_tree_lib/lexical_checker.cpp
src/wxss/css_tree_lib/parser.cpp

编译完成后,将wcc,wcsc替换到package.nw/node_modules/wcc-exec/,将wcc.node,wcsc.node替换到package.nw/node_modules/wcc/build/Release/,再次启动bin/wechat-devtools

现在可以正常显示小程序运行结果了,大体上都可以正常运作、正常点击。
不过右侧的编辑器、调试器还是空白,我看来一下终端的报错依然跟之前一样:

[26773:26773:1026/165120.042986:ERROR:CONSOLE(2)] "Uncaught SyntaxError: Unexpected token o in JSON at position 1", source: devtools://devtools/bundled/third_party/sentry.js (2)

留意了一下,相比之前还出现了新的一句报错,不知道有没有什么影响:

[26773:26773:1026/164324.190568:ERROR:CONSOLE(2)] "No document", source: devtools://devtools/bundled/third_party/sentry.js (2)

@congHu congHu reopened this Oct 26, 2024
@congHu
Copy link
Author

congHu commented Oct 28, 2024

目前可用程度:

  1. 小程序编译正常、运行正常,预览正常、上传正常,上传时压缩wxml、压缩样式正常
  2. 真机调试:运行正常,console有输出
  3. 进入设置 - 外观设置 - 调试器位置设置成在模拟器右侧,…,调试器显示正常,wxml选取正常、样式代码显示正常,storage功能正常
  4. 公众号网页功能,jssdk加载正常、功能正常,地址栏下方显示了绑定公众号appid,页面的代码也成功修改了分享文案

存在的问题:

  • 问题1:真机调试时network抓取不到任何请求
  • 问题2:编辑器空白、编辑器内调试器连带一起不显示,通过上述第3条设置可以显示调试器
  • 问题3:通过上述第3条设置出来的调试器:console无输出,network抓取不到xhr请求,但又可以抓取到图片资源请求
  • 问题4:“调试微信开发者工具”以及“调试调试器”时,能显示调试器的选项卡、工具栏等页面框架,但调试内容空白、无任何调试输出内容
  • 问题5:公众号网页调试器内容空白,与问题4大概是一致的

猜测但未尝试:

  • 更换nw版本
  • 查找package.nw文件夹下更多x86-64的二进制,并设法替换

已做的尝试

  • 用box64运行未做任何修改的x86-64版本,小程序编译成功、编辑器与调试器显示成功,cpu占用100%,无法继续测试后续功能

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants