
Android Tutorial 第一堂(3)開始設計 Android 應用程式
專欄作者新書出版:Android App程式開發剖析 第三版(適用Android 8 Oreo與Android Studio 3) Android Tutorial 第一堂(2)準備 Android Studio 開發環境 << 前情 準備好Android Studio開發環境,就可以準備開發第一個Android應用程式專案。一個Android應用程式,除了需要的Java原始程式碼,還必須包含一些Android應用程式需要的檔案,這些檔案都要依照規定放在規定的目錄,例如每一個Android應用程式模組,一定要有一個名稱為「AndroidManifest.xml」的應用程式設定檔,它是一個XML格式的檔案。所以開發Android應用程式,除了使用Java程式設計語言撰寫一些需要的程式碼,也要開始學習Android應用程式專案的結構和各種需要的檔案。 這一章會說明如何建立一個Android應用程式專案,瞭解基本的應用程式專案結構。如何在模擬裝置與實際裝置上執行與測試應用程式。還有認識Android應用程式基本元件與應用程式的種類。 3-1 應用程式專案介紹目前Android建議的應用程式開發工具為Android Studio,它整合所有開發Android 應用程式需要的工具,包含建立需要的模擬裝置,撰寫需要的程式與檔案,編譯、包裝、執行與測試應用程式,所有的工作都可以在Android Studio中完成。 3-1-1 建立應用程式專案不管學習哪一種程式技術,第一個應用程式通常是在畫面上顯示一個簡單的問候訊息,例如「Hello world!」。接下來會說明如何建立一個Android應用程式專案,在模擬裝置執行以後,畫面上顯示簡單的問候訊息。雖然第一個Android應用程式專案非常簡單,不過這裡說明建立與執行專案的操作,都是開發Android應用程式基本的操作。 依照下列步驟建立一個Android應用程式,並且在Android模擬裝置中執行與測試:
在建立應用程式過程中輸入的資訊,有一些設定必須先認識,否則建立專案以後再執行修改的工作,會比較麻煩一些,而且容易出現錯誤。在第一個視窗的應用程式專案基本資訊部份:
3-1-2 Android應用程式架構一個Android應用程式專案除了必要的Java原始程式碼,還有各種應用程式需要的檔案,所以應用程式專案的目錄會比較多一些。在Android Studio建立一個應用程式專案以後,會建立一些預設的目錄與檔案,你需要先認識一些基本的目錄。下列是在「app」Android應用程式模組目錄下的內容:
另外還有一個「Gradle Scripts」目錄,儲存與Gradle建置系統相關的設定檔,Gradle是Android Studio採用的全新應用程式建置系統。在Android Studio開發Android應用程式,一個應用程式可以有多個模組(Module)。例如一個音樂播放應用程式,可以包含行動電話、平板電腦、穿戴式三個模組,每一個模組都可以被建置成一個獨立的App。在Gradle Scripts目錄有下列兩個主要的設定檔,它們都是Groovy格式的文字檔:
3-2 應用程式模組Gradle設定檔每一個Android應用程式模組都有一個Gradle建置設定檔案,以前面建立的應用程式專案來說,這個設定檔是在「Gradle Scripts」目錄下的「build.gradle(Module:app)」。下列是這個檔案的基本格式: apply plugin: 'com.android.application' android { compileSdkVersion 應用程式模組編譯的版本(Android API Level) buildToolsVersion "Android建置工具的版本編號" defaultConfig { applicationId "應用程式模組的主套件名稱" minSdkVersion 最低版本(Android API Level) targetSdkVersion 主要版本(Android API Level) versionCode 自定的應用程式模組版本編號 versionName "自定的應用程式模組版本名稱" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard- rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:21.0.3' } 在建立應用程式專案的時候,Android Studio會依照你的設定,建立一個像這樣的檔案: apply plugin: 'com.android.application' android { compileSdkVersion 21 buildToolsVersion "21.1.2" defaultConfig { applicationId "net.macdidi.helloandroid" minSdkVersion 15 targetSdkVersion 21 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:21.0.3' } 目前Android 2.3.x(API Level 10)的實體裝置還有7.4的比例,如果想要讓應用程式也可以在這一個版本運作,在2.3.x都支援應用程式使用的APIs的情況下,就可以把「defaultConfig」區塊中的「minSdkVersion」設定改為「10」。修改這個設定檔以後,Android Studio會提醒你執行專案同步的工作,選擇畫面上的「Sync Now」: 在「defaultConfig」區塊中的「versionCode」與「versionName」,可以設定應用程式的版本資訊:
在「android」區塊中的「buildToolsVersion」設定,可以用來決定建置工具的版本。因為Andoird建置工具會經常更新,最新的版本可以在Android SDK Manager中查詢: 3-3 應用程式模組設定檔每一個Android應用程式模組還有一個主要的設定檔案,檔案的名稱是「AndroidManifest.xml」,位置在應用程式模組的「mainifests」目錄下。它是一個XML格式的檔案,檔案裡面都是一些應用程式非常重要的設定。設定檔的內容使用XML格式的寫法,你會使用一些Android提供的標籤執行需要的設定。 Android應用程式中會包含許多XML格式的檔案,不同用途的檔案,都會使用一些「標籤」來執行一些設定,以應用程式設定檔來說,它的基本內容會像這樣: <?xml version="1.0" encoding="utf-8"?> <!-- 上面這行表示這是一個XML文件,一定要在第一行 --> <!-- 最外層一定是一個manifest的標籤 --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.macdidi.helloandroid" > <!-- 在裡面使用不同的標籤執行一些設定 --> ... <!-- manifest的結束標籤,表示它的範圍 --> </manifest> 因為在設計Android應用程式的時候,會使用很多XML格式的檔案,所以你必須先瞭解XML基本的語法。XML是一個純文字格式的檔案,不同技術的XML檔案,會有自己設定的各種標籤名稱。使用標籤有幾種固定的寫法,其中一種是包含開始和結束的標籤,在標籤名稱的後面,通常會有一些設定這個標籤的資訊,設定值一定要放在雙引號之間: <標籤名稱 設定名稱="設定值" ... > ... </標籤名稱> 在執行不同設定的時候也有另外一種寫法,在標籤名稱後面同樣可以有一些設定資訊,不過它沒有結束的標籤,在結尾部份一定要使用「/>」: <標籤名稱 設定名稱="設定值" ... /> 在XML文件中的標籤名稱和設定名稱都是分大小寫的,在一個標籤裡面執行一些設定的時候,它們的前後順序並沒有特別規定。例如一個像這樣的標籤設定: <Button android:color="#000" android:text="Hello!" /> 跟這樣的標籤寫法效果是一樣的: <Button android:text="Hello! " android:color="#000" /> 3-3-1 設定應用程式基本資訊使用Android Studio建立Android應用程式以後,會為你建立好應用程式設定檔案,裡面已經包含在建立專案過程輸入的一些專案基本資訊,例如應用程式模組的名稱。如果在建立專案的時候輸入錯誤的資訊,也可以開啟這個檔案後直接修改它: <?xml version="1.0" encoding="utf-8"?> <!-- 最外層一定是一個manifest的標籤 --> <!-- xmlns:android="...", 這個設定一定要有,而且固定不變 --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" ... > ... </manifest> 在mainfest標籤中有這些應用程式的基本設定:
3-3-2 設定應用程式模組的設備資訊在應用程式設定檔的「mainfest」開始和結束標籤裡面,也可以使用這些標籤加入常用的設定: <?xml version="1.0" encoding="utf-8"?> <manifest .. > <!-- 設定應用程式需要的操作設備 --> <uses-configuration ... /> <!-- 設定應用程式需要的螢幕設備 --> <supports-screens ... /> </manifest> 如果應用程式需要一些特定的硬體設備才可以正確的運作,例如觸控螢幕或實體鍵盤,可以使用放在mainfest標籤裡面的「uses-configuration」標籤執行相關的設定。它可以使用下列這些設定:
Android裝置有一個特點,就是各種裝置的螢幕尺寸有很大的差異,如果應用程式需要在特定的螢幕尺寸才可以正確的運作,可以使用放在mainfest標籤裡面的「supports-screens」標籤執行相關的設定。它可以使用這些設定:
3-3-3 設定應用程式元件資訊Android應用程式設定檔裡面,一定要加入需要的應用程式設定,在manifest標籤裡面,一定有一個「application」標籤,在這個標籤中執行應用程式元件的重要設定: <?xml version="1.0" encoding="utf-8"?> <manifest ... > <application ... > <!-- 應用程式包含的Activity元件 --> <activity android:name="包含套件名稱的元件類別名稱" > ... </activity> <!-- 應用程式包含的服務元件 --> <service android:name="包含套件名稱的元件類別名稱" > ... </service> <!-- 應用程式包含的廣播接收元件 --> <receiver android:name="包含套件名稱的元件類別名稱" > ... </receiver> <!-- 應用程式需要的額外資訊 --> <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="..." /> </application> </manifest> Android提供許多不同應用程式的元件,讓你可以建立需要的應用程式,Android元件必須依照規則實作一個Java類別,寫好元件類別以後,一定要在應用程式設定檔的application標籤中加入對應的設定:
這些標籤中有一個一定要加入的設定是「android:name」,使用它設定元件類別的名稱,這樣Android才可以正確使用這些應用程式元件。 3-4 Android應用程式介紹就像個人電腦的應用程式一樣,Android應用程式也有幾種不同的類型,Android作業系統可以讓你依照應用程式的需求,開發許多不同種類的應用程式元件,這些元件可以組合成一個具有操作功能畫面和其它各種用途的應用程式。以應用程式的功能來說,Android應用程式可以分為這些種類:
3-4-1 一般應用程式如果一個Android應用程式,只有包含一些畫面讓使用者執行操作或瀏覽資料,就可以把它稱為一般應用程式。在一般Android應用程式中,一個畫面就是一個繼承自「android.app.Activity」的Java類別,通常會把它稱為Activity元件,如果應用程式的功能比較複雜一些,需要的畫面,也就是Activity元件就會多一些: 在建立Android應用程式專案的時候,ADT會幫你建立好一個預設的Activity元件,如果你沒有特別修改名稱的話,它的類別名稱會是「MainActivity」,而且它會放在這個專案設定的主套件下。一般的應用程式設計通常會把應用程式需要的Activity元件類別放在主套件下。開啟這個Activity元件類別後會像這樣: package net.macdidi.helloandroid; import android.os.Bundle; import android.app.Activity; import android.view.Menu; // 繼承自Activity類別 public class MainActivity extends Activity { // 覆寫Activity類別的onCreate方法 @Override protected void onCreate(Bundle savedInstanceState) { // 一定要加入呼叫父類別onCreate方法的敘述 super.onCreate(savedInstanceState); // 指定這個元件使用的畫面配置資源 setContentView(R.layout.activity_main); } // 設定選單 @Override public boolean onCreateOptionsMenu(Menu menu) { ... } } Android採用目前Java應用程式常見的框架(Framework)開發方式,這表示你在設計一些Android元件類別的時候,都會讓你繼承一個指定的類別,在撰寫元件類別的時候,也要依照這個元件的規則,覆寫一些需要的方法。以Activity元件類別來說,目前只需要執行畫面設計與指定的工作,Activity元件類別規定你覆寫「onCreate」方法以後,在方法中執行Activity元件的準備工作。Android在啟動這個Activity元件的時候,會呼叫「onCreate」方法一次,執行你寫在這個方法中的程式碼。執行覆寫工作的時候,大部份的情況下,都必須呼叫父類別被覆寫的方法,然後再執行其它需要的工作。 Android應用程式跟一般Java應用程式的設計方式有很大的差異,尤其是在應用程式的資源部份。雖然Activity元件是提供一個應用程式中的畫面,不過在上面的元件類別中你看不到跟畫面相關的程式碼,只有一行指定畫面配置資源的敘述,它呼叫父類別的「setContentView」方法,在參數中指定一個以「R.layout」開始的資源變數,這是Android用來代表畫面配置資源的格式,後面的名稱是畫面資源名稱,你可以使用這個名稱到「專案目錄\res\layout」目錄下找到這個附加檔名為「.xml」的檔案。開啟它後會是這樣的內容: <!-- 決定畫面的配置 --> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <!-- 目前畫面只有一個文字元件 --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </RelativeLayout> Android希望設計應用程式的畫面時,不是在Activity元件類別的程式碼中,使用撰寫程式碼的方式來設計需要的畫面,而是應該使用XML格式的畫面配置檔設計畫面,在這個畫面配置檔案中加入畫面需要的元件,在Activity元件類別把這個檔案引用進來當作它的畫面就可以了。 如果你執行過這個應用程式,出現的畫面應該是簡單的在畫面中顯示「Hello world!」的訊息,可是你在畫面配置檔案中也看不到這個訊息內容。這又是Android一個比較不一樣的設計方式,在應用程式中常需要顯示各種文字,例如顯示在功能按鈕上的文字,Android也不希望你直接設定在畫面配置檔中。所以在上面的文字元件(TextView)中,有一個「android:text」的設定,裡面指定的是「@string/」開始的內容,這是Android另外一種文字資源,後面是它的資源名稱「hello_world」。你可以開啟「專案目錄\res\values\strings.xml」檔案,它的內容會像這樣: <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">HelloAndroid</string> <string name="action_settings">Settings</string> <!-- 在畫面配置檔中使用的文字資源 --> <string name="hello_world">Hello world!</string> </resources> 3-4-2 背景服務應用程式一般應用程式在使用者啟動以後,可以在畫面上執行功能操作與瀏覽資料,不過結束應用程式以後,它們就不會運作了。在行動裝置中,有一些應用是不需要畫面,可是需要在背景中持續的運作,為我們執行一些指定的工作。例如Android作業系統內建一個檢查應用程式是否需要更新的程式,如果發現需要更新應用程式,它就會通知使用者更新應用程式的訊息。類似這樣的應用會使用服務(Service)元件來完成應用程式的需求。在Android裝置裡面,通常會有一些內建的系統服務,或是一些應用程式啟動的服務在背景運作。執行「設定」應用程式,在應用程式項目的「執行中」可以看到有哪一些服務正在運作: Android服務元件是一個繼承自「android.app.Service」的Java類別,完成需要的元件類別與設定以後,你可以啟動或停止一個服務,啟動的服務會在背景中執行你指定的工作,直到停止服務或重新開機。 3-4-3 小工具Android作業系統在一般的裝置中,提供五個桌面讓使用者可以自己放一些應用程式的圖示,點選它們就可以開啟應用程式,這也是其它作業系統都會有的功能。Android也提供一種很特別的小工具(AppWidget)元件,使用者把它安裝到桌面上指定的位置,部份的小工具還可以讓使用者調整大小。使用小工具來執行一些像是開啟與關閉無線網路或藍芽的設定,或是使用其它各種應用的小工具,使用者不用進入應用程式,就可以執行一些功能操作或瀏覽資料。Android內建許多好用的小工具,你也可以開發各種不同應用的小工具: 小工具元件是一個繼承自「android.appwidget.AppWidgetProvider」的Java類別,它的設計方式會跟一般應用程式中的Activity元件很不一樣,不過你也需要為它建立一個元件類別,依照小工具元件的規則撰寫程式,設計畫面配置檔和建立所有需要的資源。 3-5 在Android Studio撰寫Java程式碼Android應用程式元件需要搭配Java原始程式與其它各種檔案,撰寫Java程式碼是開發Android應用程式很主要的工作。Java程式採用套件的結構,使用各種Java與Android的類別庫,都需要在程式碼正確的使用「import」敘述,應用程式才不會出現錯誤。 輸入Date以後,Android Studio會自動列出可以選擇的項目,你可以注意到在java.util和java.sql都有Date類別,選擇java.util套件的Date類別以後,就會自動為你加入import敘述。 在撰寫Java程式碼的時候,也經常從別的地方複製後貼到Android Studio,例如下列這個程式片段: List<String> names = new ArrayList<>(); names.add("Simon"); names.add("Mary"); names.add("John"); 把上面的程式碼複製後貼到Android Studio,也會自動為你加入import敘述。如果貼上的程式碼,出現可以選擇的情況,例如下列這個程式片段: String name = "Simon"; Date birthdate = new Date(); BigInteger balance = new BigInteger("100"); Android Studio會顯示有多個Date可以選擇的訊息: 在上面的畫面按「Alt + Enter」,選擇正確的套件名稱後,就可以加入正確的import敘述: 課程相關的檔案都可以GitHub瀏覽與下載。 |
qp1357911
04/10
C:\Users\JACK\AppData\Local\Android\sdk\tools\emulator.exe -avd Nexus_5_API_22 -netspeed full -netdelay none
Note: The environment variable $ANDROID_SDK_HOME is set, and the emulator uses that variable to locate AVDs.
This may result in the emulator failing to start if it cannot find the AVDs in the folder pointed to by the
given environment variable.
ANDROID_SDK_HOME=C:\Users\JACK\.android\avd
emulator: ERROR: x86 emulation currently requires hardware acceleration!
Please ensure Intel HAXM is properly installed and usable.
CPU acceleration status: HAX kernel module is not installed!
我的AVD出現這樣的字
ject
10/18
當在 [Start a new Android Studio project] 時 ,應用程式基本資訊全部是白色(看不見欄位), 請問應該調整哪一個環境設定, 謝謝!
版本: android-studio-bundle-141.2288178-windows