android - java.lang.SecurityException 在使用 appium 和 adb 绑定(bind)启动某些应用程序时会发生

标签 android adb appium

我使用 appium 编写了一个启动应用程序的基本脚本,它对某些应用程序非常有用,但当我尝试启动某些应用程序时它会出错 我用两个应用程序尝试了我的脚本

  1. Angry Birds Rio
  2. Medium App

我通过adb(android debug bridge)工具找到了appPackage和appActivity的值

愤怒的小鸟应用

mCurrentFocus=Window{11fff76 u0 com.rovio.angrybirdsrio/com.rovio.fusion.App}

中型应用

mCurrentFocus=Window{af3c82 u0 com.medium.reader/com.medium.android.donkey.read.HomeActivity5}

这是我写的脚本

public static void main(String[] args) throws MalformedURLException,InterruptedException {

    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability("platformName", "Android"); 
    capabilities.setCapability("platformVersion", "8.1.0");
    capabilities.setCapability("deviceName", "Android SDK built for x86");
    capabilities.setCapability("udid", "emulator-5554");
    capabilities.setCapability("appPackage", "com.medium.reader");
    capabilities.setCapability("appActivity", "com.medium.android.donkey.read.HomeActivity5 t69");
    capabilities.setCapability("noReset", "true");
    capabilities.setCapability("autoWebview", "true");

    URL url = new URL("http://0.0.0.0:4723/wd/hub");

    AppiumDriver<WebElement> driver  = new AndroidDriver<WebElement>(url,capabilities); 
    driver.context("com.medium.android.donkey.read.HomeActivity5");

} 

当我为 Angry Birds 应用程序使用 appPackage 和 appActivity 时,该应用程序将毫无问题地在模拟器中启动,但如果我为中型应用程序使用 appPackage 和 appActivity,脚本将给出 java .lang.SecurityException:权限拒绝:启动 Intent 错误

尝试解决问题后 I found out that我必须在 AndroidManifest.xml 中设置 android:exported="true",我不确定我是否可以这样做,因为我没有我试图自动化的任何应用程序的源代码

另一个建议是尝试通过 adb(android 设备桥)启动应用程序,我尝试通过 adb 启动两个应用程序应用程序,结果相同 Angry birds 应用程序已启动,没有任何问题,但 Medium 应用程序未在此处启动是错误

java.lang.SecurityException: Permission Denial: starting Intent { flg=0x10000000 cmp=com.medium.reader/com.medium.android.donkey.read.HomeActivity5 } from null (pid=16084, uid=2000) not exported from uid 10084
at com.android.server.am.ActivityStackSupervisor.checkStartAnyActivityPermission(ActivityStackSupervisor.java:1632)
at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:438)
at com.android.server.am.ActivityStarter.startActivityLocked(ActivityStarter.java:278)
at com.android.server.am.ActivityStarter.startActivityMayWait(ActivityStarter.java:817)
at com.android.server.am.ActivityManagerService.startActivityAndWait(ActivityManagerService.java:4625)
at com.android.server.am.ActivityManagerShellCommand.runStartActivity(ActivityManagerShellCommand.java:412)
at com.android.server.am.ActivityManagerShellCommand.onCommand(ActivityManagerShellCommand.java:141)
at android.os.ShellCommand.exec(ShellCommand.java:96)
at com.android.server.am.ActivityManagerService.onShellCommand(ActivityManagerService.java:15014)
at android.os.Binder.shellCommand(Binder.java:594)
at android.os.Binder.onTransact(Binder.java:492)
at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:4243)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2919)
at android.os.Binder.execTransact(Binder.java:697)

我可以通过 adb 或 appium 启动任何应用程序吗?

最佳答案

当您尝试启动不是主 Activity 的 appActivity 时,您会遇到这种错误。

You must put the main appActivity in your desired capability.

您可以使用以下方法查找应用 Activity :

>adb shell 
>dumpsys package | grep -i "app Package name here" | grep Activity

//对于你的情况,你可以使用:

>dumpsys package | grep -i com.rovio.angrybirdsrio | grep Activity
>dumpsys package | grep -i com.medium.reader | grep Activity

关于android - java.lang.SecurityException 在使用 appium 和 adb 绑定(bind)启动某些应用程序时会发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54647455/

相关文章:

android - 如何使用 adb 在 bash 脚本中以读写方式重新安装我的 Android/系统?

java - DOM 中不再存在移动元素 - selenium

android - 无法在 Android 的对话框中定位元素

android - AVD Manager - 不能再运行多个模拟器

java.lang.ClassCastException : android. os.BinderProxy 无法转换为 com.leonard.sg.okcoin.service.SyncAndTradeService$SyncAndTradeBinder

android - 在 adb shell 命令行中将 1 个命令的输出通过管道传输到其他命令

appium - 在真实设备上运行 appium 测试时日志中出现 "Permission to start activity denied"错误

android - 使用 opencv 在 Android 中进行阈值处理

android - Android 应用程序中的 Cookie 同意?

Android:如何通过adb清除应用程序缓存并保留用户数据?