【问题标题】:java.lang.SecurityException will occur when tying to launch some applications with appium and adb使用 appium 和 adb 绑定启动某些应用程序时会发生 java.lang.SecurityException
【发布时间】:2019-07-05 22:40:28
【问题描述】:

我使用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: Permission Denial: Starting Intent 错误

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

另一个建议是尝试通过 adb (android device bridge) 启动应用程序,我尝试通过 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 启动任何应用程序吗?

【问题讨论】:

    标签: android adb appium


    【解决方案1】:

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

    您必须将主 appActivity 置于您想要的功能中。

    您可以使用以下方式找到应用活动:

    >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
    

    【讨论】:

    • 运行上述命令后,控制台中打印了六个活动,我使用列表中的第一个活动,脚本开始工作,有什么方法可以区分 mainActivity 形式休息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 2012-07-10
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 2016-04-08
    • 2011-04-16
    相关资源
    最近更新 更多