NodeJS-Android的完美构建方法和构建完成的Docker镜像

从 https://github.com/sjitech/build-nodejs-for-android-perfectly 中构建适用于安卓的完美Node.js版本。

使用NDK的独立工具链进行NodeJS交叉编译时,可能没有人能一次成功。您需要指定–without-…,修改环境变量和GYP才能通过。

好消息是,有一种完美的方法可以在Android-{arm,arm64,x86,x64,mipsel}上构建NodeJS。它只需要一条命令,无需修改源代码,也没有功能限制!

而且,已经构建好的二进制文件也已上传:https://github.com/sjitech/nodejs-android-prebuilt-binaries。

如果您使用docker镜像osexp2000/build-nodejs-android,您可以查看构建结果,并且可以快速修改源代码和编译,这就是一个这样的构建环境docker。

请参考上方的URL了解更详细的信息。


为了方便地使用NDK的独立工具链,我在创建android-gcc-toolchain时,作为测试,尝试构建了NodeJS的Android版本。

自从上次构建NodeJS Android过去两年时间,已经有了很大的改善,本以为构建会很顺利完成,但出乎意料地遇到了各种问题。

我看了一下,不知道是在哪儿出了问题,有很多问题,大部分是在创建主机(当前正在使用的计算机)端代码时出现的错误。例如,

    1. 【Mac】滥用[ar(.oを.aに合并する工具)。将适用于Android端的.o文件误用为主机端的.o文件。

 

    1. 【Mac】-lrt:试图链接到不存在的librt库。Mac上没有librt。

 

    1. 【Linux】-lpthread:似乎忘记了在某处指定链接到libpthread,导致出现奇怪的“DSO命令未找到”错误。

 

    【Mac/Linux】-m32:指令-m32用于创建32位代码,部分指定了,部分忘记指定,最终导致32位和64位混合链接错误。

在NodeJS及其子项目中,要找到哪里出了配置错误都是一件很麻烦的事情。GYP、CMake、autoconf等多个构建系统混合在一起,其中关联性太多,很难完全掌握。

偶然间,我想到了一个通过$PATH的ar、gcc等命令的hook的想法。所以,只需增加或减少选项,一定能行!我试了试,成功了。

这样一来,通过整理,我们完成了android-gcc-toolchain工具。
这是一个可以自由切换NDK独立工具链并且快速使用的工具。

今天就先到这里吧。

bannerAds