【问题标题】:Android Automation Error Displayed: "Security exception: Permission Denial: starting Intent"显示 Android 自动化错误:“安全异常:权限拒绝:启动 Intent”
【发布时间】:2019-06-27 16:55:35
【问题描述】:

使用 appium/selenium 自动化脚本测试了多个 android 本机应用程序,但没有一个应用程序被打开并收到以下错误消息

Stderr: 'Security exception: Permission Denial: 从 null (pid=20930, uid=2000) 开始 Intent 未从 uid 10178 导出'

所需功能设置正确,但没有打开任何应用程序。

DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability("deviceName", "Mobile");
        caps.setCapability("udid", "520042c3b5e5"); 
        caps.setCapability("platformName", "Android");
        caps.setCapability("platformVersion", "8.0.0"); 
        caps.setCapability("appPackage", "in.amazon.mShop.android.shopping");
        caps.setCapability("appActivity", "com.amazon.mShop.home.web.MShopWebGatewayActivity");
        caps.setCapability("noReset", "true");          

        //Instantiate Appium Driver
        try 
        {
            AppiumDriver<MobileElement> driver = new AndroidDriver<MobileElement>(new URL("http://0.0.0.0:4723/wd/hub"), caps);
        } 
        catch (MalformedURLException e) 
        {
            System.out.println(e.getMessage());
        }

Amazon 移动应用程序应该会打开,但会显示安全异常:Permission Denial 错误消息。

通过更改应用程序包和活动来尝试其他本机应用程序,但所有尝试的应用程序仍然出现相同的错误。

网上很少有解决方案说要在AndroidManifest.xml 中编辑导出字段。这个文件在哪里可以找到?

Appium 版本 - 1.10.0 Java - JDK 1.8

【问题讨论】:

    标签: java android selenium-webdriver automation appium-android


    【解决方案1】:

    official documentation 导出的属性在以下情况下的作用:

    • android:exported = true -> 广播接收器能够接收来自应用程序外部来源的消息

    • android:exported = false ->广播接收者只能接收来自应用本身的消息

    您可以在 AndroidManifest.xml 文件中的&lt;activity&gt; 元素标签内添加exported 属性,如下所示:

     <activity android:name=".MainActivity"
            android:exported="true"> 
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
    
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
     </activity>
    

    【讨论】:

    • 我无法找到 AndroidManifest.xml。你能指导我找到文件吗?应该为每个应用单独进行此更新,还是在适用于所有应用的单个通用文件中进行更新。
    • AndroidManifest.xml 文件位于每个应用项目的根目录。这需要为每个应用单独完成。
    • 谢谢布莱恩。可以使用 adb 命令从命令提示符访问该文件,还是有其他方法可以做到这一点?我还没有对此进行在线搜索,但仍然请求您。
    • 如果应用程序是你的,这将是合适的,因为你可以在你的项目中找到它。我没有用其他开发人员的应用程序尝试过这个,因为你会重新编译。但是,如果您的计算机中有.apk 文件,您可以将其重命名为.zip 文件并在那里提取文件。之后,您将看到AndroidManifest.xml 文件。希望这会有所帮助
    • 如果答案对您有所帮助,请考虑勾选绿色检查以帮助其他寻求相同的人
    【解决方案2】:

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

    您必须将主 appActivity 置于所需的功能中。

    当开发人员在应用中添加启动画面并更改主应用活动时,我也遇到了类似的问题。

    【讨论】:

    • 谢谢苏班。您能否指导我获取主要应用活动。
    • 你可以使用adb shell dumpsys包| grep -i " (输入包名) " | grep Activity 命令查找主要活动。您需要在编写脚本后运行您的应用程序
    • 非常感谢。我在调试模式下在 android studio 中打开了该应用程序,以从 AndroidManifest.xml 中查找主要活动。问题问题现已解决。
    猜你喜欢
    • 2013-06-05
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多