在開始使用Android SDK編寫第一個(gè)示例之前,必須確保已經(jīng)按照Android環(huán)境設(shè)置教程中的說明正確設(shè)置了您的Android開發(fā)環(huán)境。
下面來看看如何編寫一個(gè)簡(jiǎn)單的Android應(yīng)用程序,它將打印“Hello World!”。
注:理解這篇教程,對(duì)后面的學(xué)習(xí)非常重要。了解項(xiàng)目中每個(gè)目錄和每個(gè)文件的功能和作用。
第一步是使用Android Studio創(chuàng)建一個(gè)簡(jiǎn)單的Android應(yīng)用程序。 當(dāng)點(diǎn)擊Android Studio圖標(biāo)啟動(dòng)完成時(shí),它將顯示如下所示的屏幕 -

可以通過調(diào)用Start a new Android Studio Project 來開始創(chuàng)建應(yīng)用程序開發(fā)。 在新的安裝框架中應(yīng)詢問應(yīng)用程序名稱,包裝信息和項(xiàng)目的位置。
輸入應(yīng)用程序名稱(HelloWorld)后,選擇應(yīng)用程序運(yùn)行的Android目標(biāo)設(shè)備,在這里需要指定最小的SDK,在這個(gè)教程中,選擇最小SDK為 API 21:Android 5.0(Lollipop) -
下一級(jí)安裝應(yīng)該包含選擇移動(dòng)設(shè)備的活動(dòng),它指定應(yīng)用程序的默認(rèn)布局。

選擇一個(gè)空的Activity,如下所示 -

配置Activity,默認(rèn)即可,點(diǎn)擊完成。如下所示 -

在完成之后,開發(fā)開發(fā)工具將顯示如下界面,我們可以開始編寫應(yīng)用程序的代碼了。

下面來看看,如何運(yùn)行這個(gè)"Hello World!" 應(yīng)用程序。假設(shè)您在創(chuàng)建環(huán)境的時(shí)候創(chuàng)建了AVD。 要從Android Studio運(yùn)行應(yīng)用程序,請(qǐng)打開項(xiàng)目的一個(gè)活動(dòng)文件,然后單擊工具欄上的“運(yùn)行app”圖標(biāo)。如下圖中箭頭指向的位置 -
選擇發(fā)布目標(biāo),如下圖所示 -
注意:在這個(gè)過程中,Android Studio 可能需要安裝一些其它的依懶組件,這就要求必須能連接到互聯(lián)網(wǎng)絡(luò)了。安裝過程如下 -

Android Studio 在配置的AVD上安裝應(yīng)用程序并啟動(dòng)它,如果您的設(shè)置和應(yīng)用程序一切正常,它將顯示以下“模擬器”窗口 -

以下是Android Studio中的的項(xiàng)目結(jié)構(gòu)圖:
下面對(duì)上面文件或目錄的解釋 -
| 編號(hào) | 文件或目錄 | 描述 |
|---|---|---|
| 1 | AndroidManifest.xml |
這是清單文件,它描述了應(yīng)用程序的基本特征并定義了它的每個(gè)組件。 |
| 2 | java |
這包含項(xiàng)目的.java源文件。 默認(rèn)情況下,它包含一個(gè)具有活動(dòng)類的MainActivity.java源文件,該Activity類在應(yīng)用程序使用應(yīng)用程序圖標(biāo)啟動(dòng)時(shí)運(yùn)行。 |
| 3 | res/drawable |
以前的Android版本使用這個(gè)文件夾來存儲(chǔ)圖像,當(dāng)前版本使用mipmap文件夾來存儲(chǔ)圖像。這個(gè)目錄幾乎不再使用。 |
| 4 | res/layout |
這是定義應(yīng)用程序用戶界面的文件的目錄。 |
| 5 | res/menu |
包含將顯示在操作欄上的項(xiàng)目的XML菜單文件夾 |
| 6 | res/mipmap |
使用來包含mipmap圖像 |
| 7 | res/values |
這是包含資源集合(如字符串和顏色定義)的其他各種XML文件的目錄。 |
無論您作為應(yīng)用程序的一部分開發(fā)什么組件,都必須在AndroidManifest.xml中聲明其所有組件。這個(gè)文件作為Android OS和應(yīng)用程序之間的接口,所以如果沒有在這個(gè)文件中聲明你的組件,那么操作系統(tǒng)將不會(huì)考慮它。 例如,默認(rèn)清單文件將如下面的文件所示 -
需要更多地了解mipmap文件夾中的圖像,請(qǐng)參閱下面的圖像,mipmap文件夾中有一個(gè)圖像文件。
在使用Android應(yīng)用程序時(shí)偶爾遇到的一個(gè)問題是,比如看到的圖像比較模糊,像素化或笨拙地拉伸。 解決此問題的方法是為Android支持的每種密度創(chuàng)建一個(gè)可繪制的文件夾,并將正確縮放的圖像放在每個(gè)文件夾中。 Android支持6種不同的密度范圍(以每英寸點(diǎn)數(shù)衡量):
13中引入的。首先,了解Activity是什么?Activity是支持屏幕或UI的Java代碼。換句話說,用戶界面的構(gòu)建塊就是Activity。 Activity類是Android中的一個(gè)預(yù)定義類,每個(gè)擁有UI的應(yīng)用程序都必須繼承它來創(chuàng)建窗口。
例如,MainActivity類是一個(gè)Activity,它從庫中的Activity類擴(kuò)展而來。 下圖說明了一個(gè)Activity的生命周期。
Activity的一個(gè)生命周期描述了一個(gè)Activity開始啟動(dòng)后的進(jìn)程,直到應(yīng)用程序關(guān)閉。 包括Activity暫時(shí)停止的進(jìn)程,恢復(fù)等等。
為了更容易理解,可以修改MainActivity類的代碼,覆蓋onStart(),onResume()等方法,添加顯示方法已經(jīng)運(yùn)行的消息。重新運(yùn)行應(yīng)用程序,看看會(huì)發(fā)生什么?
package com.yiibai.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends AppCompatActivity {
public static final String TAG ="MyMessage";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Print Log
Log.i(TAG,"onCreate");
}
@Override
protected void onStop() {
super.onStop();
// Print Log
Log.i(TAG,"onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
// Print Log
Log.i(TAG,"onDestroy");
}
@Override
protected void onPause() {
super.onPause();
// Print Log
Log.i(TAG,"onPause");
}
@Override
protected void onResume() {
super.onResume();
// Print Log
Log.i(TAG,"onResume"); }
@Override
protected void onStart() {
super.onStart();
// Print Log
Log.i(TAG,"onStart");
}
@Override
protected void onRestart() {
super.onRestart();
// Print Log
Log.i(TAG,"onRestart"); }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
// Print Log
Log.i(TAG, "onCreateOptionsMenu");
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Print Log
Log.i(TAG, "onOptionsItemSelected");
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
return super.onOptionsItemSelected(item);
}
}
重新運(yùn)行應(yīng)用程序,并且看到記錄在logcat窗口上的消息。
可以將篩選器設(shè)置為logcat,只顯示日志記錄的消息。
過濾器名稱:My Filter
日志標(biāo)記(正則表達(dá)式):MyMessage
現(xiàn)在,logcat 窗口只顯示指定的消息。
您已經(jīng)成功運(yùn)行了第一個(gè)Android應(yīng)用程序,現(xiàn)在來回顧一下從應(yīng)用程序調(diào)用以來Android如何運(yùn)行。
在“項(xiàng)目”窗口中看到的不是涉及創(chuàng)建應(yīng)用程序的所有組件。有些組件是由編譯器程序自動(dòng)生成的。 而且它不顯示在項(xiàng)目窗口上。 例如,根據(jù)項(xiàng)目中源文件的結(jié)構(gòu),編譯器將創(chuàng)建一個(gè)R.java 源文件,該文件為項(xiàng)目上的資源定義常量。
要在Android Studio上查看R.java 文件,請(qǐng)打開MainActivity類,右鍵單擊R.layout.main_activity,然后選擇執(zhí)行(Go to / Implementation)

在R.java類中定義的常量是根據(jù)Project中的資源來創(chuàng)建的:
因此,在項(xiàng)目的某個(gè)地方,可以使用常量來引用項(xiàng)目中的資源。例如,R.layout.activity_main是一個(gè)常量,它表示res/layout文件夾中的activity_main.xml文件。
工作原理: