• Hiện tại trang web đang trong quá hình chuyển đổi và tái cấu trúc lại chuyên mục nên có thể một vài chức năng chưa hoàn thiện, một số bài viết và chuyên mục sẽ thay đổi. Nếu sự thay đổi này làm bạn phiền lòng, mong bạn thông cảm. Chúng tôi luôn hoan nghênh mọi ý kiến đóng góp để chúng tôi hoàn thiện và phát triển. Cảm ơn

Dành cho những ai quan tâm đến HDH Symbian

BatKid

Super V.I.P
Đây là bài viết BatKid st được, bk không nhớ tác giả là ai, nhưng thấy rất hay, giúp anh em nào quan tâm đến Symbian nên xin mạo muội post lên cho anh em xem.

Hệ điều hành Symbian và các nền hệ thống dùng Symbian

Symbian bắt nguồn từ EPOC (Electronic Pocket Communication), một hệ điều hành được phát triển cho các máy tính và thiết bị liên lạc bỏ túi của Psion có bộ xử lý yếu và bộ nhớ nhỏ. Đó là lý do mà đôi khi chúng ta thấy sự xuất hiện của EPOC trong Symbian như thư mục chính trong bộ cung cụ lập trình có tên là Epoc32.
Symbian được phát triển để tạo ra một hệ điều hành mạnh mẽ cho thế hệ thiết bị lai giữa PDA và mobile phone mà người ta gọi là WID (Wireless Ìnformation Device). Tùy theo tỷ lệ kết hợp giữa PDA và mobile mà người ta chia các thiết bị dùng Symbian thành 2 nhóm: Smartphone (thiên về mobile phone) và Communicator (thiên về PDA). Điểm độc đáo của Symbian là cung cấp một hệ điều hành hỗ trợ cho nhiều dòng thiết bị khác nhau vừa đáp ứng được sự sáng tạo riêng của các nhà sản xuất vừa phục vụ được nhiều mục đích sử dụng khác nhau của người dùng: như mô hình Smartphone (Pearl) có kiểu dáng giống điện thoại di động thường với bản phím số phục vụ cho những khách hàng vốn trung thành với mobile phone truyền thống, mô hình Communicator Quartz theo kiểu dáng của PDA phục vụ cho khả năng tìm kiếm qua màn hình cảm ứng hay mô hình Communicator Crystal có dáng dấp một laptop phù hợp cho các chức năng nhập liệu.
Sự kết hợp của hệ điều hành Symbian và những đặc điểm riêng phục vụ cho các dòng thiết bị đã tạo ra nhiều nền hệ thống khác nhau như chúng ta đã biết: Series 60, series 80, series 90 và UIQ.
- Series 60: (theo mô hình Smartphone Pearl): kích thước màn hình 176x208 pixel bao gồm: Nokia 7650 , 3650/3600, 3660/3620, N-Gage, N-Gage QD, 6600, 7610, 6260, 6630, 6670, 3230 hay Panasonic X700, Samsung SGH-D710, Siemens SX1, Sendo X,...
- UIQ: (theo mô hình Communicator Quartz) có kích thước màn hình 208x320 pixel bao gồm: Sony Ericsson P800, P900, P910, BenQ P30, P31, Motorola A920, A925, A1000, Arima ASP805...
- Series 80: (theo mô hình Communicator Crystal) có kích thước màn hình 480x320 pixel bao gồm: Nokia 9210, 9210i, 9300, 9500.
- Series 90: đây là thế hệ lai giữa UIQ và Series 80 mà người ta gọi là media phone với sản phẩm duy nhất hiện tại là Khôngkia 7710 (cải tiến từ sản phẩm trước đó là Khôngkia 7700).
- Ngoài ra Symbian còn là hệ điều hành cho các dòng máy của mạng điện thoại NTT Docomo ở Nhật với các dòng máy Fujitsu như FOMA F900i, FOMA F2102V, FOMA F2051 (chỉ hỗ trợ Java).
Các nền hệ thống này có sự khác biệt nên hầu hết các ứng dụng có giao diện đều không thể chạy được trên cùng 2 dòng máy. Tuy nhiên với những chương trình cấp thấp như các server (chương trình file exe) thì điều này là hoàn toàn có thể. Không những vậy giữa những nhà sản xuất cũng tạo sự khác biệt riêng nên đôi khi ứng dụng sẽ gặp trục trặc khi chạy trên các loại máy khác nhau dùng chung nền hệ thống. Một đặc điểm nữa là các máy cùng nền hệ thống nhưng dùng phiên bản hệ điều hành khác nhau cũng sẽ có sự khác nhau. Đây là những điều và những lập trình viên chúng ta nên lưu ý để biết ứng dụng của mình có thể hoạt động tốt trên những thiết bị nào
 

BatKid

Super V.I.P
Mở đầu trước khi lập trình Software cho Handheld, ngôn ngữ sử dụng là C++.

1. SDK (Software Development Kit):

Symbian SDK là bộ công cụ phát triển được dùng cho việc phát triển ứng dụng chạy trên điện thoại Symbian. Mỗi một nền hệ thống sẽ có bộ SDK riêng với nhiều phiên bản theo các phiên bản hệ điều hành và các IDE hỗ trợ. Mỗi một bộ Symbian SDK bao gồm các thành phần sau:
- Một chương trình giả lập Emulator của điện thoại Symbian mà bộ SDK hỗ trợ chạy trên hệ điều hành Windows. Các chương trình ứng dụng sẽ được kiểm lỗi và chạy thử trước khi được cài đặt trên điện thoại Symbian. Chương trình Emulator và các phần liên quan được lưu trữ trong thư mục con Epoc32 trong cây thư mục của bộ SDK sau khi cài đặt trên máy tính cá nhân.
- Các file header và thư viện phục vụ cho phát triển ứng dụng chứa trong thư mục con Epoc32\include.
- Một trình biên dịch dựa trên GCC để biên dịch ứng dụng cho điện thoại Symbian chứa trong thư mục con Epoc32\gcc.
- Các công cụ bổ sung dùng cho quá trình phát triển, biên dịch và triển khai ứng dụng nằm trong thư mục Epoc32\tool.
- Tài liệu tham khảo và các ví dụ tham khảo cho các lập trình viên nằm trong thư mục con Documentation và Example.
-Các phiên bản SDK hỗ trợ Metrowerks CodeWarrior sau khi cài đặt sẽ tạo một thư mục con Epoc32\WINSCW trong khi các phiên bản hỗ trợ IDE của Microsoft hay Borland sẽ tạo thư mục Epoc32\WINS. Đây là 2 thư mục chứa dữ liệu hay thông tin cấu hình cho Emulator. Trong thư mục này sẽ có các thư mục trung tên với ổ đĩa trên điện thoại (c,d) nên những file dữ liệu mà ta dự định để trên điện thoại thật thì khi chạy trên Emulator sẽ đặt trong các thư mục này.
Ghi chú: - Các công cụ biên dịch thường phải chạy trên nền Perl nên trước khi cài đặt các bộ Symbian SDK, phải cài đặt các bản Active Perl. Đôi khi các phiên bản còn yêu cầu phải cài đặt môi trường thực thi Java.
- Các bộ SDK chỉ hoạt động trên các hệ điều hành Windows NT, 2000 trở về sau.
- Các lập trình viên thường phát triển ứng dụng cho nhiều nền hệ thống phần mềm nên đôi khi họ cài đặt nhiều bộ SDK khác nhau cùng lúc. Lúc này, các lập trình viên phải chú ý đến một biến môi trường có tên là EPOCROOT, được dùng để xác định bộ công cụ SDK hiện thời đang hoạt động. Để chuyển đổi hoạt động giữa các bộ SDK, ta có thể đặt lại giá trị cho biến EPOCROOT bằng câu lệnh: >devices -setdefault <nền hệ thống>.
Ví dụ: >devices -setdefault @UIQ_21:com.symbian.UIQ hoặc bằng các đặt lại giá trị trong file devices.xml nằm trong thư mục: \Program Files\Common Files\Symbian.
a. Series 60
• Series 60 phiên bản 1.0: bộ công cụ phát triển dựa trên hệ điều hành Symbian 6.1 với các bản phân phối cho các môi trường phát triển IDE khác nhau: (cho các máy 7650, 3650/3660, NGage)
+ Series 60 SDK 1.2 hỗ trợ IDE Borland C++ BuilderX hay Microsoft Visual C++ (v6.0 hoặc .NET).
+ Series 60 SDK 1.2 hỗ trợ IDE Metrowerks CodeWarrior cho hệ điều hành Symbian.
• Series 60 phiên bản 2.0: bộ công cụ phát triển dựa trên hệ điều hành Symbian 7.0 với các biến thể :
+ Series 60 SDK 2.0 hỗ trợ IDE Borland C++ BuilderX hay Microsoft Visual C++ (v6.0 hoặc .NET).
+ Series 60 SDK 2.0 hỗ trợ IDE Metrowerks CodeWarrior cho hệ điều hành Symbian
Hiện có một số phiên bản mới bổ sung một số API cho các dòng máy sau hay sửa lỗi. Chi tiết các bạn có thể xem tại đây: http://www.Forum.nokia.com/main/0,,034-4,00.html hoặc http://www.newlc.com/article.php3?id_article=65
b. UIQ
Hiện có 2 phiên bản có thể download là UIQ 2.0 và 2.1 đều hỗ trợ phát triển bằng C++, nhưng UIQ 2.1 hỗ trợ nhiều API hơn. Các IDE hỗ trợ là Metrowerks CodeWarrior: hỗ trợ cả UIQ 2.0 và UIQ 2.1 và Borland C++BuilderX chỉ hỗ trợ cho UIQ 2.1. Chi tiết download: http://www.newlc.com/article.php3?id_article=67.
c. Nokia 9200 Series và Series 80:
SDK Khôngkia 9200 Series được dùng để phát triển ứng dụng cho các dòng máy Nokia 9210 và 9210i. Để phát triển ứng dụng với 9200 Series SDK bằng C++, chúng ta có thể sử dụng các IDE như MS Visual C++ 6.0 bằng công cụ tạo dự án Symbian OS Wizard hay sử dụng IDE Borland C++ BuilderX. Hiện tại hình như SDK Nokia 9200 Series đã bỏ và dùng ta có thể dùng SDK hỗ trợ Series 80 để phát triển.
Series 80: Phiên bản hiện tại được cung cấp là 2.0. Hỗ trợ 2 phiên bản cho Metrowerks CodeWarrior và Borland C++ BuilderX.
Download: http://www.Forum.nokia.com/main/0,,034-369,00.html
d. Series 90
Phiên bản mới này được gọi là Nokia 7710 SDK dùng để phát triển ứng dụng cho điện thoại duy nhất Series 90 hiện tại: N7710. Xây dựng ứng dụng với các IDE như MS Visual C++ 6.0, Borland C++ BuilderX hay Metrowerks CodeWarrior. Download: http://www.Forum.Khôngkia.com/main/0,6566,034-801,00.html

2. IDE:
Như hầu hết mọi ngôn ngữ cấp cao khác đều có IDE để phục vụ cho công việc lập trình và biên dịch, kiểm lỗi. Phát triển ứng dụng trên Symbian bằng C++ có thể sử dụng nhiều IDE khác nhau nhưng không phải IDE nào cũng có thể sử dụng cho mọi SDK mà Symbian cung cấp. Hiện thời chúng ta có thể sử dụng các IDE sau: MS Visual C++ 6.0 hay .NET, Borland C++ Builer 6.0 Nokia Edition/C++BuilderX và Metrowerks CodeWarrior. Việc chọn lựa IDE phụ thuộc vào sự hỗ trợ các SDK của nó và sự quen thuộc của những lập trình viên.
a. MS Visual C++ 6.0
Đây là IDE phổ dụng cho phát triển ứng dụng viết bằng C++ do Microsoft phát triển trong bộ Visual Studio. Tuy nó ra đời trước Symbian nên không hỗ trợ xây dựng dự án ứng dụng Symbian từ đầu nhưng với các công cụ phụ trợ, ta hoàn toàn có thể phát triển ứng dụng Symbian trên VC++ 6.0. Một điểm lưu ý là VC++ 6.0 phải được cài bản vá lỗi ít nhất là SP3.
Ngoài ra chúng ta có thể MS Studio .NET để phát triển cho Symbian và dùng kèm theo plugin sau: EPOCfromMMP, download tại: http://www.newlc.com/article.php3?id_article=243.
b. Borland C++ Builder 6.0 Khôngkia Edition và C++ BuilderX
Hai IDE này do Borland phát triển. C++ BuilderX là phiên bản phát triển của Borland C++ Builder 6.0 Nokia Edittion và hiện được dùng để phát triển ứng dụng Symbian hơn là Borland C++ Builder 6.0 Khôngkia Edition. C++ BuilerX được sử dụng để phát triển các ứng dụng chạy trên nền hệ thống Series 60 là chủ yếu. Tuy vậy C++ BuilderX vẫn có hỗ trợ UIQ 2.1.
Hiện phiên bản Borland C++ Builder X 1.5 là một phiên bản miễn phí: download tại http://www.borland.com/cbuilderx/
c. Metrowerks CodeWarrior
Metrowerks CodeWarrior là IDE được biết đến nhiều nhất cho việc phát triển ứng dụng Symbian. Mặc dù nó mới chỉ được sử dụng từ năm 2003 (trước đó chủ yếu sử dụng các công cụ của Microsoft là IDE VC++ 6.0) nhưng nay nó đã được sử dụng rộng rãi trong cộng đồng phát triển Symbian.
IDE này có 3 bản phân phối khác nhau:
• Personal Edition:
- IDE đầy đủ.
- Công cụ biên dịch cho giả lập Emulator và điện thoại.
- Kiểm lỗi (debugger) trên Emulator.
• Professional Edition:
- Tất cả các đặc tính của Personal.
- Debug trên điện thoại Symbian (không hỗ trợ cho dòng Series 60).
- Hỗ trợ Symbian DevKits (mã cung cấp cho các nhóm thành viên) và tham khảo phần cứng.
• OEM Edition:
- Tất cả các đặc tính của Professional
- JTAG và Multi-ICE debugging.
- Giải lập Virtio VXPS (Intel XScale) và VPOM (TI OMP).
Thường các lập trình viên chỉ cần sử dụng phiên bản Personal hoặc Professional. Các phiên bản này có thể cài đặt trên Windows NT4 hay từ Windows 2000 trở lên.
CodeWarrior hỗ trợ các bộ SDK sử dụng hệ điều hành từ phiên bản 6.1 trở về sau, nghĩa là chúng ta không thể dùng nó để phát triển ứng dụng với bộ công cụ Khôngkia 9200 Series SDK. Với các bộ công cụ khác, thường có bản phân phối hỗ trợ riêng cho CodeWarrior như Series 60 SDK 1.2 (hay 2.0) hỗ trợ IDE Metrowerks CodeWarrior, UIQ 2.0 (chỉ sử dụng được với CodeWarrior), UIQ 2.1 hỗ trợ IDE Metrowerks CodeWarrior, Series 80 và Series 90 đểu hỗ trợ IDE Metrowerks CodeWarrior. Chúng ta phải chọn đúng bản phân phối để không bị lỗi trong quá trình biên dịch.
Hiện CodeWarrior đã có bản 3.0, đây là link down bản 2.8: http://www.Forum.Nokia.com/main/0,6566,034-723,00.html
3. Một số tool hỗ trợ:
Ngoài các tool do SDK hỗ trợ, chúng ta có thể sử dụng 1 số tool sau để phục vụ cho công việc lập trình của mình. Download tại:
http://www.symbian.com/developer/downloads/tools.html.
 

BatKid

Super V.I.P
Application chạy trên nền tảng Symbian

Giống như lập trình trên MS-DOS, Windows, UNIX/LINUX hay bất kỳ nền tảng nào khác. Tìm hiểu cách thức tổ chức bộ nhớ, môi trường, cấu trúc của đơn thể thực thi là tối quan trọng. Symbian cũng thế, sau đây chúng ta sẽ tìm hiểu về cách thức thực thi của một ứng dụng trên hệ điều hành nhỏ gọn naỳ. Một điêu cần chú ý là hệ điều hành Symbian là một OS 32bit.

1. File thực thi
Là một OS nhỏ gọn chạy trên phần cứng không lấy gì là mạnh. Symbian hỗ trợ cho hai hệ thống file thực thi (mỗi hệ thống có thể có vài loaị file thực thi) sau đây:
• Chương trình .exe: được lưu trữ trong các file thực thi có phần mở rộng là exe. Đây là chương trình với một đầu vào chính từ hàm E32Main() (khác với Windows là WinMain()). Khi hệ thống nạp một chương trình .exe mới, đầu tiên nó tạo một tiến trình mới (cũng bao gồm nhiều tiểu trình hoặc chỉ 1 tiểu trình). Trong tiểu trình chính của tiến trình này, điểm vào sẽ được gọi để thực thi chương trình đó. Thông thường đây là các server hay các ứng dụng console.
• Thư viện liên kết động (Dynamic link library-DLL): một thư viện chứa các mã chương trình với nhiều điểm đầu vào. Hệ thống sẽ nạp một DLL vào trong ngữ cảnh hoạt động của tiểu trình. Có 2 loại DLL quan trọng:
- Shared DLL: cung cấp một nhóm API nhất định cho một hay nhiều chương trình sử dụng. Hầu hết các thư viện này nằm trong các file có phần mở rộng là .dll. Một chương trình thực thi sẽ được nối với thư viện dùng chung mà nó yêu cầu và khi hệ thống nạp chương trình thực thi, thư viện dùng chung cần cho chương trình này sẽ được nạp tự động.
- Polymorphic DLL: cung cấp một nhóm hàm API được lưu trữ trong các file có phần mở rộng khác nhau phục vụ cho các chức năng riêng như điều khiển máy in (.prn), giao thức socket (.prt), hay đó là một ứng dụng đồ họa GUI (.app). Trong hệ điều hành Symbian, polymorphic DLL thường chỉ có một điểm vào, nó khai báo và khởi tạo một lớp dẫn xuất từ các lớp cơ sở trong DLL này. Thư viện DLL loại này được nạp bởi chương trình sử dụng nó.
Hệ điều hành Symbian quản lý chương trình .exe và DLL khác nhau: chương trình .exe là không thể chia sẻ trong khi DLL thì hoàn toàn có thể.
2. Nạp chương trình khi thực thi
Các file thực thi chứa 3 loại dữ liệu nhị phân: mã chỉ thị, dữ liệu chỉ đọc (hằng) và dữ liệu động (thay đổi được).
• Chương trình .exe: Khi chương trình .exe được nạp vào RAM từ file .exe được lưu trên RAM (đĩa C) hoặc từ thẻ nhớ (đĩa D), thì nó được cấp một vùng nhớ riêng cho mã, dữ liệu chỉ đọc, dữ liệu động. Nếu một phiên bản thứ 2 của chương trình được nạp vào RAM thì một vùng nhớ mới sẽ được cấp cho nó. Với file chương trình .exe chứa trong ROM (ổ đĩa Z) thì chỉ có dữ liệu động được nạp vào RAM, mã chỉ thị và dữ liệu chỉ đọc được đọc trực tiếp từ ROM.
• Thư viện DLL: Khi một thư viện DLL lần đầu tiên được nạp vào RAM, nó được cấp một vùng nhớ riêng, khi được yêu cầu sử dụng lần thứ hai, nó không nạp tiếp DLL này vào RAM mà đơn giản chỉ gắn địa chỉ nó trên RAM cho tiểu trình yêu cầu. Hệ điều hành Symbian kiểm tra số lượng tiểu trình tham khảo DLL này và giải phóng nó khi không còn tiểu trình nào sử dụng nó nữa. (Đó là lý do mà các ứng dụng đồ họa Symbian, là một loại polymorphic DLL, không hề có chức năng exit, nhất là các ứng dụng hệ thống vì việc thoát nó sẽ do hệ thống đảm trách khi thiếu RAM cho các ứng dụng khác) Với các DLL chứa trên ROM thì nó không cần nạp vào RAM nữa mà được sử dụng trực tiếp trên ROM.
Việc các ứng dụng lưu trữ trên ROM không cần nạp vào RAM khi thực thi là đặc điểm của Symbian để phù hợp với tài nguyên bộ nhớ giới hạn của điện thoại. Ngoài ra để tối ưu hóa kích thước chương trình, hệ điều hành Symbian sử dụng điểm vào của DLL là một số thứ tự, trên các hệ điều hành khác có thể dùng số thứ tự hay tên. Do đó khi nâng cấp DLL thì số thứ tự phải giống như phiên bản trước.

3. Thực thi ứng dụng và server
• Các server được lưu trữ trong các file .exe, như ewsrv.exe là window server, hay efsrv.exe là file server. Để giảm chi phí chuyển đổi ngữ cảnh các server có cùng nhóm chức năng được dùng chung một tiến trình. Một server chính sẽ tạo tiến trình và các server khác sẽ thực thi tiểu trình của nó với tiểu trình của server chính.
• Ứng dụng console (không có giao diện đồ họa) được thực thi qua file chương trình .exe. Các ứng dụng dạng này phải tạo một console riêng để tương tác với người dùng.
• Các ứng dụng có giao diện đồ họa (GUI) là những thư viện polymorphic DLL với phần mở rộng là .app. Điểm vào của ứng dụng này là NewApplication() tạo và trả về một đối tượng dẫn xuất từ lớp CEikApplication (Series 80/9200Series/Series90) hay các lớp dẫn xuất từ CEikApplication phù hợp theo từng dòng điện thoại Symbian như CQikApplication (UIQ), CAknApplication (Series 60). Tiến trình ứng dụng được tạo bởi một chương trình nhỏ .exe, Apprun.exe, và tên của file chương trình ứng dụng .app được chuyển làm tham số cho Apprun.exe.
 

BatKid

Super V.I.P
4. Định danh file
Symbian không quản lý các file dựa trên tên và phân biệt loại file dựa trên phần mở rộng như các hệ điều hành khác vẫn làm mà quản lý dựa trên một tổ hợp 3 số 32bit. Mỗi một số như vậy được gọi là định danh file (Unique Identifier-UID). UID được dùng để phân biệt và xác nhận, chọn lựa đúng các loại đối tượng khác nhau tại thời điểm nạp và thực thi, như phân biệt ứng dụng console, DLL, server, v.v...UID cũng là thành phần cơ bản để liên kết ứng dụng với tài liệu, ví dụ, tài liệu ứng với một ứng dụng sẽ yêu cầu hệ thống nạp ứng dụng khi tài liệu đó được mở.
3 UID này (UID1, UID2 và UID3) có giá trị hằng ứng với các tên gọi do Symbian quy định, nhưng cũng có thể sử dụng số hệ 10 hay hệ 16.
- UID1: định danh cấp hệ thống, chương trình thực thi .exe hay DLL được phân biệt nhờ UID1: với các giá trị tương ứng KExecutableImageUid=0x1000007A và KDynamicLibraryUid=0x10000079.
- UID2: định danh cấp giao tiếp, phân biệt các đối tượng cùng UID1, ví dụ UID2 được dùng để phân biệt thư viện dùng chung .dll và thư viện polymorphic (như .app, .mdl, .fep hay .ctl) qua các giá trị: KSharedLibraryUid=0x1000008d cho thư viện dùng chung và KUidApp=0x100039CE cho một ứng dụng đồ họa .app, recognizer(auto start)=0x10003A19, front-end procesors=0x10005E32, hay control panel=0x10003A34.
- UID3: định danh cấp chương trình thực thi, phân biệt các đối tượng có cùng UID2, chẳng hạn các ứng dụng đồ họa khác nhau sẽ có UID3 khác nhau. Do đó, có một tổ chức quản lý UID3 này cho toàn môi trường Symbian. Để có nó, lập trình viên phải gởi mail về uid@symbiandevnet.com để xin một số UID3 duy nhất trên môi trường Symbian.
Tổ hợp 3 số UID sẽ là duy nhất trên toàn môi trường Symbian. Nếu bạn sử dụng UID3 tùy tiện thì chương trình của bạn vẫn có thể chạy được nhưng nếu trên 1 máy nào đó có sẵn chương trình khác cùng loại và có cùng UID3 (nghĩa là trùng cả 3 số) thì chương trình của bạn sẽ không chạy vì chương trình cài trước đó sẽ được ưu tiên.

Một đối tượng hay một file trong Symbian có thể có một, hai, ba hay không cần UID.
- Để sử dụng thuận tiện trong việc tương tác và chuyển đổi dữ liệu với các hệ thống khác, hệ điều hành cho phép không cần sử dụng UID. Khi không có UID, Symbian sẽ phân biệt dựa vào quy ước đặt tên.
- Ứng dụng thực thi .exe thường chỉ có UID1 với giá trị KExecutableImageUid.
- Ứng dụng DLL: các ứng dụng này có UID1 là KDynamicLibraryUid. Với các thư viện dùng chung .dll, UID2 sẽ là KSharedLibraryUid. Với các thư viện polymorphic , UID2 sẽ có nhiều giá trị khác nhau tùy từng loại. UID3 thì các DLL hầu như không cần, chỉ có các loại thư viện polymorphic là cần đến.
- Đối với các loại tài liệu thì UID1 là KDirectFileStoreLayoutUid hoặc KPermanentFileStoreLayoutUid ứng với tài liệu độc lập và tài liệu cơ sở dữ liệu. UID2 và UID3 phụ thuộc ứng dụng mà tài liệu phục vụ.
Vì UID là giá trị được sử dụng để phân biệt nên cần sự chính xác. Đối với UID3 dùng trong ứng dụng đồ họa, trong quá trình phát triển, có thể sử dụng một giá trị bất kỳ trong khoảng 0x01000000 và 0x0fffffff. Nhưng khi cài ứng dụng vào điện thoại thì nhất định đó phải là con số được cấp chính xác và duy nhất
 

BatKid

Super V.I.P
Project file

Thông thường các project được xây dựng trên các IDE hỗ trợ nhưng trên Symbian thì khác. Vì có nhiều loại điện thoại, nhiều nền hệ thống và nhiều bộ công cụ phát triển khác nhau nên hệ điều hành Symbian đã cho phép project được đặc tả trong một định dạng độc lập. Sau đó, với các công cụ đi kèm trong các bộ công cụ phát triển hay trên các IDE hỗ trợ, các file project này được định dạng lại thành các file project phù hợp với IDE cho dòng điện thoại cụ thể và bộ SDK cho điện thoại đó.

1. File định nghĩa project (.mmp)
File này mô tả các thông tin của project. Đây là một file project độc lập, nó sẽ được chuyển thành file phù hợp môi trường phát triển cụ thể với các công cụ makmake hay lệnh abld.bat. Nó định nghĩa các file tài nguyên và file thông tin ứng dụng cần cho quá trình biên dịch. Cấu trúc file .mmp: gồm các dòng khai báo với các loại câu khai báo khác nhau. Thông thường chỉ một số ít khai báo được dùng. Sau đây là cú pháp các khai báo thông dụng qua ví dụ project HelloWorld với file HelloWorld.mmp:
• Aif: aif target-file source-path resource [color-depth] source-bitmap-list
Với:
+ target-file: tên file đích, thường viết luôn phần đuôi và nằm trong thư mục ứng dụng.
+ source-path: đường dẫn đến nơi chứa file tài nguyên mà aif cần
+ resource: tên các file tài nguyên mà aif cần với tên đầy đủ.
+ color-depth: đặc tả cho tất cả các file bitmap và ở dạng [c][digit] với c là color bitmap và "digit" thể hiện độ sâu.
aif helloworld.aif \helloworld\aif\ helloaif.rss c8 hello.bmp hellom.bmp
• Target: target filename.ext.
target HelloWorld.app
• TargetType: targettype target-type
Với target-type được hỗ trợ bao gồm: ani, app, ctl, dll, ecomiic, epocexe, exe, exedll, fsy, kdll, kext, klib, ldd, lib, mda, mdl, notifier, opx, pdd, pdl rdl, var, wlog.
targettype app
• UID: uid uid2 [uid3]
Mỗi ứng dụng thực thi có 3 loại UID, UID thứ nhất là targettype ở trên. Loại thứ hai và thứ ba là tùy chọn. UID được viết dưới dạng số hệ 10 hoặc hệ 16.
uid 0x100039CE 0x10004299
• TargetPath: targetpath target-path
targetpath \system\apps\HelloWorld
• SourcePath: sourcepath directory
Có thể có nhiều sourcepath nhưng đối với file mã và tài nguyên công cụ biên dịch chỉ quan tâm đến trong khai bao sourcepath **ối cùng.
sourcepath ..\group
• Source: source source-file-list
source HelloWorld_Main.cpp
• UserInclude: userinclude directory-list
userinclude ..\inc
• SystemInclude: systeminclude directory-list
systeminclude \epoc32\include
• Resource: resource resource-file-list (khai báo tên nên đầy đủ phần mở rộng)
resource HelloWorld.rss
• Library: library filename-list
library euser.lib apparc.lib cone.lib eikcore.lib

File HelloWorld.mmp hoàn chỉnh:

TARGET HelloWorld.app
TARGETTYPE app
UID 0x100039CE 0x10004299
TARGETPATH \system\apps\HelloWorld
SOURCEPATH .
SOURCE HelloWorld_Main.cpp
SOURCE HelloWorld_Application.cpp
SOURCE HelloWorld_Document.cpp
SOURCE HelloWorld_AppUi.cpp
SOURCE HelloWorld_AppView.cpp
USERINCLUDE .
SYSTEMINCLUDE \epoc32\include
RESOURCE HelloWorld.rss
LIBRARY euser.lib apparc.lib cone.lib eikcore.lib
AIF helloworld.aif \helloworld\aif\ helloaif.rss c8 hello.bmp hellom.bmp

2. File mô tả thành phần bld.inf
File này luôn luôn có tên là bld.inf. Nó liệt kê danh sách các file project (thường chỉ 1), file xuất, các nền hệ thống và các file xuất với phần kiểm tra. Nó được công cụ bldmake thực thi để tạo ra file bó abld.bat và các file thực thi khác. Thông thường chỉ có khai báo prj_mmpfiles cho các file project được sử dụng.
Ví dụ: Với project HelloWorld trên, file bld.inf có cấu trúc như sau:
// Project files
prj_mmpfiles
HelloWorld.mmp

Chú ý: - Mỗi câu khai báo xuất hiện trên một hàng riêng
- Sử dụng cách ghi chú của C++ cho phần ghi chú(// hoặc /* */)
- Các file nên khai báo đầy đủ phần mở rộng.
- Dấu \ được sử dụng để xác định sự liên tục dòng (dòng dưới cũng thuộc câu lệnh với dòng trên, do dài được cắt xuống), do đó khi khai báo đường dẫn, dấu \ sau cùng phải bỏ đi. Ví dụ nên viết SYSTEMINCLUDE \epoc32\include chứ không phải là SYSTEMINCLUDE \epoc32\include\.
 

BatKid

Super V.I.P
LỚP, HÀM, DỮ LIỆU TRONG SYMBIAN

Symbian đưa ra một số quy ước trong lập trình trên Symbian. Một số quy ước bạn không nhất thiết phải theo nhưng nhưng một số thì bạn nên tuân thủ để phục vụ cho việc lập trình của bạn thuận lợi, tránh sai sót và dễ nâng cấp sau này.

1. Tên lớp:
Symbian sử dụng các quy ước đặt tên sau để xác định đặc tính cơ bản của một lớp:
• Lớp T: lớp đơn giản (tựa như typedef) thường xây dựng từ các kiểu dữ liệu cơ sở hay kết hợp chúng lại, có thể so sánh lớp T với struct đơn giản bao gồm các dữ liệu public. Nó không có destructor (có thể có constructor nhưng hiếm) và thường được lưu trên stack, có thể lưu trên heap. Kiểu liệt kê (enum) cũng thường khai báo dưới dạng lớp T. Ví dụ: TInt, TBool, TPoint, TDes, TMonthsOfYear ...
• Lớp C: Lớp có constructor và destructor và tất cả đều là dẫn xuất từ CBase. Các đối tượng của chúng được tạo bằng new và luôn được lưu trữ trên heap. Ví dụ: CConsoleBase, CActive,...
• Lớp R: Lớp R (đại diện cho Resource), thường đại diện cho một loại tài nguyên, quản lý một sesion kết nối với một server phục vụ một tài nguyên. Đối tượng lớp R thường có một hàm khởi tạo (Open() hoặc Create() hay Initialize()) và một hàm kết thúc (Close() hay Reset()) để giải phóng tài nguyên. Quên gọi hàm kết thúc khi dùng đối tượng lớp R là một lỗi thường gặp và kết quả là sẽ bị lủng bộ nhớ. Nó có thể được lưu trên heap, nhưng thường là trên stack. Ví dụ: RFile, RTimer, RWindow,...
• Lớp M (Mix-ins): Lớp ảo (abstract) giống như interface trong Java, nó chỉ bao gồm các phương thức ảo rỗng và không có dữ liệu cũng như constructor. Việc kế thừa nhiều lớp trong Symbian là cho phép tuy nhiên phải theo quy tắc là kế thừa chính từ 1 lớp C (bắt buộcphải có và viết đầu tiên) và nhiều lớp M. Ví dụ: MGraphicsDeviceMap, MGameViewCmdHandler,...
Việc phân biệt giữa T, C và R lớp là rất quan trọng, nó ảnh hưởng tới việc giải phóng bộ nhớ khi sử dụng cũng như cách thức xử lý các đối tượng thuộc các lớp này.
Ngoài ra trong Symbian còn có các lớp tĩnh (static) phục vụ cho một số chức năng riêng như lớp User hay lớp Mem. Một ngoại lệ khác là lớp HBufC, chúng ta sẽ nói đến no ssau trong phần desciptor

2.Tên dữ liệu
Tương tự, Symbian cũng dùng chữ cái đầu để phân biệt các loại dữ liệu:
• Hằng liệt kê (Enumerated constant): Bắt đầu với ký tự E, nó đại diện cho một giá trị hằng trong một dãy liệt kê. Nó có thể là một phần của lớp T. Ví dụ: (ETrue, EFalse) của TBool hay EMonday là một thành phần của TDayOfWeek.
• Hằng (constant): Bắt đầu với ký tự K, thường được dùng trong các khai báo #define hay các giá trị hằng do Symbian quy định. Ví dụ: KMaxFileName hay KErrNone.
• Biến thành phần (member variable): Bắt đầu với chữ cái i (instance), được dùng khi sử dụng các biến động là thành viên của một lớp. Đây là quy ước quan trọng, dùng cho việc hủy vùng nhớ trên heap của các đối tượng này trong destructor. Tôi thường chỉ dùng quy ước này nếu biến này sẽ được lưu trên heap, còn trên stack thì không. Ví dụ: iDevice, iX, …
• Tham số (argument): Bắt đầu bằng chữ a (argument), được dùng khi các biến làm tham số. Ví dụ: aDevice, aX, …
• Macro: Không có quy ước đặc biệt. Tất cả đều viết hoa và dùng dấu gạch dưới để phân tách từ. Ví dụ: IMPORT_C, _TEST_INVARIANT, _ASSERT_ALWAYS, v.v…
• Biến cục bộ (automatic): chữ cái đầu nên viết thường. Biến toàn cục (global): nên viết hoa chữ cái đầu nhưng để tránh nhầm lẫn nên bắt đầu tên bằng chữ cái “g”. Tuy nhiên trên Symbian không khuyến khích dùng biến toàn cục

3.Tên hàm:
Tên hàm bắt đầu bằng ký tự hoa. Khác với 2 trường hợp trên, quy ước đặt tên hàm lại dựa trên ký tự cuối cùng:
• Hàm không ngắt giữa chừng (non-leaving function): đó là hàm mà trong quá trình thực thi nó đều diễn ra suông sẻ, chi tiết tôi sẽ nói sau. Ví dụ: Draw() hay Intersects().
• Hàm ngắt giữa chừng (leaving function): là hàm bị ngắt ngang vì một lý do nào đó: lỗi,, thiếu tài nguyên, ... Hàm này kết thúc bằng ký tự L. Ví dụ: DrawL() hay RunL().
• Hàm LC: Kết thúc với cặp ký tự LC. Các hàm này trong lòng nó có khai báo một đối tượng mới, và có đặt đối tượng này lên cleanup stack (ngăn xếp chứa các đối tượng cần xóa khi có ngắt xảy ra, sẽ nói rõ sau) và có khả năng xuất hiện ngắt trong khối xử lý hàm. Bạn lưu ý là sau khi gọi hàm này sẽ phải gọi Cleanup: opAnd Destroy(), lý do tôi sẽ nói trong phần về cleanup stack, nếu quên gọi nó chắc chắn bạn sẽ bị lỗi 3 mà không hiểu tại sao. Ví dụ: AllocLC(), CreateLC(), OpenLC() hay NewLC(),...
• Các hàm Get và Set: trong trường hợp đơn giản thường là các hàm thành viên của một lớp. Set dùng cho việc xác lập giá trị cho một biến thành viên của lớp. Get được dùng cho các hàm sẽ trả về giá trị trên tham số. Khi hàm có giá trị trả về thì thường không dùng Get.
Ví dụ: SetThing(aData); GetThing(aData); nhưng iData = Thing();

4.Cấu trúc thư mục project:
Tuy không bắt buộc nhưng Symbian khuyến khích lập trình viên xây dựng thư mục project ứng dụng thành các thư mục con với chức năng riêng biệt. Thông thường thư mục project có cấu trúc như sau:
• Thư mục project: chứa các file project .mmp, bld.inf, file tài nguyên .rss. Thư mục này cũng sẽ lưu trữ các file thông tin cụ thể cho chương trình dùng với các IDE. Thư mục này thường được đặt tên là: group.
• Thư mục các file khai báo: chứa các file khai báo cho file tài nguyên và các file mã nguồn. Thư mục này thường có tên là: inc.
• Thư mục mã nguồn: chứa các file cài đặt các lớp chương trình. Thư mục này thường có tên là: src.
• Thư mục dữ liệu: chứa dữ liệu cần cho chương trình ứng dụng và có tên là data.
• Thư mục thông tin ứng dụng: chứa file tài nguyên .rss để tạo file .aif và các hình ảnh, tài nguyên phục vụ cho ứng dụng. Tậo hợp các hình này được lưu trữ trong một file .mbm (multi bitmap). Thư mục này có tên là aif.
• Thư mục cài đặt: chứa các file .pkg, các thành phần cài đặt bổ sung cho ứng dụng. Thư mục này thường có tên là: install.
• Thư mục chương trình: lưu trữ file cài đặt .sis. Thường nó được gộp với thư mục install. Thư mục này có tên là release.
Tuy nhiên các project thường chỉ gồm các thư mục: group, inc và src.

5. Trình bày code:
Nếu lập trình trên C và Java thấy 2 phong cách trình bày quen thuộc là:
void Example()
{
.........
.........
}


void Example(){
.........
.........
}

thì Symbian đề xuất cách trình bày sau:
void Example()
->{
->.........
->........
->}
Đó chỉ là đề xuất trong Symbian chứ bạn không nhất thiết phải viết như thế. Hãy cứ trình bày cách nào mà bạn ưa thích nhất. Tuy nhiên hãy cứ trình bày theo cách của Symbian để không quên là bạn đang coding cho OS naỳ.
 
Top