Mở đầu: Bối cảnh và nhu cầu thực hiện đề tài, mục tiêu của đề tài và nội dung của khóa luận. Kỹ thuật lập trình cơ bản trên Android: sơ lược về Android, lập trình truy xuất camera, sử dụng công cụ NDK biên dịch mã nguồn trên Android. Nhận dạng ký tự quang học OCR: Giới thiệu chung về nhận dạng ký tự quang học, bộ nhận dạng ký tự quang học Tesseract và cách huấn luyện dữ liệu. Tra từ điển Anh Việt: Cấu trúc dữ liệu từ điển, khôi phục từ gốc và tra từ gần đúng.
Cài đặt thực nghiệm: kết quả thử nghiệm và đánh giá chương trình. Kết luận: Hạn chế của luận văn và hướng phát triển trong tương lai. Chương 2 : CÁC KỸ THUẬT CƠ BẢN TRÊN ANDROID 2. Sơ lược về Android 2.
Tổng quan Android là hệ điều hành mở dựa trên nền tảng Linux dùng cho các thiết bị di động bao gồm điện thoại thông minh, máy tính bảng, máy tính xách tay. Được phát triển ban đầu tại công ty liên hợp Android sau đó công ty này được Google mua lại vào năm 2005 và biến Android thành một hệ điều hành mở trên các thiết bị di động. Android chính thức ra mắt vào ngày 5/11/2007 cùng với sự ra đời của liên minh thiết bị cầm tay mở OHA (Open Handset Alliance). Liên minh OHA là một tổ chức bao gồm khoảng hơn 78 công ty viễn thông, di động và phần cứng như Goolge, Sony Ericsson, Samsung, Nvidia, Qualcomm… Mục tiêu của hội này là phát triển các chuẩn mở chung cho thiết bị di động trong tương lai.
Và Android là sản phẩm chủ lực của hãng. Mã nguồn của Android là mã nguồn mở và được công bố dưới dạng giấy phép Apache.1 Điện thoại dùng hệ điều hành Android 6. Các phiên bản Android Từ lúc ra đời đến nay, Android đã tung ra nhiều phiên bản khác nhau với những nâng cấp và cải tiến theo từng phiên bản. Sau đây là danh sách các phiên bản Android hiện có: Phiên bản 1.5 (Cupkake): phiên bản chính thức dầu tiên của Android trên điện thoại.3 (Icecream sandwich): đây là phiên bản Android mới nhất hiện nay và được dùng trên các điện thoại thông minh và cả máy tính bảng.
Kiến trúc và thiết kế Hình 2.2 Kiến trúc tổng thể của Android [1] Nhìn vào kiến trúc của Android thì hệ điều hành Android được chia thành các tầng như trong hình bao gồm: Applications, Application Framework, Libraries, Android Runtime, Linux Kernel. Trong đó 2 tầng Applications và Application Framework được viết bằng ngôn ngữ Java. Còn các tầng từ Libraries đến Linux Kernel được viết bằng ngôn ngữ C/C++ hay còn gọi là mã gốc - native code. Tầng Applications: Đây là tầng cao nhất trong hệ điều hành Android.
Tầng này bao gồm các ứng dụng được viết và cài đặt sẵn như: lịch, trình duyệt web, danh bạ, camera… Các ứng dụng tại tầng này đều được viết bằng ngôn ngữ Java. Tầng Application Framework: Bên dưới tất cả các ứng dụng là một tập hợp các dịch vụ và hệ thống cho phép các nhà phát triển phần mềm có thể gọi các hàm hỗ trợ sẵn qua giao diện lập trình ứng dụng API (Application Programming Interface). o Tập hợp các màn hình (Views) mở rộng dùng để xây dựng nên giao diện chương trình như nút bấm, danh sách, hộp thoại, text box, các sự kiện… o Bộ cung cấp nội dung (Content Provider): Cung cấp khả năng truy xuất và chia sẽ dữ liệu giữa các ứng dụng. o Quản lý tài nguyên (Resouce Manager): Quản lý các loại tập tin không phải là mã nguồn.
Cung cấp khả năng truy cập đến các tài nguyên khác trong ứng dụng như các chuỗi, tập tin đồ họa, các tập tin định dạng giao diện (layout). o Quản lý hoạt động (Activity manager): Quản lý vòng đời và chu trình hoạt động của các ứng dụng. Tầng Libraries: Android có hệ thống các thư viện C/C++ được sử dụng nhiều trong các thành phần khác nhau của hệ điều hành. Một số các thư viện C/C++ chính trong Android: o System C Library: một BSD (Berkely Software Distribution) được thừa kế từ các thư viện chuẩn C và được tinh chỉnh cho các thiết bị sử dụng trên nền Linux.
o Media Library: thư viện hỗ trợ cho việc ghi âm, chơi các định dạng nhạc, phim và hiển thị các ảnh bao gồm các định dạng sau: MPEG4, H.264, MP3, AAC, ARM, JPG, PNG… o Surface Manager: Quản lý truy cập vào hệ thống hiển thị. o Live Webcore: Công cụ trình duyệt web. o SGL: Các hàm cơ bản về đồ họa 2 chiều. o 3D Library: Đồ họa 3 chiều.
o Freetype: Biểu diễn các font và vectơ bitmap. o SQLite: Cơ sở dữ liệu. Tầng Android Runtime: Bao gồm một tập các thư viện lõi Java và máy ảo Dalvik. Máy ảo Dalvik thực thi các tập tin định dạng dex.
ứng dụng được chạy trên một tiến trình riêng của máy ảo Dalvik. Trên cùng 1 thiết bị có thể chạy nhiều máy ảo Dalvik khác nhau một cách hiệu quả. Tầng Linux Kernel: Đây là tầng thấp nhất trong hệ điều hành Android, được xây dựng trên nhân của Linux 2.6 chứa các trình quản lý thiết bị như keypad, wifi, âm thanh, quản lý điện năng… và các dịch vụ của hệ thống như: an ninh, quản lý bộ nhớ, quản lý tiến trình, kết nối mạng. Tầng này đóng vai trò là tầng trung gian liên lạc giữa phần cứng và ngăn xếp phần mềm ở các tầng trên.
Máy ảo Dalvik Dalvik là máy ảo để thực hiện các ứng dụng phần lớn viết bằng Java trên Android dưới dịnh dạng là tập tin (. Về cơ bản có thể nhận thấy máy ảo Dalvik có phần giống với máy ảo Java trên Desktop, tuy nhiên có phần khác là khi ta viết các ứng dụng trên Java thì mã nguồn sẽ được chuyển thành mã bytecode. Tại đây, một công cụ có sẵn trên Android là “dx” sẽ chuyển dạng mã bytecode này thành dạng tập tin .dex (viết tắt là Dalvik Excutable) và được thực thi trên máy ảo Dalvik để chạy các ứng dụng Android.3 Cơ chế hoạt động của máy ảo Dalvik và Java 2. Android software development kit (SDK) Bộ phát triển ứng dụng cho Android hay còn gọi là Android SDK cung cấp cho các nhà phát triển phần mềm có thể lập trình, gỡ lỗi và kiểm thử ứng dụng được phát triển trên Android.
Bộ SDK bao gồm: Thư viện lập trình Android (Android API): đây là phần cốt lõi của bộ phát triển Android, từ các thư viên lập trình Android API, Google đã xây dựng nên các ứng dụng có sẵn. Công cụ phát triển: cung cấp sẵn cho các nhà phát triển các công cụ để lập trình, biên dịch, sửa lỗi mã nguồn trong ứng dụng. Tài liệu: đây là phần hướng dẫn sử dụng các thư viện, lớp / hàm có sẵn trong môi trường lập trình Android. Ngoài ra còn giải thích về cơ chế hoạt động của các ứng dụng trong Android.
Ứng dụng mẫu: Bộ Android SDK còn cung cấp các đoạn mã nguồn của chương trình có sẵn. Trình giả lập Android: Để cung cấp sự thuận tiện cho người phát triển, bộ Android SDK đã cung cấp cho người dùng sẵn trình giả lập Android mô phỏng môi trường làm việc y như trên thiết bị thật để thuận tiện cho người phát triển có thể chạy hoặc sửa lỗi các ứng dụng trên thiết giả lập này mà không cần phải có thiết bị thật.4 Minh họa trình giả lập điện thoại Android 2. Native development kit (NDK) 2. Giới thiệu chung Khi viết một ứng dụng Android ở tầng trên bằng ngôn ngữ Java mà ta có nhu cầu gọi lại các hàm hoặc thư viện ở tầng bên dưới (thường là các đoạn mã ở tầng dưới được viết bằng C/C++).
Để Java có thể hiểu và truy xuất được các đoạn mã C/C++ thì ta cần một giao diện chung giữa 2 ngôn ngữ. Giao diện chung đó được gọi là Java Native Interface – JNI. Native Development Kit – NDK là một bộ công cụ đi kèm với Android SDK giúp cho các nhà phát triển có thể viết hoặc nhúng các đoạn mã nguồn bằng C/C++ bên trong chương trình. Các ứng dụng Android hoạt động trên máy ảo Dalvik.
Chính nhờ NDK mà các ứng dụng có thể gọi được các đoạn mã gốc – native code được sử dụng trong chương trình. Các hỗ trợ của NDK Bộ công cụ NDK cung cấp các hỗ trợ sau: Một tập hợp các công cụ và tập tin để phát sinh ra các thư viện mã từ C/C++. Cách thức nhúng các đoạn mã phát sinh từ C/C++ vào trong tập tin đóng gói ứng dụng (.apk) chạy được trên các thiết bị Android. Cung cấp một tập các header và thư viện sẽ được hỗ trợ ở tất cả các phiên bản Android từ 1.
Từ phiên bản 2.3 có hỗ trợ thêm viết Native Activity. Các tài liệu, mã nguồn mẫu và hướng dẫn. Sử dụng NDK Không phải lúc nào sử dụng NDK cũng có lợi cho chương trình. Vì sử dụng mã gốc (native code) trong chương trình không làm tăng hiệu năng thực thi mà chỉ làm tăng thêm sự phức tạp cho ứng dụng.
Chỉ sử dụng mã gốc trong trường hợp cần thiết để làm giảm sự phức tạp cho chương trình. Android Framework cung cấp 2 cách để sử dụng native code trong chương trình: Viết ứng dụng sử dụng Android Framework và sử dụng JNI để truy cập các hàm API được cung cấp trong bộ công cụ Android NDK. Ưu điểm của kỹ thuật này là chúng ta có thể tận dụng các lợi ích của Android Framework mà vẫn sử dụng được mã gốc khi cần thiết. Viết một native activity để hiện thực cài đặt chu trình của ứng dụng bằng mã gốc.
Bộ công cụ Android SDK sẽ cung cấp lớp NativeActivity 13. là lớp tiện ích để hiện thực cái đặt vòng đời của ứng dụng thông qua các hàm (OnCreate, OnPause…). Nội dung của bộ NDK Bao gồm các công cụ và thư mục sau: Công cụ phát triển: Bao gồm tập hợp các công cụ phát triển (trình biên dịch, trình liên kết – linker) để phát sinh ra mã nhị phân cho bộ vi xử lý ARM chạy trên các nền tảng Linux, OS X và Windows (sử dụng kèm với công cụ Cygwin). Các công cụ phát triển này còn cung cấp một tập hợp các hệ thống header dùng cho các hàm API gốc ổn định và được đảm bảo là sẽ hỗ trợ trong tất cả các phiên bản sau này của nền tảng Android: Libc (thư viện C) header.
Giao diện JNI header.1 và OpenGL ES 2. Các header hỗ trợ cho C++. Các API hỗ trợ ứng dụng gốc trên Android. Ngoài ra NDK còn cung cấp cho chúng ta một hệ thống biên dịch mã nguồn hiệu quả mà không cần phải có sự điều khiển chi tiết các công cụ / nền tảng / vi xử lý / ABI.