gpt4 book ai didi

android - 使用 adb shell am start 启动 android 应用程序时出现错误 "activity class does not exist"

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:08:58 25 4
gpt4 key购买 nike

adb install-ing 我的应用程序后,我可以使用 adb shell pm list packages AppName 验证它是否存在:

package:air.com.client.AppName

所以我知道它在那里,但是当我尝试用 adb shell am start -a android.intent.action.MAIN -n air.com.client/.AppName 启动它时,我得到这个错误:

Starting: Intent { cmp=air.com.client/.AppName}

Error type 3

Error: Activity class {air.com.client/air.com.client.AppName} does not exist.

如果重要的话,正如您可能已经注意到的那样,这是一个打包为 Android 应用程序的 AIR 应用程序。有任何想法吗?我错过了什么地方吗?当我使用 aapt dump xmltree 时,我可以看到我的 .apk 在 intent-filter 节点中包含一个 android.intent.action.MAIN 条目,这是值得的。

最后,为了理智起见,使用相同的命令模板我可以毫无问题地启动设置应用程序:

adb shell am start -a android.intent.action.MAIN -n com.android.settings/.Settings

最佳答案

注意 applicationIdSuffix!!

build.gradle 中使用 applicationIdSuffix 后缀仅适用于您的应用程序 ID,不适用于生成的 .apk 中的实际包结构,这意味着引用您的 Activity 简短的方法(.MainActivity,而不是使用其完全限定的名称)会将应用程序 ID 后缀添加到 Activity 的路径中,因此 AS 将无法找到它。例如:

我的应用程序包名称是 my.application.package,我在我的应用程序模块的 build.gradle 中有这个:

buildTypes {

someBuildType {
[...]
applicationIdSuffix ".dev"
}
}

尝试执行时,让我们从命令行说MainActivity(位于根包中):

$ adb shell am start -n my.application.package.dev/.MainActivity

实际上解析为

$ adb shell am start -n my.application.package.dev/my.application.package.dev.MainActivity

但是MainActivity其实是位于my.application.package.MainActivity中,而不是在my.application.package.dev.MainActivity中,因为 applicationIdSuffix 只改变了应用程序 id,而不是实际的包结构,所以它会定位失败。

因此,您应该使用 Activity 的完全限定名称:

$ adb shell am start -n my.application.package.dev/my.application.package.MainActivity

关于android - 使用 adb shell am start 启动 android 应用程序时出现错误 "activity class does not exist",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20230285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com