Android - java.lang.SecurityException:权限拒绝:启动意图

Posted

技术标签:

【中文标题】Android - java.lang.SecurityException:权限拒绝:启动意图【英文标题】:Android - java.lang.SecurityException: Permission Denial: starting Intent 【发布时间】:2013-11-18 17:14:54 【问题描述】:

我的项目的构建路径上有一个库 (jar)。该项目使用以下意图访问 jar 中的 MainActivity:

final Intent it = new Intent();
it.setClassName("com.example.lib", "com.example.lib.MainActivity");
startActivity(it);

它曾经工作了一段时间,但突然开始出现“ActivityNotFoundException:找不到处理 Intent 的活动”,我能够解决这个问题。但现在我遇到了“java.lang.SecurityException:Permission Denial:starting Intent”。

我已经尝试了关于 *** 的所有建议(检查清单文件中的重复项;将 android:exported="true" 添加到 lib manifest;Eclipse> Project> Clean;添加/修改“intent-filter”标签;等等) .我什至尝试重写项目的清单,但没有去任何地方。

这是 logcat 的输出:

11-07 06:20:52.176: E/AndroidRuntime(4626): FATAL EXCEPTION: main
11-07 06:20:52.176: E/AndroidRuntime(4626): java.lang.SecurityException: Permission     Denial: starting Intent  cmp=com.example.lib/.MainActivity  from ProcessRecord40dd3778     4626:com.example.project/u0a10046 (pid=4626, uid=10046) not exported from uid 10047
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.os.Parcel.readException(Parcel.java:1425)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.os.Parcel.readException(Parcel.java:1379)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1885)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1412)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.app.Activity.startActivityForResult(Activity.java:3370)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.app.Activity.startActivityForResult(Activity.java:3331)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:824)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.app.Activity.startActivity(Activity.java:3566)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.app.Activity.startActivity(Activity.java:3534)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.example.project.MainActivity.onOptionsItemSelected(MainActivity.java:93)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.app.Activity.onMenuItemSelected(Activity.java:2548)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:366)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:980)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:547)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:115)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.view.View.performClick(View.java:4204)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.view.View$PerformClick.run(View.java:17355)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.os.Handler.handleCallback(Handler.java:725)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.os.Handler.dispatchMessage(Handler.java:92)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.os.Looper.loop(Looper.java:137)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.app.ActivityThread.main(ActivityThread.java:5041)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at java.lang.reflect.Method.invokeNative(Native Method)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at java.lang.reflect.Method.invoke(Method.java:511)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at dalvik.system.NativeStart.main(Native Method)

项目的清单 XML:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.project"
android:versionCode="4"
android:versionName="4.0" >

<!-- Permissions -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<supports-screens android:anyDensity="true" />

<!-- SDK Settings -->
<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="18" />

<!-- APP Start -->
<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

<!-- App Activity -->
    <activity
        android:name="com.example.project.MainActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

<!-- Library Activity -->
    <activity android:name="com.example.lib.MainActivity" android:label="LibMain">
         <intent-filter>
        <action android:name="android.intent.action.MAIN"></action>
     </intent-filter>
    </activity>

</application>
<!-- END - APP -->

</manifest>

我忽略了什么?有什么建议吗?

编辑

我用所有其他活动更新了 manifest.xml,并以某种方式解决了问题。意图活动启动时没有任何错误。 但是,这仅在 AVD 上。在实际设备上,它仍然抛出相同的错误。我已经从设备上完全卸载了该应用程序并重新安装,但同样的错误。

【问题讨论】:

也尝试过:项目> Java 构建路径> 订单和导出> 在 jar 文件上打勾> 项目清理 - 打开意图时出现同样的错误。 ***.com/a/8784878/2624806 可以在这里提供帮助 【参考方案1】:

您需要在您声明此ActivityAndroidManifest.xml 文件中设置android:exported="true"

<activity
    android:name="com.example.lib.MainActivity"
    android:label="LibMain" 
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" >
        </action>
    </intent-filter>
</activity>

【讨论】:

试过这个。我在&lt;activity android:name="com.example.lib.MainActivity"下的项目manifest.xml文件中添加了android:exported="true"。给我同样的错误。 删除 intent-filter 并重试。 清单中的活动现在看起来像这样:&lt;activity "com.example.lib.MainActivity" android:label="LibMain" android:exported="true"&gt; &lt;/activity&gt; 仍然是同样的错误 试试it.setComponent(new ComponentName("com.example.lib", "com.example.lib.MainActivity"));而不是it.setClassName 使用 Appium 执行时如何避免这种情况?【参考方案2】:

这仅适用于安卓工作室

所以我最近遇到了这个问题。问题出在构建/运行配置中。显然,android studio 在我的项目中选择了一个活动作为启动活动,因此忽略了我在清单文件中的选择。

单击运行按钮左侧的模块名称,然后单击“编辑配置...”现在确保选择“启动默认活动”。

当我收到此错误时,有趣的是我仍然可以从设备启动应用程序,并且它以首选 Activity 启动。但是从 IDE 启动似乎是不可能的。

【讨论】:

thnx 兄弟...它起作用了...有时小问题会变得很大...但我学到了一些叫做 android:export = true..thnx 呸,我也遇到了这个问题(在猫睡在键盘上之后)。花了很长时间才找到问题。不过,这只猫很容易找到。【参考方案3】:

为启动应用程序选择正确的配置。

在我的情况下,我发现错误如下图:

我刚刚改变了:

希望对某人有所帮助,谢谢:)

【讨论】:

【参考方案4】:

在您的“com.example.lib.MainActivity”活动标签中添加 android:exported="true"。

来自 android:exported 文档,

安卓:已导出 Activity 是否可以由其他应用程序的组件启动 - 如果可以,则为“true”,否则为“false”。如果为“false”,则该活动只能由同一应用程序的组件或具有相同用户 ID 的应用程序启动。

从您的 logcat 输出来看,显然是 uid 不匹配导致了问题。所以添加 android:exported="true" 应该可以解决问题。

【讨论】:

【参考方案5】:

我在一个 react-native 项目中遇到了这个问题,它是在添加一个启动屏幕活动并将其设置为启动器活动之后出现的。

这是我在 MainActivity 配置上的 android manifest XML 文件中所做的更改。

<activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
        android:windowSoftInputMode="adjustResize"/>
      <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />

我添加了android:exported=true 并且活动配置看起来像这样。

 <activity
        android:name=".MainActivity"
        android:exported="true"
        android:label="@string/app_name"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
        android:windowSoftInputMode="adjustResize"/>
      <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
   

【讨论】:

【参考方案6】:

类似于 Olayinka 关于 ADT 配置文件的回答:我刚刚在 IntelliJ 的 IdeaU v14 上遇到了同样的问题。

我正在完成一个教程,该教程让我将起始活动从MyActivity 更改为MyListActivity(这是MyActivity 的列表)。我开始收到 Permissions Denial。

历经千辛万苦:在.idea\workspace.xml中:

...
<configuration default="false" name="MyApp" type="AndroidRunConfigurationType" factoryName="Android Application">
    <module name="MyApp" />
    <option name="ACTIVITY_CLASS" value="com.domain.MyApp.MyActivity" />
    ...
</configuration>
...

我将MyActivity 更改为MyListActivity,重新加载了项目,然后我又开始滚动了。

不确定您使用的是哪个 IDE,但可能您的 IDE 正在覆盖或强制执行特定的启动活动?

【讨论】:

【参考方案7】:

如果您尝试通过您的 android 手机测试您在 android studio 中编码的应用,这通常是您手机的问题。只需取消选中所有 USB 调试选项并将开发人员选项切换为关闭即可。然后重启手机,打开开发者和USB调试。你准备好了!

【讨论】:

【参考方案8】:

在我的情况下,这个错误是由于在我重命名项目后用于在我的首选项 xml 文件中指定意图的路径不正确。例如,我有:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <Preference
        android:key="pref_edit_recipe_key"
        android:title="Add/Edit Recipe">
        <intent
            android:action="android.intent.action.VIEW"
            android:targetPackage="com.ssimon.olddirectory"
            android:targetClass="com.ssimon.olddirectory.RecipeEditActivity"/>
    </Preference>
</PreferenceScreen> 

我需要以下内容:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <Preference
        android:key="pref_edit_recipe_key"
        android:title="Add/Edit Recipe">
        <intent
            android:action="android.intent.action.VIEW"
            android:targetPackage="com.ssimon.newdirectory"
            android:targetClass="com.ssimon.newdirectory.RecipeEditActivity"/>
</Preference>

更正路径名解决了问题。

【讨论】:

【参考方案9】:

如果我们将特定的activity 设为

android:exported="true"

这将是启动activity。 单击运行button 左侧的模块名称,然后单击“编辑配置...”现在确保选择了"Launch default Activity"

【讨论】:

【参考方案10】:

任何最后不包含 .SplashActivity 的应用的 AppActivity 都会抛出这种类型的权限错误。确保 AppActivity 最后包含 .SplashActivity。如果 .SplashActivity 不存在,则表示应用不允许移动自动化

【讨论】:

嗨。欢迎来到 ***。您能否更清楚地说明您的问题是什么?

以上是关于Android - java.lang.SecurityException:权限拒绝:启动意图的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

android 21 是啥版本

Android逆向-Android基础逆向(2-2)

【Android笔记】android Toast

图解Android - Android核心机制

Android游戏开发大全的目录