You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Appium自动化APK时遭遇SecurityException权限拒绝问题求助

Appium启动APK时遇到SecurityException权限拒绝问题

错误日志

Exception occurred while executing 'start':
[debug] [W3C] java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.pnr.engproverbsandsayings/.EngProverbsActivity } from null (pid=10400, uid=2000) not exported from uid 10151
[debug] [W3C]     at com.android.server.wm.ActivityTaskSupervisor.checkStartAnyActivityPermission(ActivityTaskSupervisor.java:1047)
[debug] [W3C]     at com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:975)
[debug] [W3C]     at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:665)
[debug] [W3C]     at com.android.server.wm.ActivityTaskManagerService.startActivityAndWait(ActivityTaskManagerService.java:1441)
[debug] [W3C]     at com.android.server.am.ActivityManagerService.startActivityAndWait(ActivityManagerService.java:2935)

执行的Java代码

AppiumDriver<MobileElement> driver = null;
DesiredCapabilities desiredCapabilities = new DesiredCapabilities();

desiredCapabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "ANDROID");
desiredCapabilities.setCapability("appPackage", "com.pnr.engproverbsandsayings");
desiredCapabilities.setCapability("appActivity", "com.pnr.engproverbsandsayings.EngProverbsActivity");
    
try {
    URL url = new URL("http://127.0.0.1:4723/wd/hub");
    driver = new AndroidDriver<MobileElement>(url, desiredCapabilities);
    System.out.println("Appium started");
} catch (Exception e) {
    System.out.println(e.getMessage());
}

对应APK的AndroidManifest.xml内容

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MyApplication">
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:label="@string/app_name"
            android:theme="@style/Theme.MyApplication.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

已尝试情况

已尝试过相关解决方案,但均无效,现寻求有效解决方法。


解决方法

1. 修正目标Activity的导出配置

错误核心是EngProverbsActivity未设置android:exported="true",从你提供的Manifest来看,只有.MainActivity被标记为可导出,而你要启动的目标Activity不在配置列表中。

如果是你自行开发的APK,直接修改Manifest,给EngProverbsActivity添加导出属性:

<activity
    android:name=".EngProverbsActivity"
    android:exported="true">
</activity>

2. 改用正确的启动入口Activity

如果无法修改APK,或者EngProverbsActivity并非应用入口,直接使用Manifest中配置的Launcher Activity启动:
修改代码中的appActivity参数:

desiredCapabilities.setCapability("appActivity", "com.pnr.engproverbsandsayings.MainActivity");

注意:你代码中的appPackage是com.pnr.engproverbsandsayings,但Manifest的package是com.example.myapplication,二者存在不一致,必须以APK实际的package为准,可通过aapt工具验证。

3. 用aapt工具确认APK真实信息

如果不确定APK的正确包名和启动Activity,执行以下命令查询:

aapt dump badging 你的APK文件路径.apk | grep "package:"
aapt dump badging 你的APK文件路径.apk | grep "launchable-activity:"

将查询结果直接替换代码中的appPackage和appActivity。

4. 添加额外启动参数

如果以上方法无效,尝试添加权限自动授予和不重置应用状态的参数:

desiredCapabilities.setCapability("autoGrantPermissions", true);
desiredCapabilities.setCapability("noReset", true);

内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 21:36:33