Android Studio 專案目錄、架構與結構
Android 專案目錄
Android 專案,主要可分為 3 個目錄:
- manifests:Android APP「整體資訊」的主要設定檔
- java: Java 原始程式都放在這
- res:專案所需的「非程式」UI 相關檔案,如 layout、圖像與文字
為了實現 MVC(Model-View-Controller)架構,Android 將 APP 的開發分成二大部分:
- Model-Controller:程式邏輯
- View:UI
manifests 目錄
manifests 目錄內有一個預設名稱為 AndroidManifest.xml 的檔案,而每一個 Android APP 都須要它,此檔案儲存著該 APP 的重要資訊。檔名中的 Manifest 為「表明」的意思。
這是一個可以向 Android 「表明」我們 APP 的檔案,以便讓 Android 系統完整地了解我們 APP 的資訊。
AndroidManifest.xml:
- APP 的功能清單,有多少 Activity(就是頁面)、服務與可能會存取哪些資料都必須定義在這。
- Android APP 中會包含許多 XML 格式的檔案,不同用途的檔案,會使用一些標籤(tag)來執行一些設定。
- 手機安裝一個新的 APP,有時會提示須存取某些功能,也是在這定義。
app/manifests/AndroidManifest.xml:
<!-- 宣告這是一份 XML 文件 -->
<?xml version="1.0" encoding="utf-8"?>
<!-- 最外層一定是 <manifest> 標籤 -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
<!-- package 應用程式的完整套件名稱(此名稱也會成為該應用程式的 Application ID)-->
package="com.example.jacky.myapplication">
<!-- 應用程式相關設定 -->
<application
android:allowBackup="true"
<!-- 在裝置上的啟動圖示(就是 APP 的 icon),如下參照到 res/mipmap 目錄內的圖像(就是小綠人頭)-->
android:icon="@mipmap/ic_launcher"
<!-- 在裝置上的代表名稱,如下參照到 values/strings.xml 檔案內的 app_name 字串 -->
android:label="@string/app_name"
android:supportsRtl="true"
<!-- 指定的佈照主題,如下參照到 values/style.xml -->
android:theme="@style/AppTheme">
<activity
<!-- Activity 名稱,省略套件名稱代表,則套用 <manifest> 標籤的 package 套件名稱 -->
android:name=".MainActivity"
<!-- Activity 標題名稱,會在畫面的 ActionBar 上顯示 -->
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<!-- 設定此 Activity 頁面為首頁 -->
<action android:name="android.intent.action.MAIN" />
<!-- 應用程式安裝完畢後會自動啟動(未加入該設定,不會自動啟動,必須手動點擊 APP icon 圖示啟動)-->
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
java 目錄
子目錄名稱,就是建立專案時由 Company Domain 反向後,在與 Application name 組成的 Package name,裡面有一個預設的 Activity 元件 MainActivity.java。
app/java/[Package name]/MainActivity.java:
package com.example.jacky.myapplication;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
// 繼承自 AppCompatActivity 類別
public class MainActivity extends AppCompatActivity {
/**
由於 Activity 是 Android 四大组件,Activity(活動)、Service(服務)、BroadcastReceiver(廣播接收者)與Content Provider(內容提供者)之一
,因此必須在功能清單 manifests/AndroidManifest.xml 檔案中進行註冊,方式為:
<activity android:name="com.example.jacky.myapplication.MainActivity" ...>
......
</activity>
*/
// Activity 一啟動就會呼叫 onCreate(),而且只會呼叫一次,主要用來完成初始化
// 覆寫繼承 AppCompatActivity 類別的 onCreate() 方法
protected void onCreate(Bundle savedInstanceState) {
// 呼叫父類別 onCreate() 方法
super.onCreate(savedInstanceState);
// 將 Activity 到使用者介面設定為 R.layout.activity_main,即 res/layout/activity_main.xml
// 載入 layout 檔案,當作此頁畫面,就是指定該元件使用畫面的配置資源
setContentView(R.layout.activity_main);
}
// 設定選單,在使用者點擊手機上的選單時觸發,用來彈出選單
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
}
res 目錄
為 resource 的縮寫,專案所需的 UI 相關檔案,也就是非程式的資源,如 layout、圖像與文字。
- drawable 目錄
- 圖像檔案資源,例如 png、jpg……圖形檔案
- layout 目錄
- UI(使用者介面) 的 layout
- values 目錄
- UI 需用到的文字(預設為 strings.xml)、顏色…… 的一些常數資料
layout 目錄
Android 與一般 Java APP 設計方式有很大的不同,尤其在 APP 的資源部份。雖然 Activity 元件是提供一個 APP 的畫面,不過在 MainActivity.java 中你看不到跟畫面相關的程式碼,只有一行指定畫面配置資源的敘述 setContentView(R.layout.activity_main);
。
app/res/layout/activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<!-- layout 配置 -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_main" tools:context=".MainActivity">
<!-- 目前畫面只有一個文字元件 -->
<TextView android:text="Hello World!" android:layout_width="wrap_content" android:layout_height="wrap_content" />
</RelativeLayout>
values 目錄
雖然文字可直接寫在 layout 檔案內,但不建議,因翻譯人員只需將文字檔案翻譯即可,無須在 layout 檔案內尋找要翻譯的文字,方便 APP 在地化。
<resources>
<!-- 應用程式名稱 -->
<string name="app_name">app_name</string>
<!-- 自訂文字與名稱-->
<string name="editTextUser">User Name</string>
</resources>
Android 專案架構與結構
Gradle Scripts 目錄
Gradle 簡單說就是「專案自動化建構工具」。它的應用不僅在 Java 領域,也可和其他語言的開發環境搭配使用。
該目錄儲存與 Gradle 建置系統相關的設定檔,Gradle 是 Android Studio 採用的全新 APP 建置系統。每一個 APP 可以有多個模組(Module),例如一個音樂播放 APP,可以包含行動電話、平板電腦、穿戴式三個模組,每一個模組都可以被建置成一個獨立的 APP。這些重要的資訊儲存在 build.gradle 檔案內。
Scripts/build.gradle:
apply plugin: 'com.android.application' android { // 應用程式模組編譯的版本(Android API Level) compileSdkVersion 23 // Android 建置工具的版本編號 buildToolsVersion "23.0.1" defaultConfig { // applicationId 應用程式模組的主套件名稱;就是 app/manifests/AndroidManifest.xml 檔案定義的 package 名稱 applicationId "com.example.jacky.myapplication" // 代表要執行此應用程式最低需要的 API 層級(Level)。API 15 相當於 Android 4.0.3 minSdkVersion 15 // 主要版本 targetSdkVersion 23 // 自定的應用程式模組版本編號(控管的版本號碼,必須為整數值,不可是字串) versionCode 1 // 自定的應用程式模組版本名稱(對外發佈的版本名稱,值為字串,與上述版本號碼不同) versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } // 設定此應用程式會使用到的函式庫 dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.0.1' compile 'com.android.support:design:23.0.1' }
參考
本著作係採用創用 CC 姓名標示-相同方式分享 3.0 台灣 授權條款授權.
Gradle Scripts 目錄
最後一句話,
"這些重要的資訊儲存在 buile.gradle 檔案內。"
發現一個小錯別字
buile.gradle >> (X)
build.gradle >> (O)
講解得滿詳細的! 謝謝!!
改修正...非常感謝您的指正,謝謝。
謝謝! 寫得很詳細也很清楚~
Thank you 寫的很詳細