zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    树链剖分-bzoj1036
    POJ3489企鹅
    51nod 1130
    51nod-8-16
    51nod-8-15
    51nod 8-14
    51nod1582-n叉树
    51nod1574排列转换
    51nod1785数据流中的算法
    iOS开发--Swift 最近项目开发中遇到的一些小问题与解决方法
  • 原文地址:https://www.cnblogs.com/JebediahKerman/p/13759558.html
Copyright © 2011-2022 走看看