標籤:android app開發 資訊清單檔 程式異常終止 建立android工程
最近考試什麼的都已經結束了,閑在家也沒什麼事做,就想著學點什麼,於是便選擇了學一下Android開發。一直在使用Android手機,要是自己能為自己的手機開發一個APP就好了。
好了,也不扯些廢話了,開始Android之旅吧!不過出師必須要有名,由於是探索未知世界,我便取名叫“My Magic Android Tour”好了。
由於之前做課程設計(完全是打醬油的)已經配置過環境之類的,這也是上次的唯一收穫,其實也不太好,剝奪了我學習配置環境的機會,。哎,所以說“禍兮福所倚,福兮禍所伏”。額……,又扯遠了。
第一步:
開啟Eclipse,建立一個Android工程,此時需要填寫工程相關資訊,如。
那麼,這裡的每一項是什麼意思呢?將焦點分別移至每一項上面,可以總結出如下表格。 按照上述表格,我填寫各項資訊如下。 這裡的Theme項只能選擇None,如果選擇其他主題,都會報錯,原因是當前最低版本的SDK不支援這些主題。 傻瓜式操作——Next, 在這裡就使用預設。Next, 在這裡是設定應用程式圖示的,任然使用預設。Next, 這裡的Create Activity原來是選中的,但是報了錯,依舊是SDK版本不支援。於是只好去掉,可是去掉之後,就不會在建立應用程式的時候自動產生一個Activity。當然,這並不是什麼大問題,因為我可以手動去建立,還能學到不少呢!再一次驗證了“禍兮福所倚,福兮禍所伏”這句話。 在這裡設定完成後,就可以點擊Finish來完成應用程式的建立了。至此,我也完成了第一步。
第二步:
在某一本書上說:Android程式用XML檔案來布局UI,用Java類來處理邏輯。
於是,我們便建立一個XML檔案,而且該XML檔案必須要放在layout檔案夾中。
建立成功後,開啟該XML檔案,可以看到如下代碼。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > </LinearLayout>
第一個程式只為熟悉流程,不實現任何功能,所以,不修改XML檔案任何地方。
XML建立好後,需要建立一個Java類來載入該XML檔案上的內容,但是此處的Java類是一個特殊的類,它必須繼承自android.app.Activity類。
建立好後,為了載入該XML檔案,必須要重寫onCreate方法,可以把它看做是普通Java程式中的main方法。
public class MainActivity extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);// Other Code……}}
至此,便完成了整個程式的編寫,看來還是挺簡單的嘛!
接下來的工作就是要將程式跑起來。
第三步:
為了將程式跑起來,我們必須要啟動模擬器。由於第一次編寫Android應用,所以必須先建立一個模擬器。在Eclipse的工具條上單擊按鈕,此時可以看到一個模擬器都不存在。所以要New一個。
按要求填寫各項資訊,然後確定。
OK,接下來,啟動剛才建立好的模擬器就行了。
還挺像一部手機的嘛,難怪叫模擬器呢!好了,不說廢話了,運行程式吧。
點擊之後,等了好大一會,可是一點反應都沒有,於是,翻書、百度。哦,原來是沒有註冊剛才寫的Activity類。
開啟資訊清單檔AndroidManifest.xml,註冊MainActivity類。
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="tour.magic.helloandroid" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <!-- 在此處註冊Activity類 --> <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>
再次運行,會發現應用程式還沒跑起來就掛掉了。
到底是什麼原因呢,於是帶著這個問題去百度,有人說開啟Logcat查看具體原因,我變照著做了,看到如下原因。
從上訴原因中看到java.lang.ClassNotFoundException這個異常,為什麼找不到類檔案呢?它明明就在那裡啊,帶著這個問題繼續百度。看到有人說要在設定檔中的語句<activity android:name="MainActivity" >中的MainActivity前面加一個‘.‘表示目前的目錄,我便加上去了。<activity android:name=".MainActivity" >,再次運行。會發現根本沒什麼用,依舊還是那個異常。
這到底是哪裡出問題了呢,此刻的我非常的焦急了,但是還是像個武林高手一樣氣沉丹田,慢慢地,冷靜下來了,於是開始靜靜思考原因。首先,既然‘.‘表示目前的目錄,那麼目前的目錄到底是什麼呢?此時抬頭看到45°角處寫著package="tour.magic.helloandroid"。目錄找著了,在就看該目錄下到底有沒有類檔案。切換到src下,驚人地發現
哦,原來我的MainActivity類在預設包中,難怪呢,大哥,您幹嘛要躲在這兒呢?害得我真慘啊!
好了,問題總算是找著了,接下來就是要解決它。粗略一想,有3種方案。
第一種:在src下建立一個tour.magic.helloandroid包,然後將MainActivity類移到這個包下;
第二種:在註冊MainActivity是帶上其所在包名;
第三種:將資訊清單檔中package="tour.magic.helloandroid"後面的值改為MainActivity所在包名。
仔細考慮了一下,後面兩種不可取。原因如下:
對於第二種,帶上包名,可是我的類在預設包中啊,Java從1.4版本開始就不支援匯入預設包中的類了[見附錄1]。當然也可以建立一個不同於第一種解決方案中包,將類移進去,這樣在那些需要很多包的程式中是挺好的,但是在本程式中,完全沒有必要這麼麻煩,安裝第一種解決方案中就可以了。
對於第三種,修改資訊清單檔這裡的包名,由於整個應用程式只有這一個資訊清單檔,那麼就有可能因為修改了此處的包名而影響其他地方,不值得冒這個險。
於是,便採用方案一來解決。
再次運行程式,看到程式總算可以跑起來了,真是有些小小的激動。
OK,下面來總結一下整個流程。
寫到此處,My Magic Android Tour處女作也快接近尾聲了,第一次怎麼大篇幅地寫一篇文章。不過既然已經開了頭,那麼就繼續堅持下去,每天將所學記錄成文。在記錄中成長,在分享中進步!
附錄1:
Java從JDK1.4就不在支援從預設包中匯入類,這樣做的目的我想應該是協助開發人員養成使用包名的好習慣。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
My Magic Android Tour —— 處女作