有很多旧的SO线程处理在Android上运行NodeJS的问题。其中大多数不再可行(JXCore)和/或提供令人困惑,过时,不完整或错误的信息。
因此,我调查了目前(截至2017年8月)似乎可行的方法,并找到了三种可能的候选方法。
要在他们之间做出决定,我想知道:
可行的方法是 :
除此之外,我发现了许多相关的有趣资源:
[ 注意 此答案包含原始问题中的发现]
我已经研究了各种选择,这里是一些初步的发现。
每个选项都使用某种形式的为Android编译的NodeJS。但是要使用任何选项,您可能希望将其编译为不同的Node,Android和体系结构(x86,ARM,ARM64等)版本。
这是有问题的。NodeJS有一个android-configure
脚本,但这会导致我尝试过的大多数组合出现错误。我为工作的构建脚本创建了许多github问题。在本期中,收集结果:
总结一下:
libnode.a
)静态链接的J2V8 libj2v8.so
适用于7.x直至7.9.0
@mafintosh使用了一种有趣的解决方法:使用Termux将Node传输到设备并在那里进行编译(需要大量的空间和时间,但是可以工作)。
1.运行包含NodeJS J2V8的V8
JavaScript引擎
J2V8是V8的一组Java绑定。J2V8专注于性能以及与V8的紧密集成。[…]强制在JS和Java代码之间使用更静态的类型系统,但由于未创建中间对象,因此还提高了性能。[…]
构建J2V8需要同时构建本机部分和Java库(.jar /
.aar文件)。为了构建本机部分,我们首先将node.js构建为一个库,然后将J2V8静态链接到该库。[…]对于交叉编译,J2V8使用Docker(Android,Linux,Windows)和Vagrant(macos)。
特点 :
特点 :
build_system/build_settings.py
python build.py --interactive
,选择构建:[0] Docker >> android-x86 >> NODE_ENABLED
[1] Docker >> android-arm >> NODE_ENABLED
[2] Docker >> alpine-linux-x64 >> NODE_ENABLED
[3] Docker >> linux-x64 >> NODE_ENABLED
[4] Docker >> linux-x86 >> NODE_ENABLED
[5] Vagrant >> macosx-x64 >> NODE_ENABLED
[6] Vagrant >> macosx-x86 >> NODE_ENABLED
[7] Native >> windows-x64 >> NODE_ENABLED
[8] Docker >> windows-x64 >> NODE_ENABLED
[9] Vagrant >> windows-x64 >> NODE_ENABLED
选择构建步骤(或all
):
NodeJS --> CMake --> JNI --> Optimize --> Java/Android --> JUnit
将V8编译为共享库 libj2v8_{platform}_{abi}.{ext}
nodejs
构建步骤无法构建Node共享库(错误),创建libnode.a
要链接的静态对象libj2v8.so
.aar
作为项目依赖项包括在内的Gradle优点 :
缺点 :
mobile/node-on-android))
android上的Node通过使用共享库在android应用中运行Node.js来工作。然后
WebView
,它捆绑了一个托管您的UI代码的。所有的UI都是经典的html / css / js。在节点应用程序中,您可能需要
node-on-android
访问WebView。您可以使用它在中加载html页面WebView
。
根据node-on-android
创建者(@mafintosh)的说法,这比J2V8更容易和更好,因为它直接将V8编译
为真实的东西 。
特点 :
特点 :
app
项目中的相关目录/文件:
app/src/main/include/node
带有节.h
点头app/src/main/jniLibs/arm64-v8a
与libc++_shared.so
和libnode.so
app/src/main/cpp
与native-lib.cpp
(包括node.h
)Service
在单独线程中运行的with节点libnode.so
,因此private native void startNode(String... app);
在IDE中显示为错误(但可以编译)android/app/src/main/assets/node
loadUrl
功能 在WebView中加载的视图
node-on-android
优点 :
缺点 :
arm64
架构(已计划完整的移动支持或DIY构建) 注意 :64位不能与React Native结合使用不支持64位!在React Native应用程序的后台在后台 运行 真实的 Node.js进程。
使用此软件包,您可以:在Android中运行http服务器,使用Node流,与文件系统接口,从React
Native的JS线程中卸载一些繁重的处理工作,等等!在Android中运行真正的Node.js,您可以执行桌面上Node.js可以执行的所有操作。
特点 :
特点 :
Service
上的Node 非常相似(在单独的线程上与Node一起运行)
node
被编译/用作应用程序,而不是嵌入式共享库{projectRoot}/background
/android/src/main/res/raw/bin_node_v710
RNNode
通过导入,RN中可以使用节点服务react-native-node
react-native-node
还包含在构建时传输Node代码的CLIexpress
服务器http://localhost:5000
优点 :
缺点 :
7.1.0
版本(但可以自己构建较新的版本)我的目标是React Native + NodeJS。这是我的活动状态:
libc++
)react-native-node
确实可以编译,但是尽管多次尝试却无法运行node-on-android
可以,但是仅节点应用程序开发和与RN不兼容的64位我之所以决定合并react-native-node
,J2V8
是因为:
.aar
于精美的J2V8中,可轻松包含在Gradle中React Native 0.46.4
+ NodeJS 7.9.0
现在可以使用了!看到:
我的用例: 具有P2P去中心化网络的胖客户端
我正在考虑一个CQRS(命令-查询-责任-隔离)设计:
即使经过多年尝试将NodeJS移植到Android上的人们,仍然没有真正好的解决方案,它是先锋。
在设置项目和构建环境时,会遇到许多障碍和错误,但是一旦设置,您就可以在手机上享受Node的全部功能。
我有一个Docker映像,它是一个Node.js应用程序。应用程序从本地运行的Redis检索一些配置值。因此,我试图在Docker映像的同一容器中安装和运行Redis。 我如何扩展Docker文件并在其中配置Redis? 截至目前,Dockerfile如下所示:
每当我在新的beta版本xcode 9上运行在xcode 8.3中创建的项目时,我都会遇到以下错误: 无法更改文件的所有者:///users/AaronZheng/library/developer/coresimulator/devices/96629718-46b0-4775-8a31-49857ee620b8/data/library/caches/com.apple.mobile.inst
问题内容: 借助Android 4.4 KitKat,Google将linux内核升级到3.8版,这是Docker所需的内核版本。 我不知道AUFS部分,但是有没有办法通过此更新在android上运行docker容器? 问题答案: 根据文档,Android内核缺少LXC所需的很多内核功能。 也许将来使用Docker 1.x,可能会编写一个使用Android功能而非LXC的插件。但就目前而言,您需要
问题内容: 提出的每个选项都有一个问题: 我想在普通设备上运行它,所以我希望避免在设备上安装其他操作系统 上个月停止了对JXCore的工作,并且(可能是结果)我无法对其进行编译 自2014年以来就没有开发过NodeJs Anode的Android Port,而且当时并没有真正维护它 我链接到的第二个线程中的第二个答案现在提到了Android的官方节点发行版,但是除了指向最新dist的Browse-
问题内容: 我的Android平板电脑上有运转正常的php服务器,因此我希望它也可以以某种方式运行nodejs。源代码在github上可用,它也可以在linux上构建,但是我真的不明白如何构建它。 提前致谢, 问题答案: 网站上缺少构建说明: 下载它: 打开包装: 转到解压缩的文件夹: 跑 && && 您可能需要像安装一些依赖或者,和第一。 还有一个打包的Android端口,但是似乎没有被积极维护
我在maven项目上运行proguard时遇到问题。我有这个项目的测试和发布版本。发布版本号并混淆代码。当我在测试模式下运行我的android项目时,一切都很顺利,但当我切换到发布模式时,异常被抛出。我的Maven vesrion是Maven 3.2。1、AndroidmavenPlugin 3.6。0和JDK1.6 下面你可以看到我的项目的pom文件 http://maven.apache.or