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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM