方舟编译器编译过程

准备工作

  1. 下载java-core.jar
  2. 需要安装docker
  3. docker镜像 daocloud.io/ystyle/ark 方舟镜像编译教程

准备java代码

1
2
3
4
5
public class Test {
public static void main(String[] args) {
System.out.println("hello world");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
# 进入docker容器的交互模式
docker run --rm -v -ti $PWD:/mnt/code daocloud.io/ystyle/ark bash
# 先把java-core转为mplt文件
jbc2mpl -injar java-core.jar
# 用java-core.jar编译并打包Test.java
java2jar Test.jar java-core.jar Test.java
# 把Test.jar生成mpl文件
jbc2mpl -mplt java-core.mplt -injar Test.jar -out Test
# mpl2mpl
maple --run=me:mpl2mpl --option="--quiet:--quiet --regnativefunc --maplelinker" Test.mpl --save-temps
# 编译.VtableImpl.mpl文件,生成后端优化后的汇编文件(.VtableImpl.s)。
mplcg --fpic --maplelinker --no-pie --quiet --verbose-asm Test.VtableImpl.mpl
# 后续用android ndk可以把.s文件编译出能在安卓上运行的程序, 因为汇编的原因, linux的GCC是编译不了的