BỘ GIÁO DỤC & ĐÀO TẠO
TRƯỜNG ĐẠI HỌC MỞ TP.HCM
KHOA CÔNG NGHỆ THÔNG TIN
KHÓA LUẬN TỐT NGHIỆP
Đề tài:
LẬP TRÌNH ỨNG DỤNG MOBILE BẰNG
JAVA
GVHD : Tiến sĩ. NGUYỄN VĂN HIỆP
SVTH : NGUYỄN CÔNG HÙNG
MSSV : 106H1031
TP.HỒ CHÍ MINH – NĂM 2009
Lời Cảm Ơn!
Luận án đã được thực hiện trong một thời gian dài, và đây là thành phẩm lớn nhất mà
tôi thực hiện được trong quá trình học tập tại trường. Ngoài sự cố gắng, nỗ lực của bản
thân, còn nhận sự giúp đỡ của nhiều người để tôi có thể hoàn thiện được luận án như ngày
nay.
Đầu tiên, con xin vô cùng biết ơn Ba Mẹ, đã có công sinh thành, dưỡng dục, thương
yêu và chăm sóc để cho con có được ngày hôm nay.
Tôi xin cảm ơn các thầy cô Khoa Công nghệ thông tin và các thầy cô trường Đại Học
Mở TP.HCM đã truyền đạt những kiến thức, kinh nghiệm quý báu trong quá trình học tập
và nghiên cứu.
Em xin chân thành cảm ơn tiến sĩ.Nguyễn Văn Hiệp, giảng viên Khoa Công nghệ
thông tin – trường Đại Học Bách Khoa Tp.HCM đã tận tình hướng dẫn, định hướng, góp
ý trong quá trình thực hiện luận văn.
Tôi xin cảm ơn tập thể nhóm lập trình phần mềm công ty Tin học Thảo Chương đã tạo
điều kiện cho tôi trong quá trình thực hiện luân văn này.
Tôi xin cảm ơn các bạn đã động viên cho tôi trong quá trình thực hiện luận văn.
Mặc dù, tôi đã nỗ lực để hoàn thành bài báo cáo này và đã đạt một số kết quả nhất
định, tuy nhiên những sai sót trong báo cáo không tránh khỏi, kính mong sự thông cảm và
đóng gớp ý kiến của quý thầy cô và các bạn.
Xin chân thành cảm ơn!
Tp. HCM, ngày 07, tháng 01, năm 2009.
Người thực hiện: Nguyễn Công Hùng.
Mã số sinh viên: 106H1031.
Lớp học: HCTH062C.
Xin
Cảm
Ơn!
Luận văn tốt nghiệp
CHƯƠNG 1:
1.1.
1.2.
1.3.
Đặt vấn đề..................................................................................................4
Mục tiêu đặt ra cho đề tài ............................................................................5
Nội dung....................................................................................................6
CHƯƠNG 2:
2.1.
MỤC TIÊU VÀ NỘI DUNG ĐỀ TÀI. ...................................... 4
TỔNG QUAN VỀ J2ME ......................................................... 7
CÁC THÀNH PHẦN CỦA J2ME................................................................7
2.1.1.
Tầng phần cứng thiết bị (Device Hardware Layer) .......................................... 8
2.1.2.
Tầng máy ảo Java (Java Virtual Machine Layer) ............................................. 8
2.1.3.
Tầng cấu hình (Configuration Layer) ........................................................... 10
2.1.4.
Tầng hiện trạng (Profile Layer) ................................................................... 12
2.1.5.
Một số hạn chế của J2ME so với các phiên bản khác(chủ yếu nằm ở tầng
Configuration này): ........................................................................................................ 12
2.2.
CHỨC NĂNG CÁC THÀNH PHẦN .........................................................13
2.2.1.
Máy ảo Java (Kilobyte Virtual Machine - KVM)........................................... 13
2.2.2.
CLDC...................................................................................................... 15
2.2.2.1.
Yêu cầu phần cứng dành cho CLDC:....................................................... 16
2.2.2.2.
Yêu cầu phần mềm dành cho CLDC:....................................................... 17
2.2.2.3.
Sự khác biệt giữa CLDC 1.0 và CLDC 1.1 ............................................... 17
2.2.2.4.
Danh sách các lớp mà CLDC cung cấp. ................................................... 17
2.2.3.
MIDP ...................................................................................................... 20
2.2.3.1.
Định nghĩa: .......................................................................................... 20
2.2.3.2.
Những chức năng mà MIDP không hỗ trợ: ............................................... 20
2.2.3.3.
Những chức năng mà MIDP cung cấp...................................................... 21
2.2.3.4.
Những yêu cầu dành cho MIDP. ............................................................. 21
2.2.3.5.
Các dạng profile.................................................................................... 22
2.2.3.6.
Sự khác nhau giữa MIDP 1.0 và MIDP 2.0............................................... 22
2.2.3.7.
Danh sách lớp mà MIDP cung cấp. ......................................................... 23
CHƯƠNG 3:
3.1.
3.2.
ĐỊNH NGHĨA:.........................................................................................26
CÁC DẠNG MIDLET ..............................................................................26
3.2.1.
3.2.2.
3.3.
BỘ MIDLET......................................................................... 26
Ứng dụng đơn (standalone application). ....................................................... 26
Ứng dụng nối mạng (networked application). ............................................... 26
CẤU TRÚC MỘT BỘ MIDLET (MIDlet suite)...........................................26
3.3.1.
Cấu trúc file Jar......................................................................................... 26
3.3.2.
File JAD (Java Application Descriptor File) : ............................................... 27
3.3.2.1.
Đặt tả .................................................................................................. 27
3.3.2.2.
Các phương thức trong MIDlet ............................................................... 29
3.3.2.3.
Xây dựng một ứng dụng MIDlet: ............................................................ 29
3.3.2.4.
Lớp MIDlet: ......................................................................................... 31
CHƯƠNG 4:
4.1.
GIAO DIỆN ĐỒ HỌA........................................................... 33
QUẢN LÝ VIỆC HIỂN THỊ VÀ BẮT SỰ KIỆN. .......................................35
-- Trang 1 --
Luận văn tốt nghiệp
4.1.1.
Quản lý việc hiển thị.................................................................................. 35
4.1.1.1.
Lớp Display. ........................................................................................ 35
4.1.1.2.
Lớp Displayable.................................................................................... 36
4.1.2.
Quản lý các sự kiện: .................................................................................. 37
4.1.2.1.
Command và CommandListener. ............................................................ 38
4.1.2.2.
Item và ItemStateListener ...................................................................... 41
4.2.
GIAO DIỆN ĐỒ HỌA CẤP CAO..............................................................42
4.2.1.
4.2.2.
4.2.3.
4.2.3.1.
4.2.3.2.
4.2.3.3.
4.2.3.4.
4.2.3.5.
4.2.3.6.
4.2.3.7.
4.2.4.
4.2.5.
4.2.6.
4.2.7.
4.2.7.1.
4.2.7.2.
4.2.7.3.
4.2.8.
4.3.
Screen:..................................................................................................... 42
Form:....................................................................................................... 42
Item:........................................................................................................ 43
DateField: ............................................................................................ 44
Gauge: ................................................................................................. 45
StringItem: ........................................................................................... 47
TextField: ............................................................................................ 47
ChoiceGroup: ....................................................................................... 50
Image: ................................................................................................. 53
ImageItem:........................................................................................... 54
TextBox................................................................................................... 56
Alert ........................................................................................................ 58
AlertType:................................................................................................ 60
List:......................................................................................................... 61
Các dạng của list................................................................................... 61
Bắt sự kiện cho các đối tượng List........................................................... 62
So sánh giữa lớp List và lớp ChoiceGroup: .............................................. 62
Ticker: ..................................................................................................... 64
ĐỒ HỌA CẤP THẤP ...............................................................................64
4.3.1.
Canvas:.................................................................................................... 65
4.3.1.1.
Hệ tọa độ ............................................................................................. 65
4.3.1.2.
Vẽ trên đối tượng Canvas:...................................................................... 66
4.3.1.3.
Bắt sự kiện trong các đối tượng Canvas. .................................................. 68
4.3.1.4.
Game action: ........................................................................................ 70
4.3.2.
Graphics: ................................................................................................. 72
4.3.2.1.
Color: .................................................................................................. 73
4.3.2.2.
Nét vẽ:................................................................................................. 74
4.3.2.3.
Font chữ: ............................................................................................. 76
4.3.2.4.
Vẽ các đối tượng hình ảnh (Image):......................................................... 78
4.3.2.5.
Các phương thức tịnh tiến của đối tượng: ................................................. 79
4.3.2.6.
Vùng xén (Clipping regions): ................................................................. 81
CHƯƠNG 5:
LƯU TRỮ THÔNG TIN VÀ LẬP TRÌNH MẠNG. ................. 82
NộI DUNG TRÌNH BÀY:...................................................... 82
LƯU TRữ THÔNG TIN TRONG J2ME.................................. 82
KếT NốI MạNG VớI GENERIC CONNECTION FRAMEWORK.
82
-- Trang 2 --
Luận văn tốt nghiệp
5.1.
Lưu trữ thông tin với RMS ........................................................................82
5.1.1.
5.1.2.
5.1.3.
5.1.4.
5.1.5.
5.2.
RecordStore.............................................................................................. 83
RecordEnumeration................................................................................... 91
Sắp xếp các bằng RecordComparator........................................................... 93
Lọc record với RecordFilter........................................................................ 95
RecordListener ......................................................................................... 96
Kết nối mạng với Generic Connection Framework (GCF).............................97
5.2.1.
Giới thiệu GCF. ........................................................................................ 97
CHƯƠNG 6:
NHỮNG QUI TRÌNH VÀ RÀNG BUỘC ĐỂ MỘT ỨNG DỤNG
TRÊN JBUILDER CHẠY ĐƯỢC TRÊN MOBILE. ........................................... 117
6.1.
Tìm hiểu và trình bày qui trình kỹ thuật để xây dựng một ứng dụng mobile trên
Jbuilder. 117
6.1.1.
6.1.2.
6.1.3.
6.1.3.1.
6.1.3.2.
6.1.4.
Cài đặt Jbuilder....................................................................................... 117
Cài đặt SDK cho Nokia............................................................................ 121
Quá trình xây dựng 1 MIDlet. ................................................................... 127
Quá trình đầu tiên: Tạo mới một project................................................ 127
Quá trình thứ hai: Tạo một lớp MIDlet................................................... 131
Các bước để xây dựng các file.Jar và file.Jad: ............................................. 137
6.2.
Tìm hiểu và trình bày các yêu cầu ràng buộc để một ứng dụng mobile trên
Jbuilder có thể chạy trên mobile ..............................................................................141
6.2.1.
Những ràng buộc trên thiết bị di động. ....................................................... 141
6.2.1.1.
Ràng buộc về phần cứng. ..................................................................... 141
6.2.1.2.
Ràng buộc về phần mềm. ..................................................................... 142
6.2.2.
Những ràng buộc đối với ứng dụng............................................................ 142
CHƯƠNG 7:
GIỚI THIỆU ỨNG DỤNG DEMO. ...................................... 143
7.1.
Giới thiệu...............................................................................................143
7.2.
Xây dựng một MIDlet. ............................................................................143
7.3.
Mô tả chương trình. ................................................................................143
7.4.
Các chức năng của chương trình:..............................................................144
7.5.
Thực thi chương trình..............................................................................145
Để một chiếc điện thoại có thể chạy được ứng dụng MIDlet thì trước hết ta hãy xem
những yêu cầu ràng buộc để một ứng dụng java chạy được trên mobile (vấn đề này được
trình bài trong chương 6).........................................................................................145
CHƯƠNG 8:
KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN ................................ 150
8.1.
Kết quả..................................................................................................150
8.2.
Nhưng hạn chế: ......................................................................................150
Về quyển luận văn trình bày.................................... Error! Bookmark not defined.
Về chương trình..................................................... Error! Bookmark not defined.
8.3.
Hướng phát triển.....................................................................................150
-- Trang 3 --
Luận văn tốt nghiệp
CHƯƠNG 1: MỤC TIÊU VÀ NỘI DUNG ĐỀ TÀI.
Nội dung trình bày:
Mục tiêu và nội dung của đề tại.
1.1. Đặt vấn đề.
Với chiếc máy tính để bàn (máy PC) thì ngày này chúng ta đã làm được hầu hết
mọi việc từ đơn giản đến phức tạp. Nhưng mà máy PC chỉ làm việc cố định, do đó,
máy tính Laptop xuất hiện với tính năng nhỏ gọn có thể mang theo và làm việc hầu
như ở mọi nơi. Ngày nay các thiết bị di động đã trở nên rất phổ biến và được sử dụng
rất rộng rãi tại Việt Nam, đặc biệt là các loại điện thoại di động. Nhiều người đã coi
điện thoại di động như một vật không thể thiếu trong cuộc sống hằng ngày. Nắm bắt
được nhu cầu đó, các nhà sản xuất điện thoại đã đẩy mạnh về mặt công nghệ, tăng
cường mẫu mã, tích hợp các chức năng ngày càng nhiều vào các dòng sản phẩm mới,
hầu đem lại cho người dùng những tiện ích cao cấp nhất với các công nghệ tiên tiến
nhất. Giờ đây, người dùng điện thoại có thể nghe nhạc, xem phim, chụp hình chơi
game và thậm chí là xem TV, lướt web chỉ với chiếc điện thoại bé xíu ngay bên mình.
Chiếc điện thoại đã thực sự không chỉ là một phương tiên liên lạc, mà nó còn mang cả
thế giới giải trí, thế giới Mobile đến với từng người mọi lúc mọi nơi. Với công nghệ
phát triển không ngừng như hiện nay, việc đòi hỏi các ứng dụng tốt hơn cũng ngày
càng trở thành một yêu cầu đi đôi với sự phát triển của công nghệ. Một chiếc điện
thoại tốt luôn đòi hỏi những phần mềm cao cấp đi kèm với nó. Nhưng vấn đề lại đặt ra
là có quá nhiều nhà sản xuất điện thoại sử dụng nhiều công nghệ khác nhau. Vậy làm
sao chúng ta có thể tạo ra được những ứng dụng chạy trên tất cả các dòng sản phẩm
đó? Đây quả thật là một vấn đề không đơn giản chút nào. Một thực tế đặt ra cho các
nhà phát triển phần mềm là hiện nay không có một chuẩn hóa nào dành cho các nhà
sản xuất phần cứng. Các thiết bị trên thị trường hiện nay rất đa dạng và cũng mang
nhiều đặc điểm cũng như cấu hình khác nhau.
Trước thực tế đó, việc có thể chạy trên nhiều môi trường là một lợi thế rất lớn của
ngôn ngữ Java. Như chúng ta đã biết, ban đầu Java được xây dựng chỉ gồm một phiên
bản duy nhất, ngày nay được biết đến với tên J2SE (Java 2 Standard Edition) với
-- Trang 4 --
Luận văn tốt nghiệp
phương châm là “Write once, run anywhere” tạm dịch là “viết một lần, chạy trên mọi
môi trường”. Java được hình thành trên ý tưởng xây dựng một ngôn ngữ mà lập trình
viên chỉ cần viết một lần duy nhất nhưng ứng dụng có thể chạy trên bất cứ môi trường
nào có hổ trợ Java Virtual Machine tạm dịch là “máy ảo Java”. Các nhà phát triển Java
đã cho ra một ngôn J2ME hướng đến việc phát triển phần mềm cho các thiết bị di
động. Ngôn ngữ J2ME thực sự là ngôn ngữ nhỏ gọn, dễ nắm bắt, chặt chẽ và thích hợp
cho các thiết bị có khả năng hạn chế. Các thiết bị di động trên thị trường hiện nay, đặc
biệt là điện thoại di động hầu hết đều hỗ trợ rất tốt ngôn ngữ J2ME và J2ME thực sự
đã trở thành một trong những ngôn ngữ phổ biến nhất trong lĩnh vực lập trình di động.
J2ME được xem như là một nhánh của ngôn ngữ lập trình Java được phát triển nhằm
hướng tới việc lập trình cho các thiết bị nhỏ có bộ nhớ, khả năng hiển thị và xử lý hạn
chế.
1.2. Mục tiêu đặt ra cho đề tài
Tìm hiểu các ràng buộc về phần cứng của các chủng loại thiết bị di động hiện
nay.
Hiểu chi tiết về J2ME, các kiến trúc nên tảng của nó và những ứng dụng của nó
để lập trình trên các thiết bị di động.
Nắm được các kỹ thuật xử lý form, âm thanh, hình ảnh, và lưu trữ trên điện thoại
di động
Tìm hiểu qui trình kỹ thuật để xây dựng ứng dụng mobile trên Jbuilder.
Những ràng buộc để một ứng dụng viết trên Jbuilder có thể chạy trên mobile.
Ứng dụng các kết quả đạt được để xây dựng chương trình đơn giản, có các tiện
ích phục vụ nhu cầu của người sử dụng điện thoại di động.
Áp dụng thành công trên một số dòng máy điện thoại di động hỗ trợ Java của các
hãng như Nokia, SonyEricsson, Samsung,…
Những mục tiêu trên được đặt ra trên nhằm xây dựng một quyển luận văn tốt
hơn, đây đủ hơn. Và xa hơn nữa là, luận văn này đã trình bài đầy đủ những gì cần
thiết để cho mọi người có thể tự viết những ứng dụng riêng cho chiếc điện thoại
của mình.
-- Trang 5 --
Luận văn tốt nghiệp
1.3. Nội dung.
Với những mục tiêu trên thì quyển luận văn xin trình bày những nội dung sau:
Giới thiệu chung về ngôn ngữ J2ME: tầng configuration và profile.
Các vấn đề liên quan đến một bộ MIDlet.
Lập trình trên thiết bị di động sử dụng giao diện đồ họa cấp thấp và cấp cao.
Việc lưu trữ thông tin trên MIDlet xuống bảng ghi và truy xuất chúng khi cần
thiết.
Lập trình mạng.
Các bước cần thiết để xây dựng và thực thi một MIDlet.
Những ràng buộc để một ứng dụng viết trên Jbuilder chạy được trên Mobile.
Xây dựng ứng dụng game caro để demo.
-- Trang 6 --
Luận văn tốt nghiệp
CHƯƠNG 2:
TỔNG QUAN VỀ J2ME
Nội dung trình bày:
Trình bài những thành phần chính để cấu thành nên J2ME.
Máy ảo java.
Configuration và Profile.
Chức năng của các thành phần này.
2.1. CÁC THÀNH PHẦN CỦA J2ME.
Mục tiêu của J2ME là cho phép người lập trình viết các ứng dụng độc lập với thiết
bị di động, không cần quan tâm đến phần cứng thật sự. Để đạt được mục tiêu này,
J2ME được xây dựng bằng các tầng (layer) khác nhau để giấu đi việc thực hiện phần
cứng khỏi nhà phát triển. Sau đây là các tầng của J2ME được xây dựng (2).
Hình 1: Các thành phần của J2ME.
Java 2
Enterprise
Edition
(J2EE)
Java 2
Standard
Edition
(J2SE)
CDC
Java Virtual Machine
MIDP
Profile level
CLDC
Configuration level
KVM
Java 2 Micro Edition
Khái niệm điện thoại di động là tương đối rộng lớn. Chúng bao gồm những thiết bị
có kích thước vật lý khác nhau nhiều lần và cho dù cùng kích thước những thiết bị này
vẫn có khả năng xử lý cũng như thể hiện cũng khác nhau (những chiếc điện thoại hiển
thị 12,000 pixels cho đến những chiếc PDA 20000 pixels). Để đáp ứng được nhu cầu
khác nhau của những thiết bị này, bản thân ngôn ngữ J2ME cũng chia thành những
thành phần nhỏ hơn.
-- Trang 7 --
Luận văn tốt nghiệp
Hình 2: Cấu trúc của thiết bị MID.
MIDP
Applications
OEM-Specific
Applications
Native
Applications
OEM-Specific
Classes
Mobile Information
Device Profile (MIDP)
Connected Limited Device Configuration (CLDC)
Native Operating System
Mobile Information Device(MID)
Mỗi tầng ở trên tầng Mobile Information Device là tầng trừu tượng hơn cung cấp
cho lập trình viên nhiều giao diện lập trình ứng dụng (API-Application Program
Interface) thân thiện hơn.
2.1.1. Tầng phần cứng thiết bị (Device Hardware Layer)
Đây chính là thiết bị di động thật sự với cấu hình phần cứng của nó về bộ nhớ và
tốc độ xử lý. Dĩ nhiên thật ra nó không phải là một phần của J2ME nhưng nó là nơi
xuất phát. Các thiết bị di động khác nhau có thể có các bộ vi xử lý khác nhau với các
tập mã lệnh khác nhau. Mục tiêu của J2ME là cung cấp một chuẩn cho tất cả các loại
thiết bị di động khác nhau.
2.1.2. Tầng máy ảo Java (Java Virtual Machine Layer)
Khi mã nguồn Java được biên dịch nó được chuyển đổi thành mã bytecode. Mã
bytecode này sau đó được chuyển thành mã ngôn ngữ máy của thiết bị di động. Tầng
máy ảo Java bao gồm KVM (K Virtual Machine) là bộ biên dịch mã bytecode có
nhiệm vụ chuyển mã bytecode của chương trình Java thành ngôn ngữ máy để chạy
trên thiết bị di động, và đồng thời máy ảo Java sẽ chịu trách nhiệm việc cung cấp các
tính năng bảo mật, cấp phát, thu hồi bộ nhớ và quản lý việc điều phối các tiến trình.
Tầng này cung cấp một sự chuẩn hóa cho các thiết bị di động để ứng dụng J2ME sau
khi đã biên dịch có thể hoạt động trên bất kỳ thiết bị di động nào có J2ME KVM.
Chính những hạn chế về tại nguyên của các thiết bị di động đã đề ra nhu cầu về sự ra
đời của KVM.
Đây là những yêu cầu dành cho máy ảo KVM:
-- Trang 8 --
Luận văn tốt nghiệp
Máy ảo Java chỉ cần 40 – 80 KB bộ nhớ.
Chỉ cần 20 – 40 KB bộ nhớ động.
Có thể chạy với bộ vi xử lý 16 bit và xung nhịp 25 MHz.
Mã nguồn java phải trãi qua 2 giai đoạn như hình bên dưới.
Hình 3: Hai quá trình biên dịch và thông dịch của mã nguồn java.
.class
Bytecode
Interpreter
Compiler
.java
Source Code
KVM
(Kilobyte Virtual
Machine)
Các phiên bản của Java:
Java được giới thiệu lần đầu tiên vào những năm 1995, trong thời gian đầu thì
mục tiêu nhắm đến của Java là phát triển của GUIs, applets, và những ứng dụng
đặc trưng khác. Hai năm sau ngày ra mắt lần đầu tiên, một phiên bản mới là Java 2
Enterprise Edition (J2EE) cũng được giới thiệu nhắm đến việc phát triển các ứng
dụng có qui mô lớn hơn (có thể xem là các máy server). Đồng thời phiên bản này
cũng đưa ra nhưng công cụ cho việc truy xuất dữ liệu, truyền thông tin, điều khiển
việc thực thi.
Và phiên bản mới nhất được thêm vào dòng ngôn ngữ Java là Java 2 Micro
Edition (J2ME). J2ME nhắm đến việc phát triển ứng dụng cho các ứng dụng có
năng lực hạn chế như đầu giải mã kỹ thuật số TV set-top boxes, điện thoại di
động…
-- Trang 9 --
Luận văn tốt nghiệp
Hình 4: Các phiên bản khác nhau của java.
Chúng ta có thể thấy các phiên bản khác nhau của Java, phụ thuộc vào phần cứng
mà thiết bị hỗ trợ. Hình sẽ thể hiện 3 máy ảo được sử dụng trong những môi trường
khác nhau. Các Hotspot VM là mặc định máy ảo được cung cấp bởi Sun do thực hiện
đầy đủ quy mô phiên bản mới hơn JavaHotspot là một loại máy ảo có khả năng tự
động tối ưu hóa nặng nề thực hiện các đoạn mã (hotspots) trong thời gian thực.
Compact Virtual Machine (CVM) and Kilobyte Virtual Machine (KVM) là những
máy ảo nhỏ hơn dùng để hiện thực việc thiết kế để chạy trong những ràng buộc của
giới hạn về tài nguyên trên những thiết bị nhỏ.
2.1.3. Tầng cấu hình (Configuration Layer)
Tầng cấu hình của CLDC định nghĩa giao diện ngôn ngữ Java (Java language
interface) cơ bản để cho phép chương trình Java chạy trên thiết bị di động
Để đáp ứng nhu cầu cho nhiều chủng loại thiết bị khác nhau, Sun đã đưa ra khái
niệm Configuration. Khái niệm Configuration có mối liên hệ chặt chẽ với máy ảo
-- Trang 10 --
Luận văn tốt nghiệp
Java. Nói chính xác hơn, một Configuration qui định những thành phần và những thư
viện gốc của ngôn ngữ Java mà máy ảo phải hổ trợ cho configuration đó. Việc phân
chia thành những configuration khác nhau chủ yếu dựa vào khả năng bộ nhớ, năng lực
hiển thị, năng lực xử lý và khả năng kết nối mạng của các thiết bị. Như chúng ta đã
biết, các thiết bị di động rất khác nhau về nguồn tài nguyên, về khả năng phần cứng.
Với những thiết bị có năng lực hạn chế, nếu ta đưa nhiều thư viện hỗ trợ vào máy ảo
trên thiết bị đó sẽ gây chậm hệ thống và dư thừa không cần thiết. Với những thiết bị có
khả năng cao hơn, chúng ta sẽ đưa thêm nhiều thư viện hỗ trợ vào máy ảo giúp ích cho
công việc lập trình của các nhà phát triển. Do đó, nhu cầu phân chia thành nhiều
Configuration là việc cần thiết.
Hiện nay Sun đã đưa ra hai loại Configuration khác nhau:
CDC (Connected Divice Configuration):
512 KB (minimum) bộ nhớ để chạy Java.
256 KB (minimum) bộ nhớ cấp phát động.
Kết nối mạng liên tục, băng thông rộng.
CLDC (Connected Limited Device Configuration):
128 KB (minimum) bộ nhớ để chạy Java.
32 KB (minimum) bộ nhớ cấp phát động.
Giao diện người dùng hạn chế.
Năng lượng tiêu tốn ít (chủ yếu dùng pin).
Kết nối mạng Wireless và chậm.
Việc phân chia này cũng mang tính chất tương đối, công nghệ hiện nay đang phát
triển khá nhanh, và việc phát triển này càng làm cho ranh giới giữa các loại
configuration này trở nên không rõ ràng.
Cả 2 dạng Cấu hình kể 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ột môi trường cho các ứng dụng J2ME.
Tuy nhiên, bạn chú ý rằng đố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 của J2SE, ví dụ, các thiết bị thuộc CLDC không có phần cứng yêu cầu các
phép tính toán dấu phẩy động, nên máy ảo thuộc CLDC không được yêu cầu hỗ trợ
kiểu float và double.
-- Trang 11 --
Luận văn tốt nghiệp
2.1.4. Tầng hiện trạng (Profile Layer)
Tầng hiện trạng hay MIDP (Hiện trạng thiết bị thông tin di động-Mobile
Information Device Profile) cung cấp tập các API hữu dụng hơn cho lập trình viên.
Mục đích của hiện trạng là xây dựng trên lớp cấu hình và cung cấp nhiều thư viện ứng
dụng hơn. MIDP định nghĩa các API riêng biệt cho thiết bị di động. Cũng có thể có
các hiện trạng và các API khác ngoài MIDP được dùng cho ứng dụng. Ví dụ, có thể có
hiện trạng PDA định nghĩa các lớp và phương thức hữu dụng cho việc tạo các ứng
dụng PDA (lịch, sổ hẹn, sổ địa chỉ,…). Cũng có thể có một hiện trạng định nghĩa các
API cho việc tạo các ứng dụng Bluetooth. Thực tế, các hiện trạng kể trên và tập các
API đang được xây dựng. Chuẩn hiện trạng PDA là đặc tả JSR - 75 và chuẩn bluetooth
API là đặc tả JSR - 82 với JSR là viết tắt của Java Specification Request.
2.1.5. Một số hạn chế của J2ME so với các phiên bản khác(chủ yếu nằm ở tầng
Configuration này):
Không hỗ trợ kiểu dữ liệu float: Việc sử lý số float đòi hỏi nhiều tài nguyên xử
lý, ngoài ra các thiết bị di động không có những cấu hình phần cứng dành riêng
cho việc xử lý số float nên trong J2ME chúng ta không thể khai báo các biến,
mảng float, các hàm cũng không nhận tham số và trả các số float.
Phương thức finalize: Trong J2SE, chúng ta có thể khai báo phương thức finalize
(tương tự như phương thức destructor). Garbage Collector sẽ gọi phương thức
này trước khi hủy bỏ một đối tưởng, phương thức này thường được dùng để thu
hồi các tài nguyên hệ thống như sockets, file handle,….trước khi đối tượng bị
“phá hủy”. Tuy nhiên trong J2ME ,để cải tiến việc thực thi và giảm toàn bộ các
yêu cầu, CLDL loại bỏ hẳn đối tượng finalize, điều này có nghĩa là không có
phương thức Object.finalize.
Error Handling: Trong J2ME chúng ta vẫn được hỗ trợ các công cụ về bẫy lỗi
(chủ yếu thông qua try và catch). Cũng do nguyên nhân hạn chế tài nguyên, khả
năng về xử lý lỗi của J2ME cũng hạn chế hơn với hai phiên bản còn lại, CLDC
không hỗ trợ bất kỳ java.lang.Error nào.
Không hỗ trợ việc sử dụng code của các ngôn ngữ lập trình khác.
Không hỗ trợ Reflection: Trong J2ME và J2ME, chúng ta có thể dùng các lớp
Reflection để tìm hiểu thông số môi trường máy ảo Java đang thực thi.
-- Trang 12 --
Luận văn tốt nghiệp
Không hỗ trợ ThreadGroup: mỗi thread được lý riêng biệt, không còn lớp
ThreadGroup. Nếu muốn điều khiển một lúc nhiều threads chúng ta có thể dùng
mảng hoặc Vector.
J2ME cũng còn một số điểm khác biệt so với J2ME và J2EE, một trong những
khác biệt chính là quá trình Class Verify (tạm dịch là “kiểm tra lớp”). Các lớp
trước khi được load sẽ thông qua một quá trình “kiểm tra” về sự hợp lệ và tính
nguyên vẹn. Đây là một cơ chế quan trọng để bảo đảm an toàn (security) của
Java. Quá trình này trong J2SE và J2EE có thể chiếm đến 50 kb bộ nhớ, trong
J2ME chúng được chia thành 2 giai đoạn:
Tiền kiểm tra (pre-verification): Trước khi một lớp được nạp vào thiết bị,
một phần mềm sẽ được sử dụng để thêm vào một số thông số bổ sung vào
file class. Quá trình này giảm thời gian và bộ nhớ cần thiết để máy ảo thức
hiện giai đoạn 2 trong quá trình kiểm tra. File class sau khi được “tiền kiểm
tra” sẽ tăng dung lượng khoảng 5%.
Kiểm tra nội thiết bị (In-device verification): Khi thiết bị nạp các file class
đã được kiểm tra, công cụ kiểm tra trong thiết bị sẽ thực hiện một vài kiểm
tra để xác nhận tính hợp lệ của đoạn code. Nếu phát hiện một lỗi nào đó bộ
kiểm tra sẽ phát sinh báo cáo và từ chối nạp lớp đối tượng vào bộ nhớ. Quá
trình này đòi hỏi ít bộ nhớ và tài nguyên hơn nhiều lần so với trong J2SE và
J2EE.
2.2. CHỨC NĂNG CÁC THÀNH PHẦN
2.2.1. Máy ảo Java (Kilobyte Virtual Machine - KVM)
Vai trò của máy ảo Java hay KVM là dịch mã bytecode được sinh ra từ chương
trình Java đã biên dịch sang ngôn ngữ máy. Chính KVM sẽ chuẩn hóa output của
các chương trình Java cho các thiết bị di động khác nhau có thể có bộ vi xử lý và tập
lệnh khác nhau. Không có KVM, các chương trình Java phải được biên dịch thành
tập lệnh cho mỗi thiết bị di động. Như vậy lập trình viên phải xây dựng nhiều đích
cho mỗi loại thiết bị di động. Hình dưới đây biểu diễn tiến trình xây dựng ứng dụng
MIDlet hoàn chỉnh và vai trò của KVM.
-- Trang 13 --
Luận văn tốt nghiệp
Hình 5: Tiến trình xây dựng một MIDlet.
Trạm phát triển
Tập tin .JAR
Tập tin nguồn java
*.java
Tập tin nguồn java
*.java
Tập tin lớp java
*.class
Bộ biên dịch
và bộ tiền
kiểm tra java
Tập tin lớp java
*.class
Thiết bị đích
Bộ biên
dịch mã
bytecode
KVM
Xây dựng ứng dụng trên IDE (Intergrated Development Environment - Môi trường
phát triển tích hợp)
Đây là những công việc của lập trình viên trên:
Tạo các tập tin nguồn Java:
Bước đầu tiên là lập trình viên phải tạo mã nguồn Java, có thể có nhiều tập
tin (*.java) (vấn đề này được trình bày trong chương 6).
Biên dịch trên IDE:
Bộ biên dịch Java (Java Compiler): Biên dịch mã nguồn thành mã bytecode
Bộ biên dịch Java sẽ biên dịch mã nguồn thành mã bytecode. Mã bytecode
này sẽ được KVM dịch thành mã máy. Mã bytecode đã biên dịch sẽ được
lưu trong các tập tin *.class và một tập tin *.class sinh ra cho mỗi lớp Java.
Bộ tiền kiểm tra (Preverifier): Kiểm tra tính hợp lệ của mã bytecode
Một trong những yêu cầu an toàn của J2ME là bảo đảm mã bytecode chuyển
cho KVM là hợp lệ và không truy xuất các lớp hay bộ nhớ ngoài giới hạn
của chúng. Do đó tất cả các lớp đều phải được tiền kiểm tra trước khi chúng
có thể được download về thiết bị di động. Việc tiền kiểm tra được xem là
một phần của môi trường phát triển làm cho KVM có thể được thu nhỏ hơn.
-- Trang 14 --
Luận văn tốt nghiệp
Bộ tiền kiểm tra sẽ gán nhãn lớp bằng một thuộc tính (attribute) đặc biệt chỉ
rằng lớp đó đã được tiền kiểm tra. Thuộc tính này tăng thêm khoảng 5%
kích thước của lớp và sẽ được kiểm tra bởi bộ kiểm tra trên thiết bị di động.
Lưu ý: Nếu không có quá trình tiền kiểm tra này thì thiết bị di động sẽ từ chối ứng
dụng.
Tạo tập tin JAR.
IDE sẽ tạo một tập tin JAR chứa:
Tất cả các tập tin *.class
Các hình ảnh của ứng dụng. Hiện tại chỉ hỗ trợ tập tin *.png
Các tập tin dữ liệu có thể được yêu cầu bởi ứng dụng
Một tập tin kê khai (manifest.mf) cung cấp mô tả về ứng dụng cho bộ quản
lý ứng dụng (application manager) trên thiết bị di động.
Sau khi đã gỡ rối và kiểm tra mã lệnh trên trình giả lập (simulator), mã lệnh
đã sẵn sàng được kiểm tra trên điện thoại di động và sau đó được phân phối
cho người dùng (download ứng dụng (tập tin *.jar) về thiết bị di động – xem
phần phụ lục).
Trên thiết bị di động.
Bộ tiền kiểm tra: Bộ tiền kiểm tra kiểm tra tất cả các lớp đều có một thuộc tính
hợp lệ đã được thêm vào bởi bộ tiền kiểm tra trên trạm phát triển ứng dụng.
Nếu tiến trình tiền kiểm tra thất bại thì ứng dụng sẽ không được download về
thiết bị di động.
Bộ quản lý ứng dụng: Bộ quản lý ứng dụng trên thiết bị di động sẽ lưu trữ
chương trình trên thiết bị di động. Bộ quản lý ứng dụng cũng điều khiển trạng
thái của ứng dụng trong thời gian thực thi và có thể tạm dừng ứng dụng khi có
cuộc gọi hoặc tin nhắn đến.
Người dùng thực thi ứng dụng, bộ quản lý ứng dụng sẽ chuyển ứng dụng cho
KVM để chạy trên thiết bị di động.
KVM sẽ dịch mã bytecode sang ngôn ngữ máy của thiết bị di động để chạy.
2.2.2. CLDC
CLDC - cấu hình thiết bị kết nối giới hạn đây là tầng nằm kế trên tầng KVM,
đây là một tập các API định nghĩa lõi của ngôn ngữ J2ME. Mục đích của tầng
-- Trang 15 --
Luận văn tốt nghiệp
này là cung cấp một tập tối thiểu các thư viện (các lớp và các phương thức ) cho
phép một ứng dụng Java chạy trên thiết bị di động. Tập các API hữu dụng và
chuyên biệt hơn được chứa trong tầng hiện trạng - profile layer, nhưng chính
tầng
CLDC
này
cung
cấp
cơ
sở
cho
tầng
hiện
trạng.
Các CLDC API được định nghĩa với sự hợp tác với 18 công ty là bộ phận của
JCP (Java Community Process). Nhóm này giúp bảo đảm rằng các API được
định nghĩa sẽ hữu dụng và thiết thực cho cả nhà phát triển lẫn nhà sản xuất thiết
bị di động.
Hình 6: Tổng quan về CLDC.
J2SE
CLDC
CDC
CDC
CLDC
J2SE
CDC # O
J2SE
CLDC # O
2.2.2.1. Yêu cầu phần cứng dành cho CLDC:
Khi đề ra yêu về phần cứng việc xem xét các chi tiết như bộ xử lý, bộ
nhớ… và các thành phần mềm hiện có trên các thiết bị di động là việc vô
cùng quan trọng. Nhằm mục đích phục vụ tối đa các thiết bị hiện có trên thị
trường, CLDC chỉ đề ra các yêu cầu về bộ nhớ và không đề ra yêu cầu nào
cho các thành phần khác. Yêu cầu tối thiểu để có thể sử dụng CLDC như sau:
128 kilobytes để chạy JVM và các thư viện của CDLC. Không phân biệt
loại bộ nhớ sử dụng (Rom, Flash,…..), bộ nhớ của thiết bị phải bảo lưu
được nội dung lâu dài, ngay cả khi ngắt điện. Bộ nhớ này thường được
gọi là nonvolatile memory.
32 kilobytes bộ nhớ trống để cấp phát các đối tượng (objects). Bộ nhớ này
thường được gọi là volatile memory (hay còn được gọi là heap).
-- Trang 16 --
Luận văn tốt nghiệp
2.2.2.2. Yêu cầu phần mềm dành cho CLDC:
CLDC có yêu cầu tối thiểu về mặt phần mềm. Hệ điều hành phải tương
thích với JVM và có chức năng quản lý các ứng dụng Java như:
Cho phép chọn và kích hoạt ứng dụng.
Cho phép gỡ bỏ ứng dụng khỏi thiết bị.
2.2.2.3. Sự khác biệt giữa CLDC 1.0 và CLDC 1.1
Các đặc tả của JCP được gán các số JSR (Java Specification Request). Quy
định CLDC phiên bản 1.0 được gán số JSR – 30 và phiên bản 1.1 được gán
số JSR – 139. Dưới đây là sự khác biệt chính của 2 phiên bản:
Kiểu số thực được hỗ trợ, 2 class Float và Double được đưa thêm vào
trong CDLC 1.1 và đồng thời cũng kèm theo những phương thức hỗ trợ
cho 2 class này.
Thiết kế lại những class Calendar/Date/TimeZone so với J2SE.
Những thread hiện tại đã có phương thức Thread.getName() và chúng ta
có thể ngắt chúng bởi phương thức Thread.interrup()(2).
Việc bắt lỗi đã trở nên dễ hiểu hơn, có đưa thêm vào một lớp mới đó là
NoClassDefFoundError.
Nhiều thay đổi trên các thư viện không quan trọng, như là thêm các
trường và các phương thức như:
o Boolean.TRUE and Boolean.FALSE
o String.intern()
o Date.toString()
o Random.nextInt(int n)
Vùng nhớ nhỏ nhất được nâng lên từ 160 – 192 kilobyte, chủ yếu là do
thêm vào kiểu số thực.(4)
2.2.2.4. Danh sách các lớp mà CLDC cung cấp.
Bên dưới đây là các lớp nằm trong CLDC:
Lớp hệ thống.
java.lang.Object
java.lang.Class
java.lang.Runtime
-- Trang 17 --
Luận văn tốt nghiệp
java.lang.System
java.lang.Thread
java.lang.Runnable
java.lang.String
java.lang.StringBuffer
java.lang.Throwable
Lớp nhập xuất.
java.io.InputStream
java.io.OutputStream
java.io.ByteArrayInputStream
java.io.ByteArrayOutputStream
java.io.DataInput (interface)
java.io.DataOutput (interface)
java.io.DataInputStream
java.io.DataOutputStream
java.io.Reader
java.io.Writer
java.io.InputStreamReader
java.io.OutputStreamWriter
java.io.PrintStream
Lớp tập hợp.
java.util.Vector
java.util.Stack
java.util.Hashtable
java.util.Enumeration (interface)
Lớp kiểu dữ liệu.
java.lang.Boolean
java.lang.Byte
java.lang.Short
java.lang.Integer
java.lang.Long
-- Trang 18 --
- Xem thêm -