AndroidManifest.xmlは記載してるのに、ActivityNotFoundException

6,535 views
Skip to first unread message

安藤呂井土

unread,
Aug 15, 2013, 10:14:08 PM8/15/13
to android-g...@googlegroups.com
度々質問ですみません。
AndroidManifest.xmlは記載してるのに、ActivityNotFoundExceptionになりました。
「have you declared this activity in your AndroidManifest.xml?」と言われています。
かれこれ1時間ほど悩んでますが解決しません。
凡ミスのような気がするので申し訳ないのですが、原因をご教示頂けますでしょうか。

尚、起動元のパッケージと起動先のパッケージは異なります。
ソースとmanifestを添付します。
問題のsrcとManifest.zip:本件のエラーが起きるソースとManifest。
別アプリのsrcとManifest.zip:別アプリ(正常に画面遷移出来る)のソースとManifest。参考程度。起動元と先が同一パッケージ。

◆AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.apitest.main"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" android:debuggable="true">
        <activity
            android:name="com.apitest.main.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.apitest.toj.TojGps"></activity> ← 書いてるのに...
        <activity android:name="com.apitest.toj.TojTimer"></activity>
    </application>

</manifest>


◆logcat
08-16 10:48:17.648: E/AndroidRuntime(2772): FATAL EXCEPTION: main
08-16 10:48:17.648: E/AndroidRuntime(2772): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.apitest.toj/com.apitest.toj.TojGps}; have you declared this activity in your AndroidManifest.xml?
08-16 10:48:17.648: E/AndroidRuntime(2772):     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1404)
08-16 10:48:17.648: E/AndroidRuntime(2772):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378)
08-16 10:48:17.648: E/AndroidRuntime(2772):     at android.app.Activity.startActivityForResult(Activity.java:2817)
08-16 10:48:17.648: E/AndroidRuntime(2772):     at android.app.Activity.startActivity(Activity.java:2923)
08-16 10:48:17.648: E/AndroidRuntime(2772):     at com.apitest.main.MainActivity$1.onItemClick(MainActivity.java:33)
08-16 10:48:17.648: E/AndroidRuntime(2772):     at android.widget.AdapterView.performItemClick(AdapterView.java:284)
08-16 10:48:17.648: E/AndroidRuntime(2772):     at android.widget.ListView.performItemClick(ListView.java:3382)
08-16 10:48:17.648: E/AndroidRuntime(2772):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2397)
08-16 10:48:17.648: E/AndroidRuntime(2772):     at android.os.Handler.handleCallback(Handler.java:587)
08-16 10:48:17.648: E/AndroidRuntime(2772):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-16 10:48:17.648: E/AndroidRuntime(2772):     at android.os.Looper.loop(Looper.java:123)
08-16 10:48:17.648: E/AndroidRuntime(2772):     at android.app.ActivityThread.main(ActivityThread.java:4627)
08-16 10:48:17.648: E/AndroidRuntime(2772):     at java.lang.reflect.Method.invokeNative(Native Method)
08-16 10:48:17.648: E/AndroidRuntime(2772):     at java.lang.reflect.Method.invoke(Method.java:521)
08-16 10:48:17.648: E/AndroidRuntime(2772):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:870)
08-16 10:48:17.648: E/AndroidRuntime(2772):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)
08-16 10:48:17.648: E/AndroidRuntime(2772):     at dalvik.system.NativeStart.main(Native Method)

問題のsrcとManifest.zip
別アプリのsrcとManifest.zip

Shin Miyazaki

unread,
Aug 15, 2013, 11:13:18 PM8/15/13
to android-g...@googlegroups.com
こんにちは、みやざきです。

| 08-16 10:48:17.648: E/AndroidRuntime(2772): android.content.ActivityNotFoundException: Unable to
| find explicit activity class {com.apitest.toj/com.apitest.toj.TojGps}; have you declared this activity in your
| AndroidManifest.xml?

com.apitest.tojというパッケージからcom.apitest.toj.TojGpsというアクティビティを探そうとして失敗しています。ここでいうパッケージはJAVAのpackageではなく、Androidのパッケージ、すなわちAvdroidManifest.xmlで設定しているアプリケーションのパッケージ名でなければなりません。

あと、自アプリ内のパッケージ名やクラス名を文字列リテラルで保持すると後々面倒なので、自分ならこう書きます。

-       String[] clsNames = {
-                       "com.apitest.toj.TojGps",
-                       "com.apitest.toj.TojTimer"
+       Class[] classes = {
+                       com.apitest.toj.TojGps.class,
+                       com.apitest.toj.TojTimer.class

-                               intent1.setClassName("com.apitest.toj", clsNames[arg2]);
+                               intent1.setClass(getApplicationContext(), classes[arg2]);



2013年8月16日 11:14 安藤呂井土 <andou.r...@gmail.com>:

--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、android-group-j...@googlegroups.com にメールを送信します。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
http://groups.google.com/group/android-group-japan からこのグループにアクセスしてください。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。

pirai

unread,
Aug 16, 2013, 1:33:34 AM8/16/13
to android-g...@googlegroups.com
Javaのパッケージと、Androidのパッケージは混乱しますよね。だから私はAndroidのパッケージ名はアプリ識別名と常に呼んでいます。
で、Intent#setClassName(String packageName, String className)の使い方ですが、
packageName:アプリ識別名"com.apitest.main"(<manifest package="ここで指定した文字列">)
className:クラス完全限定名"com.apitest.toj.TojGps">(<manifest><activity android:name="ここで指定した文字列">)
 
ちなみに、引数packageNameの正式な解説は「The name of the package implementing the desired component.」

2013年8月16日金曜日 11時14分08秒 UTC+9 安藤呂井土:

安藤呂井土

unread,
Aug 16, 2013, 2:29:40 AM8/16/13
to android-g...@googlegroups.com
みやざきさん、piraiさん回答ありがとうございます。

Androidのパッケージなるものがあるんですね。
全く分かっていませんでした。
(プロジェクト作るときに指定したような微かな記憶がありますが、
呪文のように意味も解らず唱えてました。)

別アプリにもintentで通信する(私はやったこと無いですが)ので、
考えてみると当たり前に必要な引数ですね。

String → class の変更はまだですが、まずは動作しました。
おぉ-(o゚Д゚ノ)ノ

皆様のおかげです。ありがとうございます。
Reply all
Reply to author
Forward
0 new messages