Biên dịch chương trình

Một phần của tài liệu TÌM HIỂU và NGHIÊN cứu kỹ THUẬTPHÁT TRIỂN ỨNG DỤNG TRÊN MÔITRƯỜNG SYMBIAN OS (Trang 139)

2 Hướng nghiên cứu và giới hạn đề tài

6.3Biên dịch chương trình

Trên môi trường hệ điều hành máy tính, sau khi kiểm lỗi xong, việc biên dịch chương trình sẽ trở nên rất đơn giản với chỉ một câu lệnh hay một thao tác trên IDE. Nhưng trên hệ điều hành Symbian, việc biên dịch không hềđơn giản bởi có nhiều loại đích biên dịch khác nhau sau những quy ước xây dựng các file dự án .mmp và bld.inf, nhất là biên dịch cho các ứng dụng đồ họa bởi tài nguyên và chương trình

KHOA CNTT –

ĐH KHTN

riêng. Trước khi thực hiện biên dịch, chúng ta hãy xem xét các loại biên dịch khác nhau cho Emulator và cho điện thoại Symbian.

6.3.1 Loại biên dịch

Trong phần này chỉ nói về các đặc điểm riêng của các loại biên dịch, còn cách thức biên dịch sẽ được nói rõ trong phần biên dịch bằng các công cụ và biên dịch với các IDE.

• Biên dịch cho Emulator

Ngoài ứng dụng đồ họa và chương trình console, các loại chương trình khác như .exe, server hay .dll, biên dịch cho Emulator đều được hỗ trợ, được lưu trữ trên cùng vị trí như ứng dụng đồ họa nhưng chúng không thể thực thi trên Emulator. Thông thường 2 từ khóa WINSCW và WINS được sử dụng trong biên dịch ứng với 2 loại Emulator hỗ trợ cho 2 môi trường phát triển là CodeWarrior và VC++ 6.0. WINS cũng được dùng trong biên dịch với IDE C++ Builder 6.0/C++ BuilderX.

• Biên dịch cho WINC

Đây là một loại biên dịch đặc biệt, cho phép các phần engine ứng dụng chạy trên hệ điều hành Symbian có thể truy cập tài liệu ứng dụng từ các chương trình ứng dụng chạy trên máy tính. Kết quả biên dịch của WINC được lưu trữ trong epoc32\release\winc\variant. WINC là từ khóa được dùng trong biên dịch cho WINC.

• Biên dịch cho điện thoại Symbian

Điện thoại Symbian sử dụng bộ xử lý ARM nhưng bộ chỉ thị của ARM không được đặc tả duy nhất. Do đó định dạng nhị phân ra đời với tên gọi là Application Binary Interface (ABI), nó sẽđịnh nghĩa luật chung để gọi các hàm và những phần khác trong file nhị phân. Bộ xử lý ARM7 và ARM9 (dùng trên điện thoại Symbian) hỗ trợ loại định dạng nhị phân là ARM4, ARMI và THUMB.

- ARM4: biên dịch cho tập chỉ thị ARMv4 32 bit phục vụ cho xử lý nhanh. - THUMB: biên dịch cho chếđộ THUMB (16bit) , là tập con của tập chỉ thị

KHOA CNTT –

ĐH KHTN

- ARMI: biên dịch cho chế độ ARM, là tập con của tập chỉ thị ARMv4T, dùng BX.

Với BX: tập chỉ thị chuyển từ chế độ ARM sang chế độ THUMB. Khái niệm "dùng BX" ở trên để chỉ các ABI ARMI và THUMB được biên dịch có khả

năng tương tác với mã trong các chế độ khác trong tập chỉ thị ARMv4T, và chúng sẽđược tựđộng chuyển đúng chếđộ khi gọi một hàm hoặc trả về từ một hàm.

Mã hệ điều hành được biên dịch với nhiều loại ABI khác nhau. Chương trình được biên dịch với ABI là ARMI có thể làm việc với các mã ABI còn lại nên

đây là kiểu biên dịch thường dùng, nhất là đối với lập trình viên tự do. 6.3.2 Biên dịch ứng dụng đồ họa

Khác với biên dịch một chương trình .exe hay một thư viện tĩnh .dll, sau những khai báo chính xác ở file .mmp và file bld.inf thì việc biên dịch trở nên dễ

dàng, biên dịch một ứng dụng đồ họa rất phức tạp với việc tài nguyên và chương trình được biên dịch riêng và nhiều công cụ biên dịch. Trước khi vào phần biên dịch một chương trình ứng dụng, chúng ta hãy tìm hiểu một loại file quan trọng phục vụ

cho quá trình biên dịch và xây dựng ứng dụng là file thông tin ứng dụng (.aif). 6.3.2.1 File AIF

File thông tin ứng dụng (Application information file-AIF) có cùng tên với file thực thi .app, lưu trữ cùng thư mục nhưng có phần mở rộng là .aif . Nó chứa thông tin vềứng dụng bao gồm:

• Biểu tượng (icon) ứng dụng: Các biểu tượng này đại diện cho chính ứng dụng cũng như đại diện cho các file/tài liệu của ứng dụng khi chúng được nhúng vào ứng dụng khác hay trên shell. File aif cho phép có thể lưu trữ nhiều icon với kích thước khác nhau. Điều này giúp cho đảm bảo chất lượng icon khi ứng dụng

được thể hiện dưới các dạng và trên các giao diện khác nhau. Mỗi icon cần một hình bitmap chính và một hình làm mặt nạ (mask bitmap). Hình mặt nạ này có màu

đen ở các vùng có hình và màu trắng trong suốt tại vùng thuộc khung hình nhưng không chứa hình.

KHOA CNTT –

ĐH KHTN

Ví dụ: // icons

num_icons=2; (adsbygoogle = window.adsbygoogle || []).push({});

• Tên ứng dụng (caption): Đây là tên đại diện cho ứng dụng, nằm dưới biểu tượng, thường chính là tên dự án ứng dụng. Khai báo này để hỗ trợ cho các ứng dụng nhiều ngôn ngữ. Mặc định, khi không có khai báo này trong file .aif thì tên file của file .aif này (không bao gồm phần mở rộng) sẽ được lấy làm tên ứng dụng. Ví dụ:

// captions caption_list= {

CAPTION { code=ELangEnglish; caption="Hello"; }, CAPTION { code=ELangFrench; caption="Bonjour"; } };

• Thuộc tính (property/capability): Khai báo các thuộc tính mà ứng dụng có thể hỗ trợ như:

- embeddability: khai báo file/tài liệu của ứng dụng có thể nhúng trong

ứng dụng khác hay không với 3 giá trị:

+ embeddable: xuất hiện trong danh sách file có thể nhúng (embeddable list) và trên shell.

+ not embeddable: không thể nhúng.

+ EmbeddableOnly: chỉ xuất hiện trong danh sách nhúng. Giá trị mặc định là không thể nhúng (not embeddable).

- hidden: có 2 giá trị: Hidden và Not Hidden. Khi giá trị Hidden được chọn, ứng dụng sẽ chạy nền, không hiện trên shell và trong danh sách có thể nhúng. Mặc định là Not Hidden.

- new-file: có 2 giá trị là Does Not Support New File và Supports New File. Thuộc tính này quy định có cho phép tạo file mới từứng dụng hay không. Giá

KHOA CNTT –

ĐH KHTN

trị mặc định là không. Trong C++, chức năng này được thể hiện ở lớp TApaAppCapability.

Lập trình C++ hỗ trợ tất cả các thuộc tính này trong khi Java thì không hỗ trợ thuộc tính nào cả. OPL không hỗ trợ nhúng.

// capabilities

embeddability= KAppEmbeddable; hidden=KAppNotHidden;

newfile= KAppSupportsNewFile;

• MIME (Multipurpose Internet Mail Extensions): khai báo định dạng file

để truyền những dữ liệu không phải là ký tự như hình ảnh, âm thanh, fax qua Internet. Có rất nhiều kiểu định dạng cho MIME và mỗi loại có độ ưu tiên khác nhau. Khi một file được mở, hệ điều hành Symbian sẽ nạp ứng dụng có độ ưu tiên cao nhất hỗ trợ loại file này. Java không hỗ trợđặc tính này.

// MIME types datatype_list= {

DATATYPE { priority=EDataTypePriorityNormal; type="text/html"; }, DATATYPE { priority=EDataTypePriorityLow; type="text/plain"; } };

Ngoài ra, đầu file còn chứa UID, định danh ứng dụng. Đây là nội dung một file .aif mẫu: #include <aiftool.rh> RESOURCE AIF_DATA { // uid app_uid=0x10004299; // captions caption_list=

KHOA CNTT –

ĐH KHTN

{

CAPTION { code=ELangEnglish; caption="Hello"; }, CAPTION { code=ELangFrench; caption="Bonjour"; } }; // icons num_icons=2; // capabilities embeddability= KAppEmbeddable; hidden=KAppNotHidden; newfile= KAppSupportsNewFile; // MIME types datatype_list= {

DATATYPE { priority=EDataTypePriorityNormal; type="text/html"; }, DATATYPE { priority=EDataTypePriorityLow; type="text/plain"; } };

}

File .aif này được tạo ra bằng công cụ abld, aiftool hay dùng AIF Builder. 6.3.2.2 Biên dịch với các công cụ biên dịch (adsbygoogle = window.adsbygoogle || []).push({});

Không dễ dàng như biên dịch với các IDE nhưng biên dịch từ dòng lệnh đôi khi cũng cần thiết để hiểu rõ quá trình biên dịch.

• Các công cụ biên dịch: Do Symbian hỗ trợ:

- bldmake: Công cụ này xử lý file mô tả thành phần dự án (bld.inf) và tạo ra một file bó abld.bat đảm nhận phần biên dịch còn lại. Đồng thời nó cũng phát sinh một số file biên dịch .make khác.

- abld: Đây là công cụ biên dịch chính. Nó đảm nhận biên dịch thành file thực thi cho chương trình với việc sử dụng các file .make.

KHOA CNTT –

ĐH KHTN

- makmake: Công cụ này được dùng để biên dịch các makefile để dùng cho các môi trường phát triển dự án khác nhau. makmake sử dụng file .mmp để tạo ra makefile cho một môi trường phát triển ứng dụng cụ thể: .winscw ứng với WINSCW (CodeWarrior), .wins ứng với WINS (VC++ 6.0), .winc ứng với WINC hay .armi ứng với loại biên dịch ARMI (loại biên dịch cho ứng dụng trên điện thoại Symbian). Biên dịch tài nguyên nên thực hiện trước khi makmake được thực hiện.

- petran: Công cụ sử dụng định dạng file ARM PE cho điện thoại Symbian. Với công cụ này các DLL sẽ có kích thước nhỏ hơn.

- rcomp: Công cụ này biên dịch file tài nguyên nguồn (.rss) thành file tài nguyên đích (.rsc) và (.rsg). Ngoài ra, biên dịch tài nguyên có thể được thực hiện với công cụ abld.

Do Cygnus hỗ trợ:

- gcc: Trình biên dịch C++ của GNU. Nó biên dịch file C++ (.cpp) và tạo ra file object (.o).

- ar: Trình nén GNU: chuyển file object (.o) vào trong một file nén (.in). - ranlib: Công cụ này chuyển file nén theo định dạng file ARM PE.

- dlltool: Công cụ này dùng để giải nén file .def từ một file nén (.in),

đồng thời nó cấu trúc một thư viện .lib và file .def từ file nén. - ld: Trình liên kết GNU: tạo file thực thi chương trình.

Các công cụ biên dịch khác do Symbian hỗ trợ:

- aiftool: Đây là công cụ để tạo file thông tin ứng dụng (.aif) sử dụng thông tin chứa trong một file tài nguyên (appnameaif.rss) và trong file icon (.mbm).

- bmconv: Công cụ này chuyển một hay nhiều file ảnh bitmap trên Windows (.bmp) thành một file ảnh duy nhất dùng trên Symbian (.mbm).

- epocrc: Công cụ này thực hiên việc tiền xử lý các thông tin tài nguyên trong các file .cpp, thông qua phần tiền xử lý C++, tạo ra file .rpp. Công cụ này

KHOA CNTT –

ĐH KHTN

Các công cụ biên dịch do Symbian cung cấp được lưu trữở epoc32\tools\ còn các công cụ do Cygnus hỗ trợđược lưu trữở epoc32\gcc\bin.

• Quá trình biên dịch một chương trình với các công cụ biên dịch:

- Tạo file định nghĩa dự án (.mmp) và file mô tả thành phần (bld.inf). - Tại thư mục chứa 2 file trên, thực hiện công cụ bldmake ta được file abld.bat và các file .make:

bldmake bldmakefiles

- Dùng abld vừa được tạo để thực hiện phần còn lại của biên dịch với các tham số cần thiết:

abld [ test ] command [ options ] [ platform [ build [ program ] ] ]

Tham số Giá trị

Command build: cho việc biên dịch hoàn chỉnh clean: xóa bỏ phần biên dịch

makefile: tạo các makefile hoặc file dự án cho IDE cụ thể (adsbygoogle = window.adsbygoogle || []).push({});

resource: chỉ biên dịch file tài nguyên và tạo ra file .aif Platform all: cho tất cả các môi trường

arm4: cho biên dịch điện thoại với ABI là ARM4 armi: cho biên dịch điện thoại với ABI là ARMI

thumb: cho biên dịch điện thoại với ABI là ARM THUMB wins: cho biên dịch Emulator WINS với IDE VC++ 6.0

winscw: cho biên dịch Emulator WINSCW với IDE CodeWarrior Build all cho cả 2 kiểu debug và release

udeb: cho kiểu biên dịch debug urel cho kiểu biên dịch release

B6.1 Các tham số trong lệnh bó abld

Ví dụ để biên dịch chương trình theo kiểu debug cho WINSCW ta thực hiện lệnh sau:

KHOA CNTT –

ĐH KHTN

H6.6 Sơđồ biên dịch bằng dòng lệnh

• Quá trình biên dịch tài nguyên với các công cụ biên dịch Biên dịch tài nguyên được thực hiện qua 3 bước:

- Tiền xử lý: Bước này được thực hiện bởi công cụ epocrc, đản nhận việc xử lý các chỉ thị như: #include: nạp file header, #define: định nghĩa các marco như

là hằng số hay #if: thực hiện các biên dịch có điều kiện. Sau khi xử lý, qua tiền xử

lý C++, file .rpp được tạo ra.

- Kết hợp với các chuỗi đặc tả ngôn ngữ: File .rpp ở trên sẽđược kết hợp với file khai báo chuỗi đặc tả ngôn ngữ .rls.

- Biên dịch thành file nhị phân: Qua công cụ rcomp, file trung gian .rpp

được chuyển ra thành file nhị phân .rsc và .rsg. 6.3.2.3 Biên dịch với IDE

Với các IDE, việc biên dịch sẽ rất đơn giản với việc chọn loại biên dịch và chọn biên dịch từ thực đơn. Thông thường các IDE hỗ trợ biên dịch tài nguyên trong quá trình biên dịch nên không cần phải biên dịch tài nguyên riêng.

KHOA CNTT –

ĐH KHTN

6.3.2.4 Sơđồ biên dịch ứng dụng cho điện thoại Symbian

.hrh .h .rls .cpp .rss .rh gcc .bmp .o ld .app .rsg epocrc .rpp rcomp .rsc/ .r01,.r02 bmconv .mbm .rss aiftool .aif

H6.7 Sơđồ biên dịch ứng dụng cho điện thoại Symbian

6.4 Triển khai ứng dụng

Sau khi biên dịch với nền biên dịch cho điện thoại Symbian (thường là ARMI) với kiểu biên dịch urel, ta sẽ thu được file thực thi ứng dụng đồ họa .app và các file quan trọng khác như .rsc, .aif, .mbm,... Để ứng dụng có thể hoạt động trên điện thoại Symbian, ta phải chép các file này vào thư mục \System\App\AppName trên ổ

C hay ổ D của điện thoại với AppName là tên thư mục cho ứng dụng này. Thông thường để làm việc này, ta phải đóng gói các file này thành một file cài đặt duy nhất và sử dụng các chương trình cài đặt ứng dụng để cài đặt ứng dụng lên điện thoại. Kiểu đóng gói file cài đặt chuẩn và phổ biến nhất cho ứng dụng Symbian là đóng gói thành file nén .sis.

File .sis là là file nén kiểu zlib được tạo bằng công cụ makesis có sẵn trong mọi bộ công cụ C++ SDK với tham số vào là một file điều khiển quá trình đóng gói .pkg. Người dùng có thể dễ dàng cài đặt file .sis này từ PC sử dụng phần mềm kết nối giữa PC và điện thoại hay cài đặt trực tiếp trên điện thoại Symbian sử dụng chức năng cài đặt trên shell. File .sis còn có cơ chế nhúng cho phép cài đặt các thư

KHOA CNTT –

ĐH KHTN

H6.8 Quá trình tạo file cài đặt .sis Cú pháp dòng lệnh để tạo file .sis với công cụ makesis: (adsbygoogle = window.adsbygoogle || []).push({});

makesis [flag] source [destination]

Với: flag: các cờ cần dùng trong quá trình tạo file: -v (in kết quả ra màn hình), -h (hiển thị các thông tin hữu ích), -d (thư mục sẽ tìm file .pkg nêu trong source, nếu không tìm thấy trong đường dẫn đã nêu ở tham số source) hay -p (mật mã dùng khi có tạo chứng thực điện tử cho ứng dụng).

source: tên file .pkg, đay là thâm số quan trọng nhất mà makesis cần. destination: tên file đích .sis cần tạo, nếu không có, sẽ lấy mặc định là tên file .pkg.

Ngoài ra cùng với việc tạo file .pkg, trước khi tạo file cài đặt .sis, Symbian còn cung cấp 2 công cụ khác để phục vụ cho các chức năng cài đặt bổ sung sẽ được

đóng gói trong file .sis:

- Công cụ phát sinh chứng thực điện tử (Certificate Generator): tạo cặp khóa bí mật/công khai được dùng bởi công cụ makesis ở trên để tạo chữ ký điện tử cho file cài đặt: sử dụng công cụ makekeys.

- Công cụ xây dựng file trợ giúp người dùng sử dụng chương trình ứng dụng: công cụ cshlpcmp. Công cụ này dùng để xây dựng file trợ giúp (.hlp) từ thông tin

định nghĩa trong file dự án, file văn bản .rtf hay từ các file thông tin khác. 6.4.1 Cấu trúc file điều khiển đóng gói .pkg

File .pkg là một file văn bản chứa các thông tin cho ứng dụng cần cài đặt. Nó thường được tạo bằng tay. File .pkg bao gồm các phần thông tin sau:

KHOA CNTT –

ĐH KHTN

• Các ngôn ngữ hỗ trợ:

Các ngôn ngữ được sử dụng bởi các thành phần trong file .pkg. Nếu không có thì mặc định sẽ là tiếng Anh. Mỗi ngôn ngữ được định danh bởi mã ngôn ngữ gồm 2 chữ cái. Hiện có 33 ngôn ngữ được hỗ trợ. Một số mã ngôn ngữ thông dụng: EN: Tiếng Anh; FR: Pháp; SW: Thụy Điển; FI: Phần Lan; AM: Mỹ,...

Cú pháp khai báo như sau: &Language_1,..., Language_n ;Languages

&EN,FR

• Phần header: bao gồn tên (ứng với từng ngôn ngữ hỗ trợ) và định danh UID ứng dụng (UID3) sẽ được cài đặt và thông tin về phiên bản cài đặt, số biên dịch, loại đóng gói,... Cú pháp khai báo như sau:

#{"Name for language1", "Name for language n"},(UID),Major,Minor, Build-Number[,Package Options] [,TYPE=Package Type]

Với: Major và Minor là 2 giá trị của phiên bản cài đặt: Ví dụ: phiên bản

Một phần của tài liệu TÌM HIỂU và NGHIÊN cứu kỹ THUẬTPHÁT TRIỂN ỨNG DỤNG TRÊN MÔITRƯỜNG SYMBIAN OS (Trang 139)