以HelloActivity程式為例,簡單介紹Android應用程式的架構。希望讀者可以根據HelloActivity,自己寫出一個Andorid的應用程式。 HelloActivity工程的原始碼在Android目錄的development/samples/HelloActivity/中,代碼的結構如下所示: development/samples/HelloActivity/ |-- Android.mk |-- AndroidManifest.xml |-- res | |-- layout | | `-- hello_activity.xml | `-- values | `-- strings.xml |-- src `-- com `-- example `-- android `-- helloactivity `-- HelloActivity.java
其中tests是一個獨立的項目,可以暫時不考慮。其他部分看作一個Android的一應用程式的工程。這個工程主要的組成部分如下所示: Android.mk 是整個工程的“Makefile”,其內容如下所示: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := samples # Only compile source java files in this apk. LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_PACKAGE_NAME := HelloActivity LOCAL_SDK_VERSION := current include $(BUILD_PACKAGE) # Use the following include to make our test apk. include $(call all-makefiles-under,$(LOCAL_PATH)) 其中LOCAL_PACKAGE_NAME表示了這個包的名字。這個檔案是最終產生的包(*.apk)的名稱,注意,包的名稱和應用程式目錄的名稱無關,而與這裡的HelloActivity的名稱有關。 AndroidManifest.xml 工程的描述檔案 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.android.helloactivity"> <application android:label="Hello, Activity!"> <activity android:name="HelloActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest> 在工程描述檔案中,package的名稱需要和JAVA檔案中包的名稱相同,activity 的名稱必須和JAVA檔案中JAVA類的名稱相同,JAVA檔案的檔案名稱也必須和其中類的名稱相同。 而那個android:label的名字既是應用程式在菜單中的名字,也是應用程式啟動後的標題。 HelloActivity.java 這是JAVA類檔案,這個檔案的路徑表示在Andorid的JAVA包的結構中的位置,這個包的使用方式為com.example.android.helloactivity。 package com.example.android.helloactivity; import android.app.Activity; import android.os.Bundle; public class HelloActivity extends Activity { public HelloActivity() { } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.hello_activity); } } AndroidManifest.xml和*.JAVA的名稱需要匹配(這裡的HelloActivity.java和HelloActivity),否則是找不到JAVA類的。 程式編譯完成後,將產生apk包,將其放置在system/app中即可。除了使用介面啟動之外,還可以在QEMU模擬器的啟動介面中,使用如下的方式啟動: am start -n com.example.android.helloactivity/com.example.android.helloactivity.HelloActivity 事實上,啟動的方法和工程描述檔案中包的名稱和類的名稱有關。 幾個注意點: 1、應用程式檔案夾的名稱並無實際的影響 2、Android.mk的LOCAL_PACKAGE_NAME,決定APK包的名稱; 3、AndroidManifest.xml中需要包含包的名稱和activity類的名稱,並需要和JAVA檔案中對應; 4、AndroidManifest.xml中application android:label的名稱既是應用程式在介面中的名稱,也是啟動後的標題 |