最近在作一款音樂播放器的時候,而後在調試的過程當中發現一直報這個錯誤"Unable to start activity ComponentInfo",從字面的意思看是沒法啓動某個activity組件,可是看了manifest文件,全部的activity組件都已經註冊過了,爲何會報這種錯誤?後來發現原來是註冊路徑出了問題,最開始的代碼是這樣的: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.music" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="5" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest> 對於MainActivity這個組件,程序啓動的時候尋找它的時候,根據包的路徑"package="com.music"加上".MainActivity"就是 "com.music.MainActivity",可是在工程中MainActivity是在"com.music.activity"這個包下,顯然路徑就是錯的,所以會報沒法找到某個組件的錯誤。所以更改組件的註冊路徑就能夠解決這個問題: 能夠將<activity android:name=".MainActivity"> 改爲其相對路徑 <activity android:name=".activity.MainActivity"> 或者也能夠直接用絕對路徑 <activity android:name="com.music.activity.MainActivity"> 注意:在註冊組件的時候,若是在名稱前面加了點'.',則表示該組件的路徑是package的路徑加上組件名,好比package='com.music',<activity android:name='.MainActivity'></activity>,則其完整路徑爲'com.music.MainActivity'。 若是沒有加點,則表示絕對路徑,如<activity android:name="com.music.activity.MainActivity">。 有一種特殊狀況是,若是要註冊的activity在當前package的根目錄下,則前面的點'.'可寫可不寫。可是若是是在package包的子包下,如package='com.music',而MainActivity的絕對路徑爲'com.music.activity.MainActivity',則 <activity android:name=".activity.MainActivity">中的".activity.MainActivity"前面的點'.'不能省略。