NiceLeeのBlog 用爱发电 bilibili~

旧手机废物利用(1)-shell环境运行Java工程

2019-09-05
nIceLee

阅读:


最近尝试将旧的手机当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还算不错,轻量级使用,配置一番基本上可以和用云服务器差不多。


内容
隐藏