我使用 appium 编写了一个启动应用程序的基本脚本,它对某些应用程序非常有用,但当我尝试启动某些应用程序时它会出错 我用两个应用程序尝试了我的脚本
我通过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/