从adb shell运行基于android java的命令行实用程序

时间:2014-02-13 15:07:46

标签: java android shell adb dalvik

我正在尝试基于来自AOSP的java输入命令创建一个新的java命令行实用程序:(https://github.com/android/platform_frameworks_base/tree/master/cmds/input

我使用mmm编译了jar,然后通过ADB将其推送到Android设备。 然后我使用ADB shell执行命令:

export CLASSPATH = /sdcard/input2.jar
exec app_process / com.android.commands.input.Input

使用root设备,这非常有效,但当我尝试在非root设备上运行时,我在LOGCAT上遇到了这个异常:

E/dalvikvm(31966): Dex cache directory isn't writable: /data/dalvik-cache
I/dalvikvm(31966): Unable to open or create cache for /sdcard/input2.jar (/data/dalvik-cache/sdcard@input2.jar@classes.dex)
E/appproc(31966): ERROR: could not find class 'com.android.commands.input.Input'

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:5)

使用ADB shell,您可以将dalvik-cache目录设置为具有写权限的其他目录。

在执行模块之前尝试此操作:

  • mkdir / data / local / tmp / dalvik-cache
  • export ANDROID_DATA = / data / local / tmp

答案 1 :(得分:1)

您的新命令不是由Android程序包管理器管理的,这意味着VM将在首次运行命令时尝试创建/data/dalvik-cache条目。你需要成为root用户。

一个选项是将命令安装为普通应用程序,主活动并不真正执行任何操作,只需从包管理器选择安装jar文件的任何位置执行命令行入口点类。这还允许您从设置UI管理和卸载应用程序。

(如果您只是自己运行,而不是将其广泛分发给其他人,那么this post就有了解决方案。)