Lập trình Android – Bài 9: Cấu trúc Project

Mấy nay bận bịu quá muốn viết blog mà giờ mới có thời gian. Hôm nay chúng ta sẽ tìm hiểu một phần không liên quan đến code lắm – cấu trúc Project Android. Phần này trong rất nhiều hướng dẫn sẽ được giới thiệu ngay những bài đầu, tuy nhiên theo mình các bạn tìm hiểu ở tầm này (sau khi học xong 8 bài trước) là vừa đẹp, sẽ không bị hoang mang và tiếp thu dễ hơn rất nhiều.

Tại thời điểm này, công cụ mình dùng là Android Studio 2.1.2

[qads]

1. Cấu trúc theo chế độ Android

Đúng là từ trước đến giờ mình chưa giới thiệu về cấu trúc của 1 Project, chưa nói cho các bạn biết folder này là sao, nó làm gì, file kia là file gì,… Vì mình thấy người mới học cứ nên học những cái các bạn muốn đã, đây mới là lúc các bạn tìm hiểu nó. Cứ học ngọn đã, rồi quay về gốc và sau đó là đâm sâu ^^.
Các bạn mở Android Studio lên và mở Project của Bài 8 – Intent ra nhé. Mặc định các bạn sẽ ở chế độ Android.

android-project-struct

Chúng ta sẽ tìm hiểu theo thứ tự đánh số như trong ảnh nhé.

1.1 Chế độ xem Android

Phần này chỉ là chế độ xem thôi, các bạn có thể chuyển sang chế độ Project để xem, lát mình sẽ nói tiếp bên dưới về chế độ này nhé.

1.2 Module app

Mặc định khi các bạn tạo Project mới thì sẽ tự động sinh ra thư mục app này. Nó là một module, Trong một project có thể có rất nhiều module, các module này có thể là các project ứng dụng khác nhau, liên quan đến nhau hoặc là các module thư viện. Tại thời điểm này các bạn cũng nên biết và hiểu như thế là đủ.

1.3 File AndroidManifest.xml

Trong mỗi module đều có 1 file như này, file này là file cấu hình của module, nó cấu hình những gì thì giờ các bạn mở ra xem.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.nguyenvanquan7826.tut8intent">

    <!-- To auto-complete the email text field in the login form with the user's emails -->
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.READ_PROFILE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".LoginActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".RegisterActivity" />
        <activity android:name=".MainActivity"/>
    </application>

</manifest>

Các bạn sẽ thấy nội dung trong file này như trên, nhưng sẽ không có 3 dòng uses-permission…, mình đưa thêm vào cho đủ cấu trúc của file.

  • Đầu tiên là package=”com.nguyenvanquan7826.tut8intent”, đây là package của module. nó cũng chính là id của ứng dụng. Mỗi ứng dụng đưa lên store của google sẽ phải có giá trình package khác nhau, không có 2 ứng dụng nào có thể trùng package.

  • 3 dòng uses-permission là 3 dòng mình thêm vào, nó thể hiện các quyền mà ứng dụng yêu cầu từ người dùng. Khi các bạn cài bất kỳ một ứng dụng nào, đâu tiên thường hiện ra phần permisstion yêu cầu bạn đồng ý thì mới cài đó. Các bạn đọc 3 yêu cầu này sẽ nhận ra là yêu cầu lấy danh sách tài khoản trong điện thoại, lấy thông tin tài khoản, và lấy danh bạ.

  • Thẻ application bao gồm toàn bộ cài đặt về cách hoạt động của ứng dụng. Cụ thể là có những Activity nào trong ứng dụng, loại activity của mỗi cái, có những service (các dịch vụ chạy ngầm) nào chạy trong ứng dụng. Mỗi thẻ activity sẽ là khai báo cho một activity. Nếu Activity hoặc service nào mà không khai báo ở đây thì sẽ không thể dùng được. Các bạn để ý ở đây chúng ta có 3 Activity là LoginActivity, RegisterActivity, MainActivity.

  • Khai báo một Activity. Mặc định khi các bạn tạo Activity như hôm trước mình hướng dẫn thì nó sẽ tự động thêm khai báo vào file AndroidManifest này.

<activity
    android:name=".LoginActivity"
    android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

+/ name là tên Activity, ở đây các bạn thấy có dấu chấm (.) đằng trước nó biểu thị là nằm trong package, tức là nằm trong com.nguyenvanquan7826.tut8intent, nếu bạn tạo thêm 1 package con packtemp và đặt một Activity tên là Temp thì sẽ khai báo là android:name=”.packtemp.Temp” tức là nó viết com.nguyenvanquan7826.tut8intent.packtemp.Temp
+/ label chính là tiêu đề của Activity, nó sẽ hiển thị trên thanh trên cùng.
+/ intent-filter là bộ lọc thông báo các điều kiện của Activity, ở đây thông báo nó là activity chính android.intent.action.MAIN và được mở đầu tiên khi mở ứng dụng android.intent.category.LAUNCHER

1.4 File build.gradle

Các bạn chú ý file Manifest kia là file cấu hình quản lý chức năng ứng dụng, còn file này cũng là file cấu hình nhưng là cấu hình về phiên bản Android, cấu hình thư viện nào cần dùng trong Project.
Ở hình bên trên, các bạn nhìn có 2 file build.gradle, nhưng hãy chỉ để ý đến file của Module app, mở nó ra và sẽ được như này.

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.0"

    defaultConfig {
        applicationId "com.nguyenvanquan7826.tut8intent"
        minSdkVersion 14
        targetSdkVersion 24
        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:24.0.0'
    compile 'com.android.support:design:24.0.0'
}
  • Dòng đầu tiên apply plugin: ‘com.android.application’ thể hiện module này là một ứng dụng. Tức nó là một ứng dụng có thể chạy trên điện thoại. Nếu các bạn muốn tạo một module có chức năng như một thư viện, có thể dùng cho nhiều Project khác nhau thì nó là apply plugin: ‘com.android.library’, nhưng ở đây chúng ta chỉ quan tâm tới ứng dụng thôi nhé.

  • Tiếp theo dòng compileSdkVersionbuildToolsVersion lần lượt là phiên bản SDK và bản Tool để tạo ra ứng dụng. Cái này mặc định bạn dùng SDK bao nhiêu thì nó tự động lấy bản mới nhất.

  • Dòng applicationId “com.nguyenvanquan7826.tut8intent”, nó sẽ giống trong AndroidManifest, chính là cái id của ứng dụng.

  • Tiếp dòng minSdkVersion 14targetSdkVersion 24 lần lượt là phiên bản Api Android nhỏ nhất có thể chạy và phiên bản chạy tốt nhất đối với Project này. Khi tạo Project thì nó có cho phép bạn chọn đó. Ở đây phiên bản api nhỏ nhất có thể chạy là api 14 tức Android 4.0 trở lên có thể chay, nếu máy nào dùng phiên bản nhỏ hơn sẽ không thể chạy được ứng dụng này. Bây giờ hầu hết lên trên 4 rồi nên các bạn để min là api 14 (Android 4.0) hoặc api 16 (Android 4.1).

  • Dòng versionCode 1versionName “1.0” lần lượt là phiên bản code và tên phiên bản ứng dụng. Khi các bạn cập nhật ứng dụng thì phải sửa phiên bản code lớn hơn phiên bản trước, tên phiên bản phải khác đi thì mới đưa lên store được.

  • Khối dependencies thì như các bài trước các bạn biết nó là để add các thư viện này. Để biết cấu trúc add thư viện thì hãy làm theo hướng dẫn của người tạo ra thư viện đó hoặc search ông chùm google.

2. Cấu trúc theo chế độ Project

Các bạn click vào Chữ Android bên trên để chuyển đổi sang chế độ Project.
android-struct-project-1

Các bạn để ý nội dung của chúng ta không có gì thay đổi nhiều ngoài cách bố trí. Mình sẽ không giải thích lại những gì đã làm ở phần 1, chỉ nói thêm một vài cái mới.

2.1 Module app

Trong Project của chúng ta vẫn có Module app, nó sẽ được bôi đậm.

2.2 Phần output

Phần này là phần chứa file output khi chúng ta debug. Các file apk debug được sinh ra tại đây, các bạn có thể copy cho vào các máy điện thoại khác nhau và chạy luôn. Nhưng lưu ý vì là bản debug thì sẽ không cho lên store được. Mình sẽ có bài hướng dẫn cho lên store riêng.

2.3 Thư mục src

Thư mục này chứa mã nguồn của java và xml, tức mọi thứ về code. Trong đó các bạn để ý đến thư mục main, trong này sẽ có thư mục java và thư mục res. java chứa các file java, res chứa các file về ảnh, xml,.. Trong thư mục res, các bạn để ý các điểm sau.

  • Thư mục drawable sẽ chứa các file ảnh, file xml cấu hình,… Khi các bạn tạo icon từ công cụ hệ thống Android Studio sẽ sinh ra nhiều loại folder của drawable, tương ứng với các loại kích thước màn hình.

  • Thư mục layout chứa các layout rồi nhé.

  • Thư mục mipmap, chỉ chứa file ảnh là icon của ứng dụng.