Android里java程序的编译启动
来源:互联网 发布:php abstract 继承 编辑:程序博客网 时间:2024/05/18 23:54
下面使用一个程序来说明如何在PC上和Android系统上编译我们写好的java程序
PC端:
在PC上执行java程序时我们一般使用javac来编译程序,以一个Hello.java程序来说明一下编译的步奏:
- javac Hello.java
- 编译之后会得到一个Hello.class
- 执行: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” 编译即可。
- Android里java程序的编译启动
- Android shell 启动java程序
- 把Java程序的编译和运行都集成到EditPlus里配置步骤
- android平台 java程序 编译
- Android里Activity的启动模式
- android启动程序报java.lang.NullPointerException的原因
- Eclipse编写Android程序时layout的xml里的id不能在R.java里自动生成
- java 程序的启动界面
- android里在程序中修改listView里的内容
- android里在程序中修改listView里的内容
- 进程里启动关闭程序
- 启动tocat时,就运行程序里的某个方法
- 利用GDB调试Android里的程序
- eclipse上调试android里的程序。
- 关闭android程序里所有的activity
- 关闭android程序里所有的activity
- 关闭android程序里所有的activity
- Android程序里调用其他的APK
- sdut-1153 C语言实验——求两个整数之中较大者
- 第五章 广播机制
- hdu(poj)-2084(3176)-数塔-简单dp
- 第一次进行PCB设计
- 自制搜索(elasticsearch安装,mongo-connector同步数据,python操作)
- Android里java程序的编译启动
- linux介绍及基本指令
- Python爬虫个人记录(三)获取图片
- Android Toolbar总结
- 大数据(十三)Hadoop-MR编程 -- 【模拟qq推荐你可能认识的人】
- Java基础总结-流
- [Windows 10]「ビルトイン Administrator アカウントを使って、Microsoft Edgeを開けません」への対処法
- 前端面试问题
- 小例子来理解MapReduce