Đăng ký Đăng nhập
Trang chủ Lập trình ứng dụng mobile bằng java...

Tài liệu Lập trình ứng dụng mobile bằng java

.PDF
156
821
98

Mô tả:

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 -

Tài liệu liên quan