android - 无法让这个 adb shell am start 行工作

标签 android adb

我正在尝试在我的模拟器上启动这个应用程序。这是我的 adb shell am 开始行

C:\Users\harvey\AndroidStudioProjects\Sunshinea1>adb shell am start -n com.example.harvey.Sunshinea1app/com.example.harvey.Sunshinea1app.MainActivity
WARNING: linker: libdvm.so has text relocations. This is wasting memory and is a security risk. Please fix.
Starting: Intent { cmp=com.example.harvey.Sunshinea1app/.MainActivity }
Error type 3
Error: Activity class {com.example.harvey.Sunshinea1app/com.example.harvey.Sunshinea1app.MainActivity} does not exist.

C:\Users\harvey\AndroidStudioProjects\Sunshinea1>

我知道警告不是这样的问题,但该消息的 MainActivity 不存在部分指向一个问题,该问题正在阻止命令启动程序。

我知道我在路径或名称方面有问题,但我看不出是什么。我想我对什么是什么感到有点困惑。毫无疑问,我在某处写错了路径,但我不知道在哪里。

这是一个目录 Sunshine*/s/b

我想它可能会提供一些信息,这些信息可能有助于确定该 adb 行应该是什么。如果您需要任何其他信息,请发表评论让我知道。

C:\Users\harvey\AndroidStudioProjects\Sunshinea1>dir Sunshine*.* /s/b
C:\Users\harvey\AndroidStudioProjects\Sunshinea1\Sunshinea1.iml
C:\Users\harvey\AndroidStudioProjects\Sunshinea1\app\build\generated\source\buildConfig\debug\com\example\harvey\sunshinea1app
C:\Users\harvey\AndroidStudioProjects\Sunshinea1\app\build\generated\source\buildConfig\debug\com\example\harvey\sunshinea1app\sunshinea1
C:\Users\harvey\AndroidStudioProjects\Sunshinea1\app\build\generated\source\buildConfig\test\debug\com\example\harvey\sunshinea1app
C:\Users\harvey\AndroidStudioProjects\Sunshinea1\app\build\generated\source\buildConfig\test\debug\com\example\harvey\sunshinea1app\sunshinea1
C:\Users\harvey\AndroidStudioProjects\Sunshinea1\app\build\generated\source\r\debug\com\example\harvey\sunshinea1app
C:\Users\harvey\AndroidStudioProjects\Sunshinea1\app\build\generated\source\r\debug\com\example\harvey\sunshinea1app\sunshinea1
C:\Users\harvey\AndroidStudioProjects\Sunshinea1\app\build\intermediates\classes\debug\com\example\harvey\sunshinea1app
C:\Users\harvey\AndroidStudioProjects\Sunshinea1\app\build\intermediates\classes\debug\com\example\harvey\sunshinea1app\sunshinea1
C:\Users\harvey\AndroidStudioProjects\Sunshinea1\app\src\androidTest\java\com\example\harvey\sunshinea1app
C:\Users\harvey\AndroidStudioProjects\Sunshinea1\app\src\androidTest\java\com\example\harvey\sunshinea1app\sunshinea1
C:\Users\harvey\AndroidStudioProjects\Sunshinea1\app\src\main\java\com\example\harvey\sunshinea1app
C:\Users\harvey\AndroidStudioProjects\Sunshinea1\app\src\main\java\com\example\harvey\sunshinea1app\sunshinea1

C:\Users\harvey\AndroidStudioProjects\Sunshinea1>

编辑 收到此错误

C:\Users\harvey\AndroidStudioProjects\Sunshinea1>adb shell monkey -p com.example.harvey.Sunshinea1app -c android.intent.category.LAUNCHER 1
WARNING: linker: libdvm.so has text relocations. This is wasting memory and is a security risk. Please fix.
** No activities found to run, monkey aborted.

C:\Users\harvey\AndroidStudioProjects\Sunshinea1>

看了 carlo 的回答,我决定在问题中包含我的包名,这个来自 MainActivity.java

至于我的包名

C:\>type C:\Users\harvey\AndroidStudioProjects\Sunshinea1\app\src\main\java\com\exampl
e\harvey\sunshinea1app\sunshinea1\MainActivity.java | grep package

package com.example.harvey.sunshinea1app.sunshinea1;

C:\>

所以现在我修改了 adb shell monkey 行中的包行

C:\>adb shell monkey -p com.example.harvey.sunshinea1app.sunshinea1 -c android.intent.
category.LAUNCHER 1
WARNING: linker: libdvm.so has text relocations. This is wasting memory and is a secur
ity risk. Please fix.
Events injected: 1
## Network stats: elapsed time=85ms (0ms mobile, 0ms wifi, 85ms not connected)

adb shell monkey 行现在可以工作了..

C:\>adb devices
List of devices attached
emulator-5554   device


C:\>

但是 adb shell am 行不是

C:\Users\harvey\AndroidStudioProjects\Sunshinea1>dir MainActivity.class /s/b
C:\Users\harvey\AndroidStudioProjects\Sunshinea1\app\build\intermediates\classes\debug\com\example\harvey\sunshinea1app\sunshinea1\MainActivity.class

C:\Users\harvey\AndroidStudioProjects\Sunshinea1>

尝试在 adb shell am 启动

C:\Users\harvey\AndroidStudioProjects\Sunshinea1>adb shell am start -n com.example.harvey.sunshinea1app/com.example.harvey.sunshinea1app.MainActivity
WARNING: linker: libdvm.so has text relocations. This is wasting memory and is a security risk. Please fix.
Starting: Intent { cmp=com.example.harvey.sunshinea1app/.MainActivity }
Error type 3
Error: Activity class {com.example.harvey.sunshinea1app/com.example.harvey.sunshinea1a
pp.MainActivity} does not exist.

C:\Users\harvey\AndroidStudioProjects\Sunshinea1>adb shell am start -n com.example.harvey.sunshinea1app/com.example.harvey/.sunshinea1app/.MainActivity
WARNING: linker: libdvm.so has text relocations. This is wasting memory and is a security risk. Please fix.
Starting: Intent { cmp=com.example.harvey.sunshinea1app/com.example.harvey/.sunshinea1
app/.MainActivity }
Error type 3
Error: Activity class {com.example.harvey.sunshinea1app/com.example.harvey/.sunshinea1
app/.MainActivity} does not exist.

C:\Users\harvey\AndroidStudioProjects\Sunshinea1>

我检查了这个问题

error "activity class does not exist" when launching android app with adb shell am start

有检查 logcat 的想法 然后根据输出执行 adb shell am 然后 -a(对于 act= 之后的内容)-c(对于 cat= 之后的内容)和 -n(对于 cmp= 之后的内容)..

02-09 18:04:05.763    1277-1288/? I/ActivityManager﹕ START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.example.harvey.sunshinea1app.sunshinea1/.MainActivity} from pid 1781

但是没用

目录 MainActivity.class/s/b 显示 MainActivity.class 存储在这里

C:\Users\harvey\AndroidStudioProjects\Sunshinea1\app\build\intermediates\classes\debug\com\example\harvey\sunshinea1app\sunshinea1\MainActivity.class

我使用 -a -c 和 -n 运行 adb shell am start 命令,但它没有找到该类

C:\>adb shell am start -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -n com.example.harvey.sunshinea1app.sunshinea1/.MainActivity
WARNING: linker: libdvm.so has text relocations. This is wasting memory and is a security risk. Please fix.
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.harvey.sunshinea1app.sunshinea1/.MainActivity }
Error type 3
Error: Activity class {com.example.harvey.sunshinea1app.sunshinea1/com.example.harvey.
sunshinea1app.sunshinea1.MainActivity} does not exist.

C:\>

尝试评论中的建议

C:\>adb shell am start -n com.example.harvey.sunshinea1app/com.example.harvey/.sunshinea1app.MainActivity
WARNING: linker: libdvm.so has text relocations. This is wasting memory and is a security risk. Please fix.
Starting: Intent { cmp=com.example.harvey.sunshinea1app/com.example.harvey/.sunshinea1
app.MainActivity }
Error type 3
Error: Activity class {com.example.harvey.sunshinea1app/com.example.harvey/.sunshinea1app.MainActivity} does not exist.

C:\>

评论中建议的更好的尝试,但仍然失败

C:\>adb shell am start -n com.example.harvey.sunshinea1app/.sunshinea1.MainActivity
WARNING: linker: libdvm.so has text relocations. This is wasting memory and is a security risk. Please fix.
Starting: Intent { cmp=com.example.harvey.sunshinea1app/.sunshinea1.MainActivity }
Error type 3
Error: Activity class {com.example.harvey.sunshinea1app/com.example.harvey.sunshinea1app.sunshinea1.MainActivity} does not exist.

C:\>

这是一张来自 devtools 包管理器的 sunsunesa1 应用程序的图片,我正在尝试执行 adb shell am start。

enter image description here

最佳答案

您可以使用以下命令启动应用程序,该命令只需要应用程序的包名称:

adb shell monkey -p com.example.harvey.Sunshinea1app -c android.intent.category.LAUNCHER 1

至于为什么你的命令不起作用,我无法从提供的信息中判断出来,但我怀疑问题出在你的包结构中 MainActivity 类所在的位置。如果 MainActivity 类位于 com.example.harvey.sunshinea1app.sunshinea1 中,那么您将需要以下命令:

adb shell am start -n com.example.harvey.sunshinea1app/.sunshinea1.MainActivity

还要确保您使用的包名称正确且字母大小写正确。

由 barlop 编辑
Carlo 在评论中指出,它有效-

adb shell am start -n com.example.harvey.sunshinea1app.sunshinea1/.MainActivity

关于android - 无法让这个 adb shell am start 行工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28388523/

相关文章:

android - 如何使用 adb intent 关闭 android keyguard

android - 运行为 : Could not set capabilities: Operation not permitted

android:以编程方式通过USB将sqlite数据库从PC传输到设备

android - 将文件夹从 Android 应用程序复制到本地 Windows 目录

当编辑文本内容增加时,Android 标题栏会被推高

android - 在未知数量的 RecyclerView 数据更改(插入、删除、更新)时,如何在视觉上保持相同的滚动位置?

android - 在我的应用程序中实现设置为图片按钮

android - ADB 未启动(无错误消息)

android - 文本选择器组件

java - 使用 native 语言为 C 或 C++ 的 JNI 接口(interface)在 Java 中实现 USB 通信是个好主意吗?