プロジェクトのビルドパスにライブラリ(jar)があります。プロジェクトは、次の目的を使用して、jar内のMainActivityにアクセスします。
final Intent it = new Intent();
it.setClassName("com.example.lib", "com.example.lib.MainActivity");
startActivity(it);
以前は機能していましたが、突然「ActivityNotFoundException:No Activity found to Intent」を取得し始めましたが、解決できました。しかし、今では「Java.lang.SecurityException:Permission Denial:starting Intent」で立ち往生しています。
私はstackoverflowで行われたすべての提案を試しました(マニフェストファイルの重複を確認してください.Android:exported = "true"をlibマニフェストに追加してください; 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 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を他のすべてのアクティビティで更新し、なんとかして問題を解決しました。インテントアクティビティがエラーなしで起動します。 しかし、これはAVDのみです。実際のデバイスでは、同じエラーが引き続き発生しています。デバイスからアプリを完全にアンインストールして再インストールしましたが、同じエラーが発生しました。
例外は明らかです。このActivity
を宣言するAndroid:exported="true"
ファイルにAndroidManifest.xml
を設定する必要があります。
編集
<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>
だから私は最近この問題に遭遇しました。問題はビルド/実行構成にありました。どうやらAndroidスタジオは起動アクティビティとして私のプロジェクトのアクティビティを選択したため、マニフェストファイルでの選択は無視されました。
実行ボタンの左側にあるモジュール名をクリックして、「構成の編集...」をクリックします。「デフォルトのアクティビティの起動」が選択されていることを確認します。
このエラーが発生したときの面白いことは、デバイスからアプリを起動でき、優先アクティビティで起動することです。しかし、IDEからの起動は不可能に思えました。
アプリケーションを起動するための適切な構成を選択します。
私の場合、私は以下の画像のような間違いを見つけました:
私はちょうど次のように変更しました:
それが誰かに役立つように、ありがとう:)
'com.example.lib.MainActivity'アクティビティタグにAndroid:exported = "true"を追加します。
Android:exported documentationから、
Android:exportedアクティビティを他のアプリケーションのコンポーネントで起動できるかどうか-可能な場合は「true」、そうでない場合は「false」。 「false」の場合、アクティビティは、同じアプリケーションのコンポーネントまたは同じユーザーIDを持つアプリケーションによってのみ起動できます。
Logcatの出力から、明らかにuidの不一致が問題の原因です。そのため、Android:exported = "true"を追加するとうまくいきます。
ADTの構成ファイルに関するOlayinkaの回答と同様に、IntelliJのIdeaU v14でも同じ問題が発生しました。
開始アクティビティをMyActivity
からMyListActivity
に変更するチュートリアルを進めています(これはMyActivity
のリストです)。許可拒否を取得し始めました。
多くの試行錯誤の後、苦労と痛み:.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が特定の開始アクティビティをオーバーライドまたは強制している可能性がありますか?
Android studioでコード化されたアプリをAndroid電話でテストしようとしている場合、通常は電話の問題です。すべてのUSBデバッグオプションのチェックを外し、開発者オプションをオフに切り替えます。次に、電話機を再起動し、開発者とUSBデバッグをオンにします。準備ができました!
私の場合、このエラーは、プロジェクトの名前を変更した後、プリファレンス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>
パス名を修正すると、問題が修正されました。
特定のactivity
を次のようにすると
Android:exported="true"
起動するactivity
になります。実行button
のすぐ左にあるモジュール名をクリックし、「構成の編集...」をクリックします。ここで"Launch default Activity"
が選択されていることを確認してください。