Skip to content

笔记:在arm64的折腾 #122

Open
@congHu

Description

@congHu

预先准备

  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/': 没有那个文件或目录

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions