2018-12-21
如何编译在 Android 上用的 JavaScript Core 呢?React 社区提供了一个 jsc-android-buildscripts 项目,专门用于构建编译供 Android 使用的 JavaScriptCore。由于 Hybrid 移动开发技术的发展,编译 JavaScript Core 的过程已经得到了大大简化。
项目主页在这里,详细介绍可以参见链接内的介绍。
在本文中记录了我使用 jsc-android-buildscripts 的构建经历。
Step1:clone jsc-android-buildscripts 工程。
Step2:npm run clean
,先清理一下工程。
Step3:npm run download
,下载编译所需的资源。
scripts/download.sh
。Step4:npm run start
,进行编译。
scripts/start.sh
。编译完成后,会进入 createAAR 过程,将个平台下的 so 封装到一个 AAR 里面去。
编译过程肯定不会是一帆风顺,肯定会遇到问题,不过,有问题就有原因,找到原因解决即可。编译过程遇到的问题有:
ANDROID_HOME
和 ANDROID_NDK
未指定。解决方法,添加环境变到到对应的位置。
我发现,编译过程一旦中断,重新运行 npm run start
时会从头开始,再次经历漫长的过程。
08m:42s 后,终于完成了 WebKit 的编译,但是我太天真了,这只是在一个平台上的编译完成,我忘记 Android 有多种平台架构了,估计所有平台编译完得至半个多小时时间……
当 JavaScriptCore 编译完成之后,下一步是生成 aar。在初始化项目的 gradle 的时候,需要联网下载 gradle-4.8-all.
由于国内的网络情况,始终下载出错。
我采取的办法是,在浏览器中下载 gradle-4.8-all.zip,并将它拷贝到以下位置:
~/.gradle/wrapper/dists/gradle-4.8-all/41c9mvq2w0645xx6nsenaerjl/gradle-4.8-all.zip
在完全编译完成后,脚本还向屏幕中输出一句:
哈哈哈,乐死我了。
其实 jsc-android-buildscripts 已经对外提供了编译好的二进制,如果我们只想拿来用的话,无需自己编译,直接拿过来用就可以。
二进制作为一个 npm 库提供出来,这个库装在本地后,实际上是一个本地 Maven 库。
最终,我们成功打出了 JavaScriptCore 的 Android AAR 包。编译过程至此就告一段落了,下一步考虑如何在 Android 工程中使用 JavaScriptCore。