【问题标题】:Running android java based command-line utility from adb shell [duplicate]从 adb shell 运行基于 android java 的命令行实用程序 [重复]
【发布时间】:2014-03-12 13:11:16
【问题描述】:

我正在尝试基于来自 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

使用有根设备,这可以完美运行,但是当我尝试在非根设备上运行它时,我在 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'

有什么想法吗?

谢谢

【问题讨论】:

    标签: java android shell adb dalvik


    【解决方案1】:

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

    在执行你的模块之前试试这个:

    • mkdir /data/local/tmp/dalvik-cache
    • 导出 ANDROID_DATA=/data/local/tmp

    【讨论】:

      【解决方案2】:

      您的新命令未由 Android 包管理器管理,这意味着 VM 将在首次运行该命令时尝试创建 /data/dalvik-cache 条目。您需要成为 root 才能执行此操作。

      一种选择是像普通应用程序一样安装命令,主要活动不做任何事情,只需从包管理器选择安装 jar 文件的任何位置执行命令行入口点类.这还允许您从设置 UI 管理和卸载应用程序。

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

      【讨论】:

        猜你喜欢
        • 2011-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多