• Thứ Hai, 14/06/2004 19:23 (GMT+7)

    J2ME Thật đơn giản

    Điện thoại di động (ĐTDĐ) ngày càng phổ biến, thậm chí với nhiều người nó còn đóng vai trò thiết yếu trong cuộc sống hàng ngày. Cùng với sự gia tăng số lượng, tính năng của ĐTDĐ cũng ngày một nâng cao. Hàng loạt các tính năng cao cấp được giới thiệu như chụp hình số, nghe nhạc và đặc biệt nhất là có thể nạp và chạy chương trình giống như máy tính. ĐTDĐ giờ đây gần như là chiếc máy tính thu nhỏ, cho phép bạn duyệt web, làm việc với bảng tính, tra từ điển và cả chơi game. Trong bài viết này chúng ta sẽ tìm hiểu một trong những nền tảng phát triển ứng dụng trên ĐTDĐ phổ biến nhất hiện nay: J2ME (Java 2 Platform, Micro Edition).

    Lịch sử

     


    Hình 1: Phiên bản Java 1 và 2

     

    Hình 2: J2ME trong hệ thống Java 2

    J2ME được phát triển từ kiến trúc Java Card, Embeded Java và Personal Java của phiên bản Java 1.1. Khi cho ra đời Java 2, Sun quyết định thay thế Personal Java và đặt tên mới là Java 2 Micro Edition, viết tắt là J2ME. Đúng với tên gọi, J2ME là nền tảng phát triển ứng dụng dành cho các thiết bị nhỏ, có tài nguyên hệ thống hạn chế (Micro: nhỏ).

    Thị trường của J2ME bao gồm nhiều chủng loại thiết bị như:

    1.   Thẻ thông minh như Java Card

    2.   Điện thoại di động

    3.   PDA (Personal Digital Assistant)
    ...

    Kiến trúc J2ME

    J2ME gồm các thành phần chính sau:

    1. Configuration (Cấu hình): là đặc tả môi trường phần mềm dành riêng cho một dòng thiết bị được phân loại bởi tập hợp các đặc tính, ví dụ như:

    •    Kiểu và số lượng bộ nhớ

        Kiểu và tốc độ bộ xử lý

    •    Kiểu mạng kết nối

    Các nhà sản xuất thiết bị như Siemens, Samsung, Nokia... đều phải tuân thủ các đặc tả chung do Sun qui định nhằm đảm bảo sự nhất quán cho môi trường phát triển ứng dụng. Hiện Sun đã đưa ra 2 dạng Configuration.

    - CLDC (Connected Limited Device Configuration - Cấu hình thiết bị kết nối giới hạn): được thiết kế cho dòng thiết bị cấp thấp, thường là ĐTDĐ và PDA với khoảng 512 KB bộ nhớ.

    - CDC (Connected Device Configuration - Cấu hình thiết bị kết nối): được thiết kế cho dòng thiết bị có tính năng mạnh hơn (bộ nhớ thường là 2MB và bộ xử lý khá mạnh) dòng thiết bị thuộc CLDC nhưng vẫn yếu hơn các hệ thống PC. Các sản phẩm thuộc loại này có thể kể đến PDA cao cấp, thiết bị gia dụng trong gia đình...

     


    Hình 3: Vị trí của các profile.

    Cả 2 cấu hình trên đều chứa máy ảo Java (Java Virtual Machine) và tập hợp các lớp (class) Java cơ bản để cung cấp môi trường làm việc cho ứng dụng J2ME. Tuy nhiên,  đối với các thiết bị cấp thấp, do hạn chế về tài nguyên như bộ nhớ và bộ xử lý nên không thể yêu cầu máy ảo hỗ trợ tất cả các tính năng như với máy ảo trên PC. Ví dụ, các thiết bị thuộc CLDC không có khả năng xử lý phép tính dấu phẩy động, nên máy ảo thuộc CLDC không hỗ trợ kiểu float và double.

    Bảng 1 so sánh các thông số kỹ thuật của CDC và CLDC

    2. PROFILE:  Profile mở rộng configuration bằng cách thêm các class để bổ sung tính năng cho từng thiết bị chuyên biệt.  Do mỗi profile định nghĩa một tập hợp các class khác nhau, nên thường không thể chuyển một ứng dụng Java viết cho một profile này sang chạy trên một máy hỗ trợ một profile khác. Chúng ta sẽ điểm qua các profile tiêu biểu.

    - Mobile Information Device Profile (MIDP): profile này bổ sung các tính năng như hỗ trợ kết nối, giao diện người dùng... vào CLDC. Profile này được thiết kế chủ yếu nhắm vào ĐTDĐ với đặc tính màn hình hiển thị hạn chế, dung lượng chứa có hạn. Do đó, MIDP cung cấp một giao diện người dùng và các tính năng mạng đơn giản dựa trên HTTP. Có thể nói MIDP là profile nổi tiếng nhất vì nó là nền tảng lập trình Java trên ĐTDĐ.

    - PDA Profile: tương tự MIDP, nhưng nhắm đến PDA với màn hình và bộ nhớ lớn hơn.

    - Foundation Profile: mở rộng các tính năng của CDC với phần lớn các thư viện của bộ Core Java 2 1.3.

    Ngoài ra còn có Personal Basis Profile, Personal Profile, RMI Profile, Game Profile.

    Chương trình J2ME đầu tiên

    1. Thiết lập môi trường lập trình

    Trước hết, bạn cần cài đặt các công cụ phát triển

    - Cài đặt bộ J2SE, địa chỉ tải về http://java.sun.com/j2se/. Việc cài đặt khá dễ dàng, giả sử bạn cài đặt vào thư mục j2sdk1.4.0_03 ở thư mục gốc ổ đĩa C.

    - Thiết lập giá trị cho các biến môi trường:

    •    Vào Control Panel->System->chọn tab Advanced, nhấn vào nút Environment Variables. Thêm biến JAVA_HOME với giá trị là  c:\j2sdk1.4.0_03.

    •    Thiết lập đường dẫn: Cũng vẫn ở trong cửa sổ Environment Variables. Thêm giá trị c:\j2sdk1.4.0_03\bin vào biến môi trường Path.

    - Cài đặt J2ME Wireless Toolkit: Đây là bộ công cụ do Sun phát triển giúp lập trình viên chạy thử chương trình mà không cần điện thoại thật. Bạn có thể tải bộ công cụ này ở địa chỉ http://java.sun.com/products/j2mewtoolkit/.

    Hình 4: Giao diện J2ME Wireless Toolkit

    Lưu ý là bạn phải đăng ký thành viên trước khi download. Việc đăng ký hoàn toàn miễn phí. Để cài đặt, bạn làm theo hướng dẫn của chương trình. Giả sử bạn cài đặt vào thư mục Wtk104 trên thư mục gốc ổ đĩa C.

    Để chạy bộ công cụ này, bạn chọn KToolbar từ menu J2ME Wireless Toolkit 1.0.4_01. Nếu mọi việc suôn sẻ, bạn sẽ thấy cửa sổ chính hiện ra như hình 4. Chúc mừng bạn, giờ thì bạn có thể bắt tay vào việc viết chương trình.

    2. Những dòng lệnh đầu tiên

    Sau khi hoàn thành các bước trên, bạn bắt đầu viết những dòng chương trình đầu tiên.

    Bạn nhấn chuột vào nút New Project và nhập tên project và class mà bạn muốn tạo, ví dụ TestMidlet. Chú ý là bạn không nhất thiết phải tạo trùng tên class với tên project.

    Trên cửa sổ chương trình sẽ hiển thị các thông báo tạo thư mục phục vụ cho việc xây dựng và thực thi mã chương trình (hình 5).

    Bạn hãy dùng Windows Explorer để xem xét các thư mục vừa tạo (hình 6).

    Hình 5: Thông báo tạo thư mục cho xây dựng và thực thi mã chương trình.

    ToolKit sẽ tự động tạo 1 thư mục con trong thư mục apps có tên trùng với tên project mà bạn vừa tạo, trong trường hợp này là TestMidlet. Ta hãy điểm sơ qua vài thư mục quan trọng.

    - bin: Chứa file cài đặt, .jar (Java ARchive) và file miêu tả .jad.

    - lib: Chứa các thư viện bổ sung mà bạn muốn thêm vào chương trình.

    - res: Thư mục lưu giữ các file tài nguyên dành riêng cho chương trình như file văn bản và hình ảnh.

    - src: Đây là thư mục quan trọng nhất, là nơi bạn đặt các file mã nguồn.

    Ngoài ra, khi chạy chương trình, bộ Toolkit này còn tạo ra một số thư mục dành cho mục đích riêng.

    Bây giờ đến lúc bắt đầu viết chương trình. Bạn hãy dùng 1 trình soạn thảo văn bản nào đó, và nhập đoạn code sau.

    import javax.microedition.lcdui.*;

    import javax.microedition.midlet.*;

    public class TestMidlet

        extends MIDlet

        implements CommandListener {

      private Form mMainForm;

      public TestMidlet() {

        mMainForm = new Form('Chuong trinh so 1');

        mMainForm.append(new StringItem(null, 'Chao cac ban, MIDP!'));

        mMainForm.addCommand(new Command('Exit', Command.EXIT, 0));

        mMainForm.setCommandListener(this); }


    public void startApp() {

        Display.getDisplay(this).setCurrent(mMainForm);  }


    Hình 6: Dùng windows Explorer để xem thư mục chương trình.

     

      public void pauseApp() {}

      public void destroyApp(boolean unconditional) {}

      public void commandAction(Command c, Displayable s) {notifyDestroyed();}

    }

    Chú thích: Màn hình thật sự trên ĐTDĐ được hình tượng hóa bằng đối tượng Display. Mỗi MIDlet chỉ có một và duy nhất một đối tượng Display, và bạn có thể truy cập bằng cách dùng lệnh getDisplay(this).

    Lưu đoạn code trên với tên TestMidlet.java trong thư mục src. Sau đó bấm nút Build, bạn sẽ nhận được thông báo sau:


    Project settings savedBuilding 'TestMidlet' Build complete

    Nhấn nút Run để chạy trình mô phỏng, chọn TestMidlet (hình 7). Vậy là bạn đã hoàn thành chương trình J2ME đầu tiên.

    3. Phân tích chương trình

     

    Hình 7: Trình mô phỏng ĐTDĐ

     

    Hình 8: Chu trình hoạt động của một Midlet.

    Giống như dạng chương trình Applet trên J2SE, một MIDlet luôn kế thừa javax.microedition.midlet. Hàm cơ bản nhất trong mọi MIDlet là startApp(), hàm này sẽ khởi tạo MIDlet cũng như vận hành các thành phần hoặc đối tượng khác. Ngoài startApp(), mỗi MIDlet còn có các hàm pauseApp() và destroyApp(), mỗi hàm sẽ được gọi thực thi tương ứng khi người dùng chọn dừng hoặc thoát chương trình. Tham khảo minh hoạ chu trình hoạt động của MIDlet trong hình 8.

    Trên đây là một số thông tin cơ bản về J2ME, cùng với một ví dụ nhỏ và hết sức đơn giản, hy vọng có thể giúp bạn bước đầu làm quen với nền tảng phát triển ứng dụng di động đầy hứa hẹn này.ÿ

     

    MIDP

     

     

    Định nghĩa: là profile dành riêng cho thiết bị di động và là thành phần chính trong J2ME. MIDP cung cấp các chức năng cơ bản cho hầu hết các dòng thiết bị di động phổ biến như  ĐTDĐ và PDA.
    Những chức năng MIDP không thể làm được
    1.   Phép tính dấu phẩy động (floating point): Phép tính này đòi hỏi rất nhiều tài nguyên CPU. Phần lớn CPU dùng cho các thiết bị di động không hỗ trợ phép tính này, do đó MIDP cũng không có.
    2.   Bộ nạp class (Class Loader).
    3.   Hỗ trợ  từ khóa finalize() như trong J2SE: Việc 'dọn dẹp' tài nguyên trước khi xóa được đẩy về phía lập trình viên.
    4.   Hỗ trợ JNI.
    5.   Hỗ trợ thao tác bắt lỗi: Chỉ hỗ trợ hạn chế.
    6.   Thư viện API cho Swing và AWT: Phần lớn không thể sử dụng trong MIDP.
    7.   Hỗ trợ các tính năng quản lý file và thư mục: Điều này có thể làm bạn ngạc nhiên nhưng thực tế là các thiết bị J2ME không có hỗ trợ các thiết bị lưu trữ thông thường như ổ cứng v.v. Tuy nhiên, điều đó không có nghĩa là bạn phải mất  đi mọi dữ liệu quan trọng khi tắt máy, Sun đã cung cấp một chức năng khác tương đương gọi là Record Management system (RMS) để lưu trữ cho các thiết bị này.

    Những chức năng MIDP cung cấp
    1.   Các lớp và kiểu dữ liệu: Phần lớn các lớp đã quen thuộc với các lập trình viên Java vẫn được giữ lại, ví dụ: các lớp trong gói java.util như Stack, Vector và Hastable cũng như Enumeration. Tuy nhiên, bạn không thể dùng Iterator. (Xem bảng liệt kê các package được hỗ trợ trong môi trường J2ME bao gồm CLDC, CDC và MIDP).
    2.   Hỗ trợ đối tượng Display: một chương trình MIDP sẽ hỗ trợ duy nhất một đối tượng Display, là đối tượng quản lý việc hiển thị dữ liệu trên màn hình điện thoại.
    3.   Hỗ trợ Form và các giao diện người dùng.
    4.   Hỗ trợ Timer và Alert.
    5.   Record Management System (RMS) cho việc lưu trữ dữ liệu

    MIDP 2.0
    MIDP 2.0 được Sun đưa ra vào tháng 11/2003 với hàng loạt tính năng mới (hiện tại Việt Nam đã có những model điện thoại hỗ trợ MIDP 2.0, như Nokia 6600 hay Sony Ericsson P900). Dưới đây là những cải tiến nổi bật của MIDP 2.0 so với MIDP 1.0:
    1.   Nâng cấp các tính năng bảo mật:
       Download qua mạng an toàn hơn qua việc hỗ trợ giao thức HTTPS.
       Kiểm soát việc kết nối giữa máy di động và server: ví dụ các chương trình không thể kết nối tới server nếu không có sự chấp thuận của người sử dụng.
    2.   Thêm các API hỗ trợ multimedia: Mobile Media API (MMAPI).
    3.   Mở rộng các tính năng của Form. Nhiều cải tiến đã được đưa vào API javax.microedition.lcdui trong MIDP 2.0, nhưng các thay đổi lớn nhất (ngoài API cho game) là trong Form và Item. 
    4.   Hỗ trợ lập trình game với Game API: Trước đây với MIDP 1.0, lập trình viên phải tự viết code quản lý hành động của nhân vật và đồ họa. Việc này làm tăng kích thước chương trình cũng như khả năng lỗi. Với Game API trong MIDP 2.0, công việc trở nên nhẹ nhàng hơn nhiều.
    Ý tưởng cơ bản của Game API là giả định một màn hình game như là tập hợp các lớp (layer). Ví dụ, trong game đua xe thì màn hình nền là một layer, con đường là một layer và chiếc xe thì nằm trên layer khác.
    5.   Hỗ trợ kiểu ảnh RGB: một trong những cải tiến hấp dẫn cho các nhà phát triển MIDP là việc biểu diễn hình ảnh dưới dạng các mảng số nguyên, cho phép MIDlet thao tác với dữ liệu hình ảnh một cách trực tiếp.

     

    Nguyễn Hữu Mai
    mai.nh@MyVietnam.net

     Tham khảo:
     
    http://www.cs.armstrong.edu/burge/pdf/huc/01_J2ME_Overview.pdf
     
    http://www.onjava.com/pub/a/onjava/2001/03/08/J2ME.html
     
    http://developers.sun.com/techtopics/mobility/midp/articles/wtoolkit/

     

    ID: A0406_122