我的项目构建路径上有一个库(jar)。项目使用以下意图访问jar中的MainActivity:
final Intent it = new Intent();
it.setClassName("com.example.lib", "com.example.lib.MainActivity");
startActivity(it);
它曾经工作了一段时间,但突然开始得到'ActivityNotFoundException:No Activity to found to Intent',我能够解决。但是现在我遇到了'java.lang.SecurityException:Permission Denial:start Intent'。
我已经尝试了所有关于stackoverflow的建议(检查清单文件中的重复项;将android:exported =“true”添加到lib清单; Eclipse>项目>清理;添加/修改'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 ProcessRecord{40dd3778 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&amp;不知何故,这解决了这个问题。意图活动启动时没有任何错误。 BUT ,这仅适用于AVD。在实际设备上,它仍然抛出相同的错误。我完全从设备上卸载了应用程序并重新安装了,但同样的错误。
答案 0 :(得分:116)
例外情况很明显。您需要在android:exported="true"
文件中设置AndroidManifest.xml
,并声明此Activity
。
修改
<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>
答案 1 :(得分:39)
所以我最近遇到了这个问题。问题出在构建/运行配置中。显然,android studio在我的项目中选择了一个活动作为启动活动,因此忽略了我在清单文件中的选择。
单击运行按钮左侧的模块名称,然后单击&#34;编辑配置...&#34;现在确保&#34;启动默认活动&#34;被选中。
当我收到此错误时,有趣的是我仍然可以从设备启动应用程序并从首选活动开始。但是从IDE启动似乎是不可能的。
答案 2 :(得分:28)
选择适当的配置以启动应用程序。
在我的情况下,我发现错误如下图所示:
我刚改变了:
愿它对某人有所帮助,谢谢:)
答案 3 :(得分:4)
在'com.example.lib.MainActivity'活动代码中添加android:exported =“true”。
来自android:exports文档,
机器人:导出 活动是否可以由其他应用程序的组件启动 - 如果可以,则为“true”,否则为“false”。如果为“false”,则活动只能由相同应用程序的组件或具有相同用户ID的应用程序启动。
从你的logcat输出中,显然uid中的不匹配导致了这个问题。所以添加android:exported =“true”应该可以解决问题。
答案 4 :(得分:2)
类似于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可能会覆盖或强制执行特定的启动活动?
答案 5 :(得分:1)
如果你试图通过你的Android手机测试你在Android工作室编码的应用程序,它通常是你的手机的问题。只需取消选中所有USB调试选项,并将开发人员选项切换为OFF。然后重新启动手机并打开开发人员和USB调试。你准备好了!
答案 6 :(得分:1)
我在一个本机反应项目上遇到了这个问题,它是在添加启动屏幕活动并将其设置为启动器活动之后发生的。
这是我在MainActivity配置上的Android清单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" />
答案 7 :(得分:0)
在我的情况下,此错误是由于在重命名项目后用于在我的首选项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>
更正路径名修复了问题。
答案 8 :(得分:0)
如果我们将特定activity
设为
android:exported="true"
这将是启动activity
。
单击运行button
左侧的模块名称,然后单击“编辑配置...”现在确保选中"Launch default Activity"
。
答案 9 :(得分:0)
最后不包含 .SplashActivity 的任何应用的 AppActivity 都会抛出这种类型的权限错误。确保 AppActivity 最后包含 .SplashActivity 。如果 .SplashActivity 不存在,则意味着应用不允许移动自动化