Android运行Java程序

众所周知Android的ART和Dalvik不能直接执行class和jar,本文阐述了如何在Android中执行class和jar。

首先在Oracle网站(https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html)下载Linux ARM 64 Hard Float ABI版本的jdk,我们只需要其中的jre。

然后需要用patchelf修改interpreter和rpath,参考Android运行Linux程序(https://www.cnblogs.com/JebediahKerman/p/13752428.html)。

在jre/bin目录执行

for prog in * ; do patchelf --set-interpreter "/data/local/tmp/lib/ld-linux-aarch64.so.1" $prog ; done
for prog in * ; do rpath=$(patchelf --print-rpath $prog) ; patchelf --set-rpath "/data/local/tmp/lib:$rpath" $prog ; done

在jre/lib/aarch64、jre/lib/aarch64/jli和jre/lib/aarch64/server目录执行

for soname in *.so ; do rpath=$(patchelf --print-rpath $soname) ; patchelf --set-rpath "/data/local/tmp/lib:$rpath" $soname ; done

 然后将ld-linux-aarch64.so.1、libdl.so.2、libc.so.6、libm.so.6和libpthread.so.0放到/data/local/tmp/lib目录中。

public class HelloWorld {

    public static void main(String[] args) {
        System.out.println("Hello World!");
    }

}

上面的代码编译成HelloWorld.class和HelloWorld.jar都可以在Android运行,不过会有一个警告:

Java HotSpot(TM) 64-Bit Server VM warning: No monotonic clock was available - timed services may be adversely affected if the time-of-day clock changes
原文地址:https://www.cnblogs.com/JebediahKerman/p/13759558.html