Android里java程序的编译启动

来源:互联网 发布:php abstract 继承 编辑:程序博客网 时间:2024/05/18 23:54

下面使用一个程序来说明如何在PC上和Android系统上编译我们写好的java程序


PC端:
在PC上执行java程序时我们一般使用javac来编译程序,以一个Hello.java程序来说明一下编译的步奏:

  1. javac Hello.java
  2. 编译之后会得到一个Hello.class
  3. 执行:java Hello

Android端:
在android里面他的虚拟机就不是java了,而是一个称为”dalvikvm”的虚拟机,它接收的是一个dex格式的文件,所以我们需要将class文件转换为dex格式的文件,在PC端下使用如下指令(dx -h)进行转换:

dx --dex --output=Hello.jar Hello.class

可能出现找不到dx命令的情况,需要先设置一下android的环境,这个dx命令是android自带的,直接在android源码目录下输入如下(根据自己的系统设置环境):
source build/envsetup.sh
lunch aosp_nanopi3-userdebug

执行成功后把jar文件复制到网络文件系统上:

cp Hello.jar /work/nfs_root/android_fs

Android系统如何mount网络文件系统呢?
在android命令行下执行以下命令挂接网络文件系统:

suifconfig eth0 192.168.1.180busybox mount -t nfs -o nolock,vers=2 192.168.1.170:/work/nfs_root /mnt

可能出现找不到busybox的问题,需要先在单板上安装busybox,busybox的安装比较简单:
在这个网址先下载一个busybox:http://www.busybox.net/downloads/binaries/1.21.1/
我下载的是:busybox-armv7l(下载下来后修改名字为busybox)
安装busybox:
这里我是将下载下来的busybox放到SD,然后把SD放插到单板上后放到system/bin目录下
放到system目录下时,有可能出现这个报错”Read-only file system”
解决方法是执行:mount -o rw,remount /system
成功放到system/bin目录下后,进入bin目录执行:
chmod 755 busybox
busybox –install /system/bin

以后就可以使用busybox的指令了,在上面的 busybox mount 指令成功后进入网络文件的目录:

cd /mnt/android_fs

在这个目录下执行如下命令:

dalvikvm -cp /mnt/android_fs/Hello.jar Hello 

最后一个参数 Hello 是要执行的类名,至此整个编译过程就完成了


这里还介绍另一个常用的方法,使用系统自带的“ app_process“ 这个应用程序,它的使用格式如下:

CLASSPATH=...  app_process [java-options] cmd-dir start-class-name [options]

这里直接用 Hello.java 程序来作为一个示例:

CLASSPATH=/mnt/android_fs/Hello.jar app_process .       Hello       去哪里找Hello这个类,填写Hello.jar的路径       父目录   要执行的类名

父目录作用:后面如果要读取的话是基于哪个目录去读取那些文件的


由于上面的指令特别多,我们能否借助andorid的编译系统来编译程序呢?

把代码放到android源码中编译:
添加Androd.mk,内容类似: 参考frameworks/base/cmds/am/Android.mk

LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES := $(call all-subdir-java-files)LOCAL_MODULE := Helloinclude $(BUILD_JAVA_LIBRARY)

我是把java代码放在源码目录下的frameworks/testing下,使用mmm命令进行编译生成jar文件,将jar文件通过网络文件传输到andorid上,直接使用 “dalvikvm” 或 “app_process” 编译即可。

原创粉丝点击