• Thứ Ba, 24/02/2004 12:03 (GMT+7)

    Phát triển ứng dụng J2ME và J2ME Wireless Toolkit

    Công nghệ di động ngày càng phát triển. Chiếc điện thoại di động (ĐTDĐ) giờ đây không còn đơn giản thực hiện duy nhất nhiệm vụ thoại mà càng ngày càng trở nên một trợ lý không thể thiếu và còn là thiết bị phục vụ nhu cầu giải trí.
    Công nghệ Java là một trong các công nghệ tiên phong xâm nhập vào lĩnh vực ứng dụng cho thiết bị di động (TGVT A đã có bài viết giới thiệu về Java với thế giới di động trên số báo tháng 12/2003, trang 86). Nếu bạn có một chiếc ĐTDĐ hỗ trợ Java, bạn có thể chơi game, chạy ứng dụng viết bằng Java ở bất kỳ đâu và bất kỳ lúc nào. Bạn nghĩ sao nếu tự mình viết chương trình và chạy trên chiếc ĐTDĐ của mình. Bài viết này sẽ hướng dẫn bạn từng bước để thực hiện việc này.

    Công cụ phát triển
    1. Bộ công cụ phát triển Java (JDK)
    Bạn có thể tải về (miễn phí) phiên bản mới nhất của JDK trên trang web Java của Sun. Ví dụ ở đây dùng phiên bản 1.4.2 (http://java.sun.com/j2se/1.4.2/download.html). Sau khi download, bạn chạy chương trình cài đặt, ví dụ cài vào thư mục trên máy tính C:\j2sdk1.4.2_03.
    2. CLDC (Connected limited device configuration)
    Bạn có thể tìm hiểu về CLDC tại địa chỉ: http://java.sun.com/products/cldc/index.jsp. Download nó từ trang web của Sun: http://wwws.sun.com/software/communitysource/j2me/cldc/download.html.
    Chú ý: Để có thể download, bạn cần phải đăng ký với trang web của Sun.

    Ví dụ, ta download được tập tin j2me_cldc-1_1-fcs-src-winunix.zip.
    Giải nén nó vào thư mục:
    c:\j2me.
    Đổi tên thư mục 'c:\j2me\cldc-1_1-fcs' đơn giản hơn thành 'c:\j2me\cldc'.

    3. MIDP (Mobile information device profile)
    Bạn download MIDP từ trang web của Sun: http://wwws.sun.com/software/communitysource/j2me/midp/download.html
    (Bạn chỉ cần download phiên bản 1.0.x. Các phiên bản mới hơn có thể chưa được các nhà sản xuất ĐTDĐ hỗ trợ nhiều).

    Ví dụ
    , ta download được tập tin j2me_midp-1_0_3-fcs-src-b26-win-19_sep_2001.zip.
    Giải nén nó vào thư mục:
    c:\j2me
    Đổi tên thành 'midp'.

    Cấu hình công cụ
    1. Thiết lập đường dẫn (Path)
    Bạn phải thiết lập các biến môi trường trong Windows. Vào Control Panel\System, chọn tab Advanced, nhấn Environment Variables...

    Nếu chỉ áp dụng các biến môi trường cho riêng mình (một user) thì bạn quan tâm đến khung User Variables for..., còn nếu muốn áp dụng các biến môi trường cho cả hệ thống (tất cả các user) thì bạn quan tâm đến khung System Variables.
    - Thiết lập biến môi trường JAVA_HOME. Nếu chưa có biến JAVA_HOME thì bạn chọn New để tạo, ngược lại thì chuyển đến biến JAVA_HOME, nhấn Edit để hiệu chỉnh. Nhập vào các giá trị sau:


    Hình 2 là kết quả mà ta nhận được

    . Variable Name: JAVA_HOME;
    . Variable Value: <Đường dẫn đến thư mục cài đặt Java SDK> (ví dụ: c:\j2sdk1.4.2_03).
    Nhấn OK.
    - Thiết lập biến môi trường PATH. Tương tự như trên, bạn nhập các giá trị sau:
    . Variable Name: PATH;
    . Variable Value: Nhập thêm vào giá trị có sẵn chuỗi văn bản 'C:\j2sdk1.4.2_03\bin;C:\j2me\midp\bin' (có thể thay đổi tuỳ theo hệ thống của bạn).
    Nhấn OK.
    Nhấn OK để thiết lập biến môi trường mới.
    Bạn có thể kiểm tra bằng cách gõ những lệnh sau trong cửa sổ lệnh Command Prompt:
    set JAVA_HOME
    set PATH

    2. Kiểm tra hoạt động của bộ công cụ
    Một khi các thiết lập trên có tác dụng (nếu chưa, bạn hãy kiểm tra lại xem đã thực hiện đúng các bước hay không, và thử khởi động lại máy tính), bạn có thể chạy các tiện ích Java từ chế độ dòng lệnh mà không cần chỉ ra đường dẫn đầy đủ đến các tập tin thực thi. Thử chạy chương trình mô phỏng:
    c:\midp (thư mục hiện hành là c:\)

    Viết một ứng dụng đơn giản
    1. Tạo chương trình
    Sử dụng trình soạn thảo văn bản bất kỳ, gõ vào đoạn mã sau và lưu thành tập tin 'HelloMIDlet.java' trong thư mục 'C:\HelloMIDlet'.

    Tập tin: HelloMIDlet.java

     Import javax.microedition.midlet.*;

    import javax.microedition.lcdui.*;

    public class HelloMIDlet extends MIDlet implements CommandListener

    {

       private Command exitCommand;

       private Display display;

       private TextBox t = null;

       public HelloMIDlet()

       {

          display = Display.getDisplay(this);

          exitCommand = new Command( 'Exit', Command.EXIT, 2 );

          t = new TextBox('Hello MIDlet','Test string',256, 0);

          t.addCommand(exitCommand);

          t.setCommandListener(this);

       }

       public void startApp()

       {

          display.setCurrent(t);

       }

       public void pauseApp()

       {

       }

       public void destroyApp(boolean unconditional)

       {

       }

       public void commandAction(Command c, Displayable s)

       {

          if (c == exitCommand)

          {

             destroyApp(false);

             notifyDestroyed();

          }

       }

    }

    2. Biên dịch tập tin *.JAVA thành *.CLASS
    o Chuyển đến thư mục hiện hành: 'C:\HelloMIDlet'.
    cd c:\HelloMIDlet ()
    o Gõ vào dòng lệnh sau (các tham số nằm trên cùng một dòng nhưng ở đây được viết tách ra để dễ đọc).

    javac

          -target 1.1

           -d .\

           -bootclasspath c:\j2me\midp\classes

           HelloMIDlet.java

    Ghi chú: 'target 1.1' cần có để tránh lỗi trong giai đoạn 'preverify' sau này.

    3. Bước tiền kiểm tra (Preverify) để sinh ra tập tin *.Class mới
    Bước này sẽ sinh ra tập tin *.class mới trong thư mục con mới tên là 'output' (theo mặc định). Vẫn trong thư mục hiện hành 'C:\HelloMIDlet', gõ vào lệnh sau:

    preverify -classpath c:\j2me\midp\classes;.  HelloMIDlet

    4. Kiểm tra tập tin *.Class mới
    Lệnh sau sẽ tìm trong thư mục 'output' tập tin *.class cần thiết và thực thi ứng dụng trong chương trình mô phỏng.

    midp -classpath c:\j2me\midp\classes;.\output  HelloMIDlet

    5. Tạo tập tin manifest.mf và *.JAR


    Hình 3 là
    kết quả ta sẽ
    thấy khi thực
    hiện thành công.Xin chúc mừng

    Tập tin manifest.mf cần thiết để cho ĐTDĐ của bạn hiểu được được tập tin Java nén *.JAR. Nếu không có tập tin manifest thích hợp trong tập tin *.JAR thì điện thoại của bạn vẫn download được nhưng sẽ báo lỗi 'Unsupported Content Type'.

    Tập tin: manifest.mf

    MIDlet-1: My_Description,,  HelloMIDlet

    MIDlet-Name: My_Midlet_Suite

    MIDlet-Vendor: Colin Fahey, Inc.

    MIDlet-Version: 1.0

    MicroEdition-Configuration: CLDC-1.0

    MicroEdition-Profile: MIDP-1.0

    Chú ý rằng các phiên bản của CLDC và MIDP được xác định trong tập tin này. Hãy thận trọng với các trường trong tập tin này. Nếu bạn gặp lỗi 'File Corrupt' khi download ứng dụng về điện thoại, hãy thử bỏ đi tất cả các trường không được chỉ ra trong tập tin manifest ở trên. Tiếp theo, hãy đặt các trường theo đúng thứ tự. Sau đó, rút ngắn giá trị của trường càng nhiều càng tốt, và chỉ dùng các ký tự đơn giản, số, dấu gạch ngang.

    Chú ý: Khi bạn dùng lệnh 'jar' để tạo tập tin JAR và chỉ định tập tin 'manifest.mf', lệnh jar sẽ đọc tập tin manifest và thêm vào các trường mới khi tạo tập tin manifest.mf bên trong tập tin JAR được tạo ra.
    Dòng lệnh sau đây sẽ tạo ra tập tin *.JAR chứa tập tin manifest.mf và *.class ở đường dẫn chỉ định.

    jar cfm hi.jar manifest.mf -C .\output HelloMIDlet.class

    6. Tạo và hiệu chỉnh tập tin *.JAD
    Tập tin *.JAD cần để cho ĐTDĐ có thể mô tả ứng dụng của bạn cho người dùng trước khi download.

    Dưới đây là ví dụ một tập tin *.JAD:

    Tập tin: hi.jad

    MIDlet-1: My_Description,, HelloMIDlet

    MIDlet-Jar-Size: 1283

    MIDlet-Jar-URL: http://www.colinfahey.com/hi.jar

    MIDlet-Name: My_Midlet_Suite

    MIDlet-Vendor: Colin Fahey, Inc.

    MIDlet-Version: 1.0

    Có các công cụ tạo tập tin *.JAD tự động cập nhật trường kích thước 'MIDlet-Jar-Size' mỗi khi 'rebuild' tập tin *.JAR. Bạn có thể tìm các công cụ này trên mạng với từ khoá 'J2ME tools'.
    Ghi chú: Nếu trường kích thước không đưa chính xác số byte của tập tin *.JAR, bạn sẽ gặp lỗi sau khi download thành công và cài đặt vào điện thoại của bạn:

    'Download Failed'

    Lỗi sau có thể xuất phát từ các trường bị sai trong tập tin *.JAD hay trong tập tin manifest.mf đính kém trong tập tin *.JAR.

    'Failed: File Corrupt'

    Chú ý: Mặc dù nhiều máy chủ web (Apache) có thể làm việc tốt với đường dẫn đến tập tin JAR cục bộ (nằm trong cùng thư mục với tập tin JAD), như sau:

    MIDlet-Jar-URL: hi.jar

    Nhưng có các máy chủ web khác (chẳng hạn như Yahoo!) cần phải có đường dẫn đầy đủ, như sau:

    MIDlet-Jar-URL: http://www.colinfahey.com/hi.jar

    Trong bất kỳ trường hợp nào, thì đặt đường dẫn rõ ràng vẫn an toàn hơn.

    7. Chạy kiểm tra tập tin *.JAR và *.JAD
    Dòng lệnh sau sẽ thực thi các lớp trong tập tin *.JAR được mô tả bởi tập tin *.JAD:

    midp -classpath c:\j2me\midp\classes;.\hi.jar -descriptor hi.jad

    Sun J2ME wireless toolkit
    Sun cung cấp một môi trường phát triển thuận tiện để xây dựng và đóng gói ứng dụng di động J2ME: Java 2 Platform Micro Edition (J2ME) Wireless Toolkit. (Chú ý: Bạn cần phải download Java 2 SDK 1.4 trước như đã mô tả ở phần trên). Hãy đến địa chỉ sau để download phiên bản J2ME Wireless Toolkit 1.0.4_01: http://java.sun.com/products/j2mewtoolkit/. (Hiện tại có thể có phiên bản mới hơn, nhưng đừng download phiên bản 2.0 hoặc 2.1 vì nó khá khác biệt so với phiên bản 1.0.4). Bạn sẽ download được tập tin sau:

    j2me_wireless_toolkit-1_0_4_01-bin-win.exe

    Chạy tập tin này để cài đặt vào máy của bạn. Sau khi cài đặt, bạn chạy KToolbar từ menu Start/Programs/J2ME Wireless Toolkit 1.0.4_01/KToolbar.
    Bây giờ KToolbar đã sẵn sàng. Nhấn vào 'New Project...' để tạo một project mới.
    Nhập vào tên project (sẽ là tên tập tin JAR và tên của thư mục project mới), và nhập vào tên của MIDlet class (là lớp chính của ứng dụng của bạn). Ví dụ ở đây một project mới tên là 'sbj' được tạo (hình 4). 

    Bạn lưu ý các đường dẫn thư mục đặt các tập tin nguồn *.java, thư viện... Ví dụ: 'c:\WTK104\apps\sbj\src',... như trong hình 4.
    Ghi chú: Để bắt đầu, bạn có thể sử dụng project mẫu có sẵn của J2ME Wirless Toolkit.
    Nhấn 'Open Prject...', sau đó chọn một project nào đó, ví dụ 'demos'. Nhấn 'Open Project'.
    Nhấn vào 'Settings' trên toolbar để vào menu cấu hình cho project (hình 5). 

    Đừng để ý đến trường 'MIDlet-Jar-Size' (giá trị mặc định là 100 byte), nó sẽ tự động được thiết lập đúng khi ta 'build' project.

    Nhấn vào tab MIDlets trong hộp thoại cấu hình (hình 6).
    Nhấn chọn trường duy nhất trong bảng ('MIDlet-1') và nhấn nút Edit.
    Xoá trường 'Icon' nếu bạn không có tập tin *.PNG để đặt vào tập tin JAR.
    Chấp nhận các thay đổi (OK).

    Sau đó thực hiện các bước sau:

    (1) Xoá tất cả tập tin *.class: Project oClean.

    (2) Build tất cả tập tin *.class và preverify chúng.

    (3) Sinh ra tập tin *.JAR và *.JAD: ProjectoPackageoCreate Package.

    Sau khi bạn thực hiện xong 3 bước trên, các tập tin *.JAR và *.JAD được tạo ra đã có thể sẵn sàng để thực thi trong chương trình mô phỏng hay đưa lên web (wap) site để download. Đừng quên thực hiện bước 3 mỗi khi bạn rebuild!

    Bây giờ bạn có thể kiểm tra bằng cách nhấn nút Run.

    Chỉ cần copy các tập tin *.JAR và *.JAD từ các thư mục đã chỉ định (bởi cửa sổ console của KToolbar trong quá trình build project), ví dụ như (từ cửa sổ console):

    Wrote c:\WTK104\apps\sbj\bin\sbj.jar

    Wrote c:\WTK104\apps\sbj\bin\sbj.jad

    Đặt trực tiếp các tập tin này lên web site của bạn mà không cần phải hiệu chỉnh gì cả, và nó sẽ hoạt động tốt.

    Triển khai ứng dụng (Thông qua web)
    Hãy chắc rằng máy chủ web hiểu được kiểu mở rộng JAR/JAD MIME. Nếu bạn dùng một máy chủ web Apache, bạn cần phải tạo tập tin '.htaccess' ở thư mục gốc đặt trang web. Tập tin này cho phép bạn ghi đè cấu hình của Apache, như thêm hay ghi đè các MIME type. Bạn phải thêm vào kiểu JAR và JAD, như trong tập tin sau:

    [Tập tin: .htaccess]

    AddType text/vnd.sun.j2me.app-descriptor jad

    AddType application/java-archive jar

    AddType text/vnd.wap.wml wml

    Nếu bạn dùng một loại máy chủ web khác, bạn phải làm thế nào để xác định được các MIME type và chắc chắn rằng JAR và JAD được cấu hình giống như trên.
    Nếu MIME type chưa được thiết lập, điện thoại sẽ từ chối download tập tin *.JAD của bạn với một thông điệp như sau:

    '406: Not Acceptable'

    Ghi chú: Bạn có thể download máy chủ web hỗ trợ Java - Tomcat tại địa chỉ:
    http://jakarta.apache.org/tomcat/.

    1. Cung cấp liên kết đến tập tin *.JAD
    Một số loại ĐTDĐ cho phép bạn nhập địa chỉ URL trực tiếp đến tập tin *.JAD. Nhưng bạn nên đặt các link đến tập tin *.JAD trong trang HTML hay WML.

    Ví dụ:
    Một trang HTML đơn giản link đến tập tin *.JAD.

    <html>

    <head><title>My J2ME Application</title></head>

    <body>

    <a href='hi.jad'>My HelloMIDlet Application</a>

    </body>

    </html>

    Đặt tập tin HTML này chung thư mục với tập tin *.JAR, *.JAD.

    2. Download ứng dụng 'Over the air' (OTA)
    Việc download tùy vào điện thoại, bạn phải cung cấp địa chỉ URL đến tập tin *.JAD (hay trang HTML, WML), và download ứng dụng về điện thoại.
    Sau đây là trình tự để download và thực thi chương trình MIDlet được xây dựng và triển khai như trên, quá trình này được thực hiện trên mẫu ĐTDĐ Motorola T720. 

    [1]        Desktop: Đây là màn hình bạn sẽ thấy khi bạn mở điện thoại.
    [2]        Main Menu: Di chuyển xuống và chọn mục 'WebAccess'.
    [3]        WebAccess: Di chuyển xuống và chọn mục 'Go To URL' 

    [4]        Enter URL: Nhập địa chỉ URL của tập tin *.JAD của bạn (hoặc là địa chỉ đến trang HTML hay WML).
    [5]        Details: Thông tin này được lấy từ tập tin *.JAD. Nhấn DOWNLD để download tập tin *.JAR.
    [6]        Download Complete: Download hoàn tất. Hãy chờ cho thông điệp này biến mất
     

    [7]        Installing: Đang cài đặt. Hãy chờ cho thông điệp này biến mất.
    [8]        xxxx bytes transferred: Số byte đã được truyền đi. Hãy chờ cho thông điệp này biến mất.
    [9]        Installed: Đã cài đặt xong. Hãy chờ cho thông điệp này biến mất.

    Khi bạn được đưa trở lại menu WebAccess, hãy thoát ra tất cả các menu để trở về màn hình desktop. Hãy truy cập vào 'Games & Apps' (bằng Main Menu hay bằng biểu tượng).
    [10]      Java Powered: Hãy chờ cho màn hình này biến mất.
    [11]      Games & Apps: Chuyển dấu chọn đến ứng dụng mới của bạn (thành công rồi!).
    [12]      Thực thi ứng dụng MIDlet: Hãy so sánh hình thức của MIDlet khi chạy trên ĐTDĐ so với trên trình giả lập 'midp' trước đây. Chúng tương tự nhau.

    Chú ý: Việc trao đổi dữ liệu trên băng thông di động sẽ tốn cước phí. Để có thể download, điện thoại của bạn cần phải hỗ trợ WAP và Java, bạn phải đăng ký sử dụng dịch vụ WAP với nhà cung cấp dịch vụ.

    3. Nạp ứng dụng vào ĐTDĐ từ máy tính
    Nếu điện thoại của bạn có thể giao tiếp với máy tính (bằng cáp hoặc Bluetooth) và hỗ trợ Java thì bạn có thể nạp ứng dụng trực tiếp vào điện thoại thông qua máy tính. Việc này tùy vào từng loại ĐTDĐ và nằm ngoài phạm vi của bài viết.
    Từ khoá: J2ME, MIDP, CLDC, Java, điện thoại di động, WAP

    Nội dung bài viết đã từng được gửi lên Diễn đàn JavaVietnam.

    Lê Ngọc Quốc Khánh
    qkhanhlen@yahoo.com

     

    ID: A0402_82