我开始找不到清单中列出的主要活动

时间:2014-09-11 13:04:37

标签: android android-activity adb activity-manager

我正在尝试通过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.

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

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

2 个答案:

答案 0 :(得分:4)

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

要逃避它,请使用反斜杠:

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

然而,将内部类作为入口点是一种代码味道。考虑将外部类作为入口点。那么你不需要任何形式的$

答案 1 :(得分:0)

am start -n com.pkg.name/com.package.name.MainActivity$mainActivity
祝你好运