最近尝试将旧的手机当Linux跑起来,跑一些自己写的Python/Java小程序。Android是基于Linux内核的操作系统,因为Java用的比较多,先写个demo,看看可不可行
一次失败的尝试
先写个demo,为了尽量规避可能涉及的权限问题,将其导入手机公用下载目录,然后通过adb shell
尝试调用。
… 结果失败了
- 先写个
Hello World
package nicelee.server;
public class Test {
public static void main(String[] args) {
System.out.println("run in dalvikvm");
}
}
-
先按正常来导出jar包,常见的JDK环境均能运行的那种
-
将test.jar通过
adb
导入常见的Download目录
-
进入adb shell,cd 到目录,尝试调用
java -jar test.jar
运行失败
反思并再次尝试
想想也是,就像自己DIY了一台虚拟机,要跑程序也得先把环境配好。
虽然说Android本身便支持Java(不然Java写的app怎么个跑法),但似乎环境与传统JVM虚拟机不同,至少不支持java命令那一套。
搜了一下,Android端使用dalvik虚拟机,jar包对应的以dex包形式存在。
所以,中间还缺一套“翻译”程序。
这里要用到Android SDK开发工具,最好将dx.bat
所在目录设Path
环境变量。
这个目录一般是 {...}\sdk\build-tools\28.0.3(版本号)
- jar转dex
一行命令搞定dx --dex --output=test.dex test.jar
- 导入并运行
adb push test.dex /storage/self/primary/Download
adb shell
cd /storage/self/primary/Download
dalvikvm -cp test.dex nicelee.server.Test
依旧存在的问题
虽然初步试了一下,跑个小程序基本上没啥毛病。但仍然存在以下问题:
- 在没有root的情况下,使用shell调用
nohup dalvikvm...
存在权限问题,这就意味着只能连着USB调试吊着小程序,局限太大。 - 缺乏常见的vi/wget/curl等命令,阉割严重
- 没有一个像yum和apt-get的软件包管理器,c、python等环境不好配置,同时日常开发非常困难
综上,搜了一下,感觉Termux
还算不错,轻量级使用,配置一番基本上可以和用云服务器差不多。