Qua 3 bài giới thiệu mà chúng tôi đã đăng cũng phần nào giúp bạn có những bước đi đầu tiên khi mới bắt đầu học lập trình Android.

Trong bài viết này, sẽ là ứng dụng đầu tiên của bạn sau những giờ đồng hồ nghiên cứu, mò mẫm lập trình Android. Tôi sẽ hướng dẫn bạn viết ứng dụng "Hello World" - 1 ví dụ khá điển hình trong tất cả các ngôn ngữ lập trình trong giai đoạn mới bắt đầu.


Công cụ cần có

1. JDK
2. Android SDK
3. Eclipse IDE / NetBeans / IntelliJ


Kịch bản ứng dụng

- Hiển thị dòng chữ "Hello World" ra ngoài màn hình.


Viết ứng dụng Android

Để tạo 1 ứng dụng Android đơn giản sử dụng Eclipse IDE. Bạn làm theo các bước sau:
1. Click menu File -> New -> Android Application Project





2. Đặt tên cho dự án là: HelloWorld và đặt tên package name như sau:



Tiếp theo, bạn làm theo các chỉ dẫn sau và giữ mọi thứ mặc định.






Đây là dự án mà bạn đã vừa tạo thành công:



Cấu trúc của 1 ứng dụng Android

Trước khi chạy ứng dụng HelloWorld, bạn cần phải biết về cấu trúc của 1 vài thư mục và tập tin trong dự án Android:



STT Chú thích
1 src
thư mục này chứa các file mã nguồn .java cho dự án của bạn.
2 gen
Thư mục này chứa file R.java - 1 file được trình biên dịch sinh ra có khả năng tham chiếu tới tất cả các tài nguyên trong dự án. Bạn không nên chỉnh sửa file này.
3 bin
Thư mục này chứa các file *.apk (Android Package file) được build bởi ADT.
4 res/drawable-hdpi
Đây là thư mục chứa các đối tượng drawble được thiết kế dành cho các màn hình có độ phân giải cao.
5 res/layout
Đây là thư mục chứa các file layout cho việc thiết kế giao diện.
6 res/values
Đây là thư mục dành cho các file XML khác chứa 1 tập hợp các tài nguyên, ví dụ như: các định nghĩa về strings, colors.
7 AndroidManifest.xml
Đây là file manifest mô tả các đặc điểm cô bản của ứng dụng và định nghĩa các components.

Main Activity

Các mã xử lý cho main activity nằm trong file vn/code4life/helloworld/MainActivity.java. Ứng dụng sau khi build sẽ được chuyển sang dạng Dalvik Excutable (*.dex) để chạy trong Dalvik VM.

Đây là đoạn mã sinh mặc định sau khi project HelloWorld được tạo:
package vn.code4life.helloworld;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }

}


Trong đoạn mã trên, R.layout.activity_main tham chiếu tới file activity_main.xml nằm trong thư mục res/layout. Phương thức onCreate() là 1 trong nhiều phương thức được thực thị khi 1 Activity được load.


File Manifest

Bất cứ thành phần nào bạn phát triển trong ứng dụng android, bạn cần phải khai báo chúng trong 1 file manifest (nếu bạn làm qua J2ME việc này khá quen thuộc) là: AndroidManifest.xml. File này làm việc như 1 interface giữa hệ điều hành Android và ứng dụng của bạn. Nếu bạn quên không khai báo các thành phần có trong ứng dụng vào trong file này, hệ điều hành Android sẽ không chạy ứng dụng của bạn.

Nội dung của file AndroidManifest.xml mặc định như sau:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="vn.code4life.helloworld"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="vn.code4life.helloworld.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>


Cặp thẻ <application>...</application> mô tả cho ứng dụng của bạn. Thuộc tính android:icon sẽ trỏ tới icon ứng dụng nằm trong thư mục res/drawable-hdpi. Ứng dụng sử dụng file ảnh ic_launcher.png để làm icon.

Thẻ <activity> được sử dụng để chỉ định 1 Activity và thuộc tính android:name chỉ được tên Class đầy đủ (bao gồm tên package) của lớp con thừa kế lớp Activity; thuộc tính android:label chỉ định một nhãn cho Activity đó. Bạn có thể khai báo nhiều Activity bằng cách sử dụng các thẻ <activity>.

Trong thẻ <intent-filter>:
- Thẻ <action>  được gán giá trị là android.intent.action.MAIN để xác định rằng Activity này sẽ được chạy khi ứng dụng khởi động.
- Thẻ <catagory> được gán giá trị android.intent.catagory.LAUNCHER để xác định rằng ứng dụng của bạn có thể được chạy từ Home Launcher của thiết bị và hiển thị icon của ứng dụng ngoài Home Launcher.

@string tham chiếu tới file strings.xml, tôi sẽ giải thích ở bên dưới. Do đó, @string/app_name tham chiếu tới chuỗi có tên app_name được định danh trong file strings.xml. Trong ví dụ này, nội dung của nó là "HelloWorld". Bạn cũng có thể tự thêm các chuỗi của bạn vào trong file này để sử dụng trong ứng dụng.

Sau đây là danh sách các thẻ mà bạn sẽ sử dụng trong file AndroidManifest.xml để chỉ định các thành phần ứng dụng Android khác:
  • <activity>: khai báo các phần tử cho các activities.
  • <service>: khai báo các phần tử cho các services.
  • <receiver>: khai báo các phần tử cho broadcast receivers.
  • <provider>: khao bác các phần tử cho content providers.


File strings.xml

File này nằm trong thưc mục res/value và nó chứa tất cả các chuỗi văn bản mà ứng dụng của bạn sử dụng. Ví dụ như tên của các button, labels, ... Nội dung của file strings.xml mặc định trong project này như sau:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">HelloWorld</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>

</resources>


File R

file R.java nằm trong thư mục gen/vn.code4life.helloworld/. File này như là cầu nối giữa các file Activity với các file tài nguyên (ví dụ: strings.xml). Đây là file được sinh tự động và bạn không nên chỉnh sửa nội dung của nó.
Mã mặc định của file R.java:
package vn.code4life.helloworld;

public final class R {
    public static final class attr {
    }
    public static final class dimen {        
        public static final int activity_horizontal_margin=0x7f040000;
        public static final int activity_vertical_margin=0x7f040001;
    }
    public static final class drawable {
        public static final int ic_launcher=0x7f020000;
    }
    public static final class id {
        public static final int action_settings=0x7f080000;
    }
    public static final class layout {
        public static final int activity_main=0x7f030000;
    }
    public static final class menu {
        public static final int main=0x7f070000;
    }
    public static final class string {
        public static final int action_settings=0x7f050001;
        public static final int app_name=0x7f050000;
        public static final int hello_world=0x7f050002;
    }
    public static final class style {        
        public static final int AppBaseTheme=0x7f060000;        
        public static final int AppTheme=0x7f060001;
    }
}



File Layout

File res/layout/main_acitivty.xml là 1 file layout, nó được tham chiếu bởi ứng dụng của bạn khi build giao diện. Bạn sẽ làm việc với file này thường xuyên để thiết kế layout của ứng dụng.
Nội dung mặc định của file main_activity.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>


Đây là 1 ví dụ đơn giản về RelativeLayout - chúng ta sẽ tìm hiểu nó trong bài viết tiếp theo. TextView là 1 thành phần được sử dụng để thiết kế giao diện người dùng (GUI) và nó có vài thuộc tính như android:layout_width, android:layout_height, v.v...

Chạy ứng dụng trên máy ảo

Bạn hãy thử chạy ứng dụng mà bạn đã vừa tạo ra bằng cách click vào nút

Và đây là kết quả:



Whooah, bạn đã vừa viết xong ứng dụng Android đầu tiên của mình. Bạn cảm thấy thú vị chứ? Hãy đón đọc những bài viết về Android trên Blog để trở thành lập trình viên Android tuyệt vời nhé!

5 nhận xét:

  1. Đình Nghị Nguyễnlúc 21:00 9 tháng 3, 2014

    cho e hỏi là tạo project Android nhưng trong thư mục scr và res layout ko tự sinh file main với layout.xml là sao

    Trả lờiXóa
  2. Do em chưa cấu hình vào Android SDK nên IDE không chạy được tool trong SDK để sinh các file cho em

    Trả lờiXóa
  3. sao mình chạy ứng dụng trên máy ảo ko đc nhỉ...? "(

    Trả lờiXóa
  4. sao mình chạy ứng dụng trên máy ảo ko đc nhỉ...? "(

    Trả lờiXóa
  5. Sao mình thêm một button(đã save) mà file MainActivity không tự động thêm code vao bạn

    Trả lờiXóa

 

code4lifevn team

Thanh niên nghiêm túc :)

Name: Manh Do

Age: years old

Job: Senior Java and Mobile Developer

Country: VietNam

Name: Hung Nguyen

Age: years old

Job: Android Developer

Country: VietNam

Name: Trung PH

Age: years old

Job: Senior iOS and Android Developer

Country: VietNam

Name: Điệp NT

Age: years old

Job: Senior .Net and Android Developer

Country: VietNam