1

我正在尝试通过 adb shell 为一个应用程序(我没有写,以防你想知道)启动一个活动。清单有以下几行:

    <activity android:label="@string/app_name" android:name="MainActivity$mainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

我试过使用命令

adb shell am start -W com.pkg.name/MainActivity$mainActivity
adb shell am start -W com.pkg.name/.MainActivity$mainActivity
adb shell am start -W com.pkg.name/.MainActivity
adb shell am start -a android.intent.action.MAIN -n com.pkg.name/MainActivity$mainActivity
adb shell am start -n com.pkg.name/MainActivity$mainActivity
etc...

每个人都给我错误:

Error type 3
Error: Activity class {com.pkg.name/com.pkg.name.MainActivity}
does not exist.

但是,当单击模拟器中的应用程序图标时,它确实有效,并且通过 grepping logcat 输出,我发现正在启动的活动被称为.MainActivity$mainActivitor .MainActivity,它们都显示在输出中。有人可以告诉我为什么am start不工作以及如何在不手动单击图标的情况下启动此活动吗?

更新: laalto 给出的解决方案几乎是正确的。事实证明,将其$解析为环境变量是一个问题,但是他建议的命令并没有完全做到这一点。<pkgname/activityname>除了转义之外,您还需要在 to 周围加上单引号$

4

2 回答 2

4

在类 unix 的 shell 中,$是一个 shell 元字符,因此$mainActivity扩展为环境变量mainActivity持有的任何值,在您的情况下可能是一个空值。

要转义它,请使用反斜杠:

adb shell am start -W com.pkg.name/.MainActivity\$mainActivity

但是,将内部类作为入口点有点代码味道。考虑将外部类作为您的切入点。那么你就不需要$任何形式了。

于 2014-09-11T13:08:21.660 回答
0
am start -n com.pkg.name/com.package.name.MainActivity$mainActivity

祝你好运

于 2015-09-06T17:28:23.817 回答