1. Trang chủ
  2. » Luận Văn - Báo Cáo

hệ điều hành android và thực thi ứng dụng phát hiện khuôn mặt trên android

64 1K 6
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Hệ điều hành android và thực thi ứng dụng phát hiện khuôn mặt trên android
Tác giả Trần Thị Hợp
Người hướng dẫn TS. Nguyễn Linh Trung, TS. Nguyễn Thái Hà
Trường học Đại Học Quốc Gia Hà Nội - Trường Đại Học Công Nghệ
Chuyên ngành Công Nghệ Điện Tử Viễn Thông
Thể loại Khóa luận tốt nghiệp
Năm xuất bản 2011
Thành phố Hà Nội
Định dạng
Số trang 64
Dung lượng 2,88 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Khóa luận này tôi trình bày tổng quan về Android, kiến trúc Android, AndroidSDK, Android NDK, các thành phần tạo nên một ứng dụng Android và trình bày haiphương pháp phát hiện khuôn mặt

Trang 2

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Cán bộ hướng dẫn: TS Nguyễn Linh Trung

Cán bộ đồng hướng dẫn: TS Nguyễn Thái Hà

HÀ NỘI - 2011

Trang 3

VIETNAM NATIONAL UNIVERSITY, HANOI UNIVERSITY OF ENGINEERING AND TECHNOLOGY

Tran Thi Hop

ANDROID OPERATING SYSTEM AND IMPLEMENTATION OF FACE DETECTION

APPLICATION ON ANDROID

Major: Faculty of Electronics and Telecommunications

Supervisor: Ph.D Nguyen Linh Trung

Co-Supervisor: Ph.D Nguyen Thai Ha

HÀ NỘI-2011

Trang 4

LỜI CẢM ƠN

Để hoàn thành khóa luận này, em đã nhận được sự giúp đỡ nhiệt tình của TS Nguyễn Linh Trung, TS Nguyễn Thái Hà và các anh chị bên công ty Techburg, Hà Nội.

Trước hết em xin bày tỏ lòng biết ơn sâu sắc tới TS Nguyễn Linh Trung, Giảng viên khoa Điện Tử Viễn Thông, Trường Đại học Công Nghệ, ĐHQG Hà Nội, người đã hướng dẫn và chỉ bảo nhiệt tình cho em trong suốt quá trình học, nghiên cứu và hoàn thành khóa luận.

Em xin trân trọng cảm ơn sự nhiệt tình hướng dẫn và giúp đỡ tận tình của TS Nguyễn Thái Hà, Tổng giám đốc Công ty Techburg và các anh chị thuộc công ty đã nhiệt tình giúp đỡ và tạo điều kiện cho em học tập và hoàn thành khóa luận này Cuối cùng, em xin gửi lời biết ơn tới gia đình và bạn bè đã giúp đỡ và động viên em rất nhiều để em có thể hoàn thành khóa luận này Đặc biệt là gia đình, nơi

đã sinh thành, nuôi dưỡng và động viên em rất nhiều trong thời gian qua.

Hà Nội , ngày 20 tháng 5 năm 2011

Sinh viên:

Trần Thị Hợp

Trang 5

TÓM TẮT

Android là hệ điều hành cho thiết bị di động được phát triển bởi Google Androiddựa trên nhân Linux 2.6 và các ứng dụng Android được viết bằng ngôn ngữ lập trìnhJava Khóa luận này tôi trình bày tổng quan về Android, kiến trúc Android, AndroidSDK, Android NDK, các thành phần tạo nên một ứng dụng Android và trình bày haiphương pháp phát hiện khuôn mặt sử dụng thư viện OpenCV và framework API củaAndroid Đồng thời khóa luận cũng trình bày sự khác nhau giữa máy ảo Java và máy

ảo Dalvik Dalvik là máy ảo thực thi các ứng dụng Android

Trong khóa luận này tôi trình bày quy trình xây dựng và thực thi một ứng dụngvới Android NDK Quy trình này sẽ được sử dụng để xây dựng ứng dụng phát hiệnkhuôn mặt sử dụng OpenCV OpenCV là một thư viện hỗ trợ cho xử lý ảnh do Intelphát triển, bao gồm khoảng 500 hàm viết bằng các ngôn ngữ C và C++ Để sử dụngđược thư viện này thì đầu tiên phải porting được thư viện OpenCV vào Android Khóaluận cũng trình bày cách porting thư viện và trình bày thuật toán phát hiện khuôn mặt

do Viola và Jones đưa ra Để sử dụng thư viện OpenCV thì cần một giao diện đểchương trình ứng dụng Android viết bằng Java có thể gọi được các hàm viết bằngC/C++ của OpenCV Giao diện đó là JNI (Java Native Interface) Trong khóa luận tôicũng đưa ra một demo với “Hello World” sử dụng Android NDK mà có hỗ trợ JNI

Từ đó đưa được giải pháp để phát triển ứng dụng phát hiện khuôn mặt sử dụngOpenCV

Phương pháp thứ hai để phát hiện khuôn mặt là sử dụng framework API củaAndroid API là giao diện lập trình ứng dụng (Application Programming Interface).Android cung cấp một framework API bao gồm các gói và các lớp giúp cho các nhàphát triển có thể sử dụng để phát triển nhiều ứng dụng hấp dẫn Khóa luận trình bày vềcác gói và các lớp sử dụng framework API của Android để xây dựng ứng dụng pháthiện khuôn mặt trên Android và khóa luận đưa ra được kết quả khi tiến hành thựcnghiệm Với phương pháp này chỉ cần có kỹ năng lập trình Java tốt là có thể xây dựngđược ứng dụng

Trang 6

LỜI CAM ĐOAN

Tôi xin cam đoan đề tài “Hệ điều hành Android và thực thi ứng dụng phát hiện

khuôn mặt trên Android ” là kết quả tìm hiểu của riêng tôi với sự hướng dẫn của TS Nguyễn Linh Trung và TS Nguyễn Thái Hà Trong khóa luận có sử dụng một số tài

liệu và kết quả nghiên cứu như đã nêu trong phần tài liệu tham khảo Các kết quả, sốliệu sử dụng trong khóa luận là chính xác và trung thực

Khóa luận được hoàn thành trong thời gian tôi là sinh viên tại Bộ môn thông tin

vô tuyến, Khoa điện tử viễn thông, Trường Đại học Công Nghệ, ĐHQG Hà Nội

Hà Nội, ngày 20 tháng 5 năm 2011

Sinh viên:

Trần Thị Hợp

Trang 7

1.7 Porting OpenCV vào Android 10

1.8 Các thành phần tạo nên một ứng dụng Android 11

1.9 Phát triển ứng dụng Android và DVM 18

1.10 Tạo và demo ứng dụng “Hello World” sử dụng Android NDK 19

CHƯƠNG 2 CÁC PHƯƠNG PHÁP PHÁT HIỆN KHUÔN MẶT TRÊN ANDROID

………26

2.1 Thuật toán của Viola – Jones trong OpenCV 26

2.1.1 Đặc trưng Haar-like 26

2.1.2 AdaBoost……… 27

2.1.3 Mô hình phát hiện khuôn mặt 29

2.2 Phát hiện khuôn mặt sử dụng framework API của Android 30

Trang 8

2.3.1.Mô hình phát hiện khuôn mặt trên Android sử dụng framework API 352.3.2.Viết chương trình ứng dụng phát hiện khuôn mặt trên Android 39

CHƯƠNG 3 KẾT QUẢ ĐẠT ĐƯỢC 47

3.1 Kết quả phát hiện khuôn mặt sử dụng framework API của Android 473.2 Khó khăn và hướng giải quyết 48

KẾT LUẬN 49

TÀI LIỆU THAM KHẢO 50

Trang 9

Danh sách hình vẽ

Hình 1 Qúa trình thực thi ứng dụng Java và ứng dụng Android 1

Hình 2.Qúa trình biến đổi file mã Java thành file (.dex) 2

Hình 3.Kiến trúc Android 2

Hình 4.Android Emulator 5

Hình 5.Các ứng dụng Android trong API Demos 7

Hình 6.Vai trò của JNI 9

Hình 7.Mô hình xây dựng và chạy code JNI 9

Hình 8.Mô hình porting OpenCV vào Android 10

Hình 9.Qúa trình porting OpenCV vào Android 11

Hình 10.Ngăn xếp Activity 12

Hình 11.Chu kỳ sống của Activity 13

Hình 12.Chu kỳ sống của Service 16

Hình 13.Truyền thông giữa hai tiến trình 16

Hình 14.Broadcast receiver 16

Hình 15.Content Provider 17

Hình 16.Ứng dụng Contacts sử dụng Contacts Provider để lấy dữ liệu 17

Hình 17.Intent 18

Hình 18.Qúa trình tạo file APK 19

Hình 19.Quá trình truy cập mã gốc qua JNI 20

Hình 20.Demo ứng dụng Hello World dùng Android NDK 25

Hình 21.Các đặc trưng Haar-like cơ bản 26

Hình 22.Các đặc trưng Haar-like mở rộng 26

Hình 23.Cách tính Integral Image 27

Hình 24.Ví dụ cách tính nhanh các giá trị mức xám 27

Hình 25.Mô hình cascade kết hợp với các bộ phân loại yếu 28

Trang 10

Hình 26.Kết hợp các bộ phân loại yếu thành bộ phân loại mạnh 29

Hình 27 Hệ thống phát hiện khuôn mặt 29

Hình 28.Các gói Android cung cấp trong framework API 35

Hình 29.Mô hình phát hiện khuôn mặt trên Androi 35

Hình 30.Các góc Euler- hệ tọa độ xyz (cố định), hệ tọa độ XYZ (quay) 36

Hình 31.Các thành phần trong một Android Project 39

Hình 32 Các tệp trong thư mục bin của Android Project 45

Hình 33.Hình ảnh gốc ban đầu 47

Hình 34.Kết quả phát hiện khuôn mặt trên Android 47

Trang 11

THUẬT NGỮ VIẾT TẮT SỬ DỤNG TRONG BÀI

ADB Android Debug Bridge

ADT Android Development Tools

AVD Android Virtual Devices

API Application Programming Interface BSD Berkeley Software Distribution

DVM Dalvik Virtual Machine

GPS Global Positioning System

JNI Java Native Interface

JVM Java Virtual Machine

NDK Native Development Kit

OS Operating System

OpenCV OpenSource Computer Vision

SDK Software Development Kit

UI User Interface

VM Virtual Machine

Trang 12

LỜI MỞ ĐẦU

Android là một hệ điều hành cho điện thoại di động do Google phát triển dựa trênnền tảng Linux 2.6 Android đang từng bước thống trị thị trường di động nhờ vàonhững ưu điểm vượt trội của nó Không như iPhone của Apple người dùng dường như

bị cột chặt với những gì hãng này cho phép thì Android được kế thừa tính mở từ Linuxhay nói cụ thể hơn là Google và Android mang đến một thế giới hoàn toàn mở Ngườidùng được tự do với những gì họ muốn và các nhà phát triển có được sự tự do hơn đểtạo ra các ứng dụng Ngoài ra với Android người tiêu dùng có thể có nhiều sự lựachọn Chẳng hạn như hãng LG tung ra trên thị trường 20 sản phẩm chạy nền Androidnăm 2010 Bên cạnh các tính năng đó thì Android sẽ từng bước thống trị thị trường diđộng nhờ vào ưu điểm hướng đến người dùng và với thương hiệu của Google đứngsau lưng nó Đây là một thương hiệu đáng giá

Hiện nay Android không chỉ được dùng cho điện thoại di động mà còn được cácnhà sản xuất điện tử trên thế giới sử dụng Android như là một nền tảng cho các sảnphẩm nhúng, ví dụ như nhà thông minh, hệ thống thông tin giải trí ô tô, … Ngoài ratrong tương lai Google sẽ sớm tung ra một hệ điều hành cho tivi, đầu thu kỹ thuật số(set-top-box)

Trong khóa luận này tôi sẽ trình bày tổng quan về hệ điều hành Android và trìnhbày hai hướng để phát triển ứng dụng phát hiện khuôn mặt trên Android đó là sử dụngOpenCV và framework API của Android OpenCV là một thư viện hỗ trợ mạnh cho

xử lý ảnh do Intel phát triển bao gồm các hàm được viết bằng ngôn ngữ C và C++trong đó có hỗ trợ phát hiện khuôn mặt Thuật toán phát hiện khuôn mặt của Viola –Jones được đưa vào OpenCV vì với tốc độ gấp 15 lần so với các thuật toán hiện tại [7].Hướng thứ hai tôi sẽ trình bày trong khóa luận để xây dựng một ứng dụng phát hiệnkhuôn mặt với framework API của Android API là giao diện lập trình ứng dụng, viếttắt của Application Programming Interface Nền tảng Android cung cấp mộtframework API mà các ứng dụng có thể tương tác với hệ thống Android FrameworkAPI bao gồm một lõi thiết lập các gói và các lớp Trong ứng dụng phát hiện khuôn mặttôi sử dụng lớp FaceDetector trong gói android.media của framework API do Androidcung cấp để xây dựng ứng dụng Với hướng thứ hai này chỉ cần kỹ năng lập trình Javatốt là có thể xây dựng được ứng dụng

Nội dung của khóa luận gồm 3 chương:

Trang 13

Chương 1: Trình bày tổng quan về hệ điều hành Android, kiến trúc Android,

Android SDK, Android NDK, porting OpenCV vào Android và quy trình xây dựng vàthực thi một ứng dụng Android Bản chất của việc Porting OpenCV vào Android làthêm một thư viện chia sẻ vào tầng thư viện của Android để từ đó có thể dùng thư việnnày để phát triển nhiều ứng dụng khác không chỉ là phát hiện khuôn mặt Chẳng hạnnhư dùng OpenCV có thể phát triển thêm các ứng dụng phân tích chuyển động, nhậndạng khuôn mặt Chương này cũng đưa ra sự khác nhau giữa máy ảo Java và máy ảoDalvik Dalvik là máy ảo để thực thi các ứng dụng Android

Chương 2: Trình bày hai phương pháp phát hiện khuôn mặt trên Android sử

dụng OpenCV và framework API của Android trong tầng applications framework củakiến trúc Android Trong chương này tôi sẽ trình bày thuật toán của Viola – Jones sửdụng trong OpenCV và xây dựng chương trình phát hiện khuôn mặt với frameworkAPI của Android

Chương 3: Trình bày các kết quả đạt được và những khó khăn gặp phải từ đó

đưa ra hướng giải quyết khó khăn

Trang 14

CHƯƠNG 1 HỆ ĐIỀU HÀNH ANDROID

1.1.Android là gì?

Android là một ngăn xếp phần mềm cho các thiết bị di động bao gồm một hệđiều hành, middleware và các ứng dụng khóa được phát triển bởi Google Androidđược dựa trên nhân Linux 2.6 và các ứng dụng cho Android sử dụng ngôn ngữ lậptrình Java

Android là một hệ điều hành mã nguồn mở, các nhà phát triển có thể tạo ra cácứng dụng cho Android và bất kỳ ai cũng có thể lấy và sửa đổi theo ý thích Tuynhiên các thiết bị Android cũng chứa một số phần mềm độc quyền mà các nhà pháttriển không thể tiếp cận được những phần mềm này Ví dụ: hệ thống định vị toàncầu (GPS) Android cũng hỗ trợ nhiều tính năng như: Wi-fi, Bluetooth, các mạng3G và 4G, …

1.2.Máy ảo Dalvik

Dalvik là máy ảo để thực thi các ứng dụng Android Dalvik chạy các file ởđịnh dạng (.dex) Từ góc nhìn của một nhà phát triển Dalvik giống như máy ảo Javanhưng thực tế thì hoàn toàn khác Khi các nhà phát triển viết một ứng dụng Androidthì đều phải thực hiện các đoạn mã trong Java Sau đó các file mã Java sẽ được biêndịch sang mã bytecode Sau đó để thực thi được các ứng dụng Android thì ta phảidùng một công cụ tên là dx để chuyển đổi mã bytecode của Java sang một file cóđịnh dạng dex (dex là viết tắt của Dalvik excutable), đóng vai trò như cơ chế ảo đểthực thi các ứng dụng Android Hình 1 mô tả sự khác nhau giữa giữa quá trình thựcthi một ứng dụng Java và quá trình thực thi một ứng dụng Android:

Trang 15

Hình 1 Qúa trình thực thi ứng dụng Java và ứng dụng Android [4]

Hình 1 thể hiện hai sự khác biệt giữa máy ảo Java (JVM: Java VirtualMachine) và máy ảo Dalvik (DVM: Dalvik Virtual Machine) Sự khác biệt đầu tiên

là các mã bytecode mà JVM hoạt động là Java bytecode còn DVM hoạt động trênđịnh dạng đặc biệt của nó (định dạng dex) Sự khác biệt thứ hai là các lớp Javatrong chương trình Java SE được biên dịch vào một hay nhiều file (.class) và nénvào file(.jar), sau đó JVM có được các file bytecode từ các file (.class) và file (.jar).Mặc dù các ứng dụng Android cũng được biên dịch trong ngôn ngữ lập trình Javanhưng sau khi các ứng dụng này được biên dịch thành các file (.class) thì một công

cụ dx sẽ biến đổi tất cả các file (.class) thành file (.dex) Từ đó DVM đọc các chỉdẫn và dữ liệu Hình vẽ dưới đây thể hiện quá trình biến đổi đó:

Hình 2.Qúa trình biến đổi file mã Java thành file (.dex)

Trang 16

1.3.Kiến trúc Android

Hình 3.Kiến trúc Android [9]

Android là một ngăn xếp phần mềm, bao gồm các tầng như trên hình 3 Trong

đó các hàm thực thi các ứng dụng trong hai tầng Applications và Applicationsframework được viết bằng ngôn ngữ lập trình Java Còn các hàm thực thi các ứngdụng ở các tầng dưới: Libraries, Android runtime, Linux kernel được viết bằng mãgốc hay native code được viết bằng ngôn ngữ C/C++ Khi cần xây dựng một ứngdụng Android mà cần phải sử dụng một đoạn mã viết bằng C/C++ ở các tầng bêndưới thì ta sẽ sử dụng JNI (Java Native Interface) để giúp ứng dụng Android viếtbằng Java có thể truy cập được các hàm viết bằng C/C++ Ta sẽ nói rõ hơn về quátrình sử dụng JNI trong phần demo ứng dụng “Hello World” ở phần sau Dưới đây

ta sẽ tìm hiểu chức năng của từng tầng trong kiến trúc Android:

 Tầng Applications

Android được tích hợp sẵn một số ứng dụng cần thiết cơ bản như: calendar,maps, contacts, brower, camera, phone, … Tất cả các ứng dụng này đều được viếtbằng ngôn ngữ Java

 Tầng Applications framework

Trang 17

Bằng cách cung cấp một nền tảng phát triển mở Android cung cấp cho các nhàphát triển khả năng xây dựng các ứng dụng cực kỳ phong phú và sáng tạo Nhà pháttriển được tự do tận dụng các thiết bị phần cứng, thông tin địa điểm truy cập, cácdịch vụ chạy nền, thiết lập hệ thống báo động, và cộng thêm các cảnh báo đến cácthanh trạng thái, và nhiều hơn nữa.

Nhà phát triển có thể truy cập vào các API cùng một framework được xâydựng bởi các ứng dụng lõi Kiến trúc ứng dụng được thiết kế để đơn giản hóa việc

sử dụng lại các thành phần; bất kỳ ứng dụng nào cũng có thể công bố khả năng của

nó và bất kỳ ứng dụng nào khác cũng có thể sử dụng những khả năng này(có thể hạnchế bảo mật được thực thi bởi framework) Tất cả các ứng dụng cơ bản là một bộdịch vụ và các hệ thống, bao gồm:

 Một tập hợp phong phú và mở rộng các View có khả năng kế thừa lẫn nhaudùng để thiết kế phần giao diện ứng dụng như : gridview, tableview, linearlayout, …

 Trình cung cấp nội dung (Content Providers): Cho phép các ứng dụng có thểtruy xuất dữ liệu từ các ứng dụng khác (chẳng hạn như contacts) hoặc là chia sẻ dữliệu giữa các ứng dụng đó

 Quản lý tài nguyên (Resource Manager): Cung cấp truy xuất tới các tàinguyên không phải là mã nguồn, chẳng hạn như graphics, và các file layout

 Quản lý thông báo (Notification Manager): Cho phép tất cả các ứng dụnghiển thị các cảnh báo trong thanh trạng thái

 Quản lý hoạt động (Activity Manager): Quản lý chu trình sống của ứng dụng

và điều hướng các Activity

 Tầng Libraries

Android bao gồm một tập hợp các thư viện C/C++ được sử dụng bởi nhiềuthành phần khác nhau trong hệ thống Android Điều này được thể hiện thông quanền tảng ứng dụng Android Một số các thư viện cơ bản được liệt kê dưới đây:

System C library – Thực hiện triển khai BSD của thư viện hệ thống C chuẩn

(libc) và chỉnh cho các thiết bị nhúng dựa trên Linux BSD là giấy phép nguồn mở,cho phép mọi người sử dụng chương trình, mã nguồn của nó và các dẫn xuất

Media Libararies – Dựa trên PacketVideo’s OpenCORE; các thư viện hỗ trợ

phát và ghi âm với nhiều định dạng audio và video, cũng như đối với các file ảnhtĩnh bao gồm: MPEG4, H.264, MP3, AAC, ARM, JPG, và PNG

Trang 18

Surface Manager- Quản lý truy cập vào hệ thống hiển thị.

LibWebCore- Một công cụ trình duyệt web hiện đại.

SGL – Công cụ đồ họa 2D cơ sở.

3D libraries – Sự thực hiện dựa trên OpenGL ES 1.0 APIs.

Free Type- Biểu diễn font véc-tơ và bitmap.

QLite –Cơ sở dữ liệu.

Webkit – Thư viện cho việc biểu diễn HTML

 Tầng Android runtime

Tầng này bao gồm các thư viện lõi và máy ảo Dalvik Các thư viện lõi baogồm các thư viện lớp cơ bản nhất như: cấu trúc dữ liệu, mạng, các tiện ích, hệ thốngfile DVM được thiết kế để đạt được các chức năng quản lý chu kỳ sống của đốitượng, quản lý ngăn xếp, quản lý luồng, bảo mật, …DVM là lý tưởng để sử dụngvới yêu cầu về không gian bộ nhớ và CPU thấp so với các máy ảo chạy trên các máytính để bàn và hệ thống máy chủ Theo tính toán của Google thì cần 64M RAM chophép hệ thống hoạt động tốt, 24M RAM được sử dụng để khởi tạo và bắt đầu hệthống cơ bản, và 20M RAM được sử dụng cho các dịch vụ cấp cao

 Linux kernel

Android được xây dựng trên nhân Linux, nhưng Android không phải là Linux.Android dựa trên Linux phiên bản 2.6 cho các hệ thống dịch vụ cốt lõi như an ninh,quản lý bộ nhớ, quản lý quá trình, ngăn xếp mạng, và mô hình điều khiển Hạt nhâncũng hoạt động như một lớp trừu tượng giữa phần cứng và phần còn lại của ngănxếp phần mềm Linux kernel hỗ trợ các thư viện chia sẻ (shared libraries) và nó còn

là một mã nguồn mở

1.4.Android emulator

Android SDK và Plugin Eclipse được gọi là Android Development Tools(ADT) Trình giả lập Android ( Android Emulator) được tích hợp với Eclipse, sửdụng ADT plug-in cho Eclipse IDE Trình giả lập điện thoại Android hay còn gọi làAVD (Android Virtual Device) trên đó các ứng dụng có thể chạy và được thửnghiệm Một khi AVD được khởi chạy, có thể triển khai một số lượng ứng dụng bất

kỳ trong khi nó vẫn còn đang chạy và thậm chí có thể sử dụng nó để gỡ rối ứngdụng Hình dưới đây mô tả một trình giả lập Android:

Trang 19

Hình 4.Android Emulator

Các trình giả lập Android là một công cụ tiện lợi nhưng nó có một số hạn chế

đó là: các trình giả lập không phải là một thiết bị nói chung nó mô phỏng hành vicủa chiếc điện thoại, không hỗ trợ các chức năng nghe nhạc, quay phim, chụp ảnh,USB, Bluetooth, …

1.5 Android SDK

Android SDK cung cấp nhiều tập tin và các công cụ đặc biệt nhằm mục đíchgiúp cho việc thiết kế và phát triển các ứng dụng chạy trên nền tảng Android.Android SDK cũng chứa các thư viện để buộc các ứng dụng vào trong các đặc tínhlõi của Android, chẳng hạn như những thư viện này được kết hợp với các chức năngcủa điện thoại di động (thực hiện và nhận cuộc gọi), các chức năng GPS, và nhắn tinvăn bản Những thư viện này tạo nên lõi của SDK và sẽ được sử dụng thườngxuyên nhất

Phần lớn Android SDK bao gồm các tập tin, tài liệu, với lập trình API, cáccông cụ, và các ví dụ Trong Android SDK có một vài tập tin trong thư mục gốcgiống như android.jar (một ứng dụng Java được biên dịch có chứa các thư viện lõiSDK và API), một số ghi chú, phần còn lại của Android SDK được chia thành bathư mục chính:

 Docs: Chứa tất cả các tài liệu đi kèm với Android

Trang 20

 Samples: Bao gồm các ví dụ, có thể được biên dịch và kiểm tra bên trongcủa Eclipse.

 Tools: Chứa tất cả các công cụ gỡ lỗi, biên dịch, và phát triển mà ta cầntrong suốt quá trình phát triển một ứng dụng Android

Trong mục Samples của Android SDK có chứa 6 ví dụ mẫu cho ứng dụngAndroid Những ví dụ này cung cấp bởi Google để cung cấp cho ta một ý tưởngnhanh chóng về làm cách nào để phát triển một ứng dụng Android Mỗi ứng dụngmẫu thể hiện mỗi phần khác nhau về chức năng của Android Chúng ta có thể mở

và chạy các ứng dụng này từ bên trong của Eclipse

Ứng dụng API Demos là một ứng dụng chủ (host application) mô tả nhiều hàmAPI trong một Activity đơn lẻ Một Activity là một ứng dụng Android Ứng dụngAPI Demos như chỉ ra hình dưới bao gồm nhiều ví dụ khác nhau về chức năng củaAndroid:

Hình 5.Các ứng dụng Android trong API Demos

Giao diện lập trình ứng dụng API (Application Programming Interface) làphần lõi của Android SDK API là tập hợp các hàm, phương thức, đặc tính, lớp vàcác thư viện được sử dụng bởi các nhà phát triển ứng dụng để tạo ra các chươngtrình làm việc trên nền tảng cụ thể Các Android API chứa tất cả các thông tin cụ thể

mà ta cần để tạo ra ứng dụng có thể làm việc và tương tác với một ứng dụng trênnền Android Android SDK cũng chứa hai bộ APIs bổ sung là Google APIs vàOptional APIs:

Trang 21

 Google APIs

Nằm trong tập tin android.jar, các API của Google được chứa trong góicom.google.* Có một vài gói đi kèm với các API của Google Một số gói được vậnchuyển trong các API của Google bao gồm các gói cho đồ họa, tính khả chuyển, địachỉ liên hệ và các tiện ích về lịch Chẳng hạn như với gói cho Google Maps Sửdụng gói com.google.android.maps Trong gói này có chứa các thông tin cho bản đồGoogle (Google Maps) ta có thể tạo các ứng dụng tương tác liên tục với giao diệnquen thuộc của Google Maps

1.6.Android NDK

Như tôi đã đề cập trong phần kiến trúc của Android Khi ta viết một ứng dụngcho Android sử dụng ngôn ngữ lập trình Java mà cần phải sử dụng một đoạn mã nào

đó ở các tầng bên dưới (chẳng hạn tầng Libraries) viết bằng các ngôn ngữ C/C++

Để Java có thể truy cập được các hàm C/C++ thì ta cần một giao diện để chúng cóthể tương tác với nhau Giao diện đó là JNI (Java Native Interface)

Android NDK là một công cụ đồng hành với Android SDK cho phép xây dựngcác phần quan trọng thực hiện các ứng dụng trong mã gốc (native code) Nó cungcấp các headers và các thư viện cho phép xây dựng các activities khi lập trình bằng

C hoặc C++ Nếu ta viết mã máy, các ứng dụng vẫn được đóng gói vào một file apk

và chúng vẫn chạy bên trong máy ảo trên thiết bị Sử dụng mã gốc không dẫn đếntăng hiệu suất tự động, nhưng luôn luôn tăng độ phức tạp ứng dụng

Android NDK là một bộ công cụ cho phép nhúng các thành phần sử dụng mãgốc trong các ứng dụng Android Các ứng dụng Android chạy trong máy ảo Dalvik.NDK (Native Development Kit) cho phép thực hiện các phần của ứng dụng sử dụng

mã gốc chẳng hạn như C và C++ Android NDK cung cấp một chuỗi các công cụ

Trang 22

và các file xây dựng để tạo các thư viện mã gốc từ các nguồn C và C++; AndroidNDK là một cách để gói các thư viện vào trong file APK (file APK là file sẽ đượcphát hành trên Android cho việc thực thi ứng dụng); Android NDK bao gồm mộtchuỗi các header của hệ thống được hỗ trợ trong các phiên bản của nền tảngAndroid (ví dụ: libc, JNI headers, C++ headers, OpenGL, …); Android NDK baogồm một số tài liệu, mã đơn giản và một số các ví dụ.

Android NDK hỗ trợ JNI giúp các nhà phát triển ứng dụng xây dựng các ứngdụng có sử dụng các đoạn mã gốc của tầng bên dưới Điều này là quan trọng vìtrong một hệ thống nhúng bao gồm các tầng tạo nên một ngăn xếp phần mềm Khi tacần xây dựng một ứng dụng thuộc tầng trên cần kế thừa một số hàm viết bằng mãgốc thuộc tầng bên dưới (có thể là tầng lõi liên quan đến phần cứng) thì JNI đóngvai trò quan trọng

JNI là một tính năng mạnh của nền tảng Java cho phép các nhà lập trình tậndụng được sức mạnh của nền tảng Java (một chương trình viết bằng ngôn ngữ Java

có thể chạy được trên nhiều hệ điều hành “viết một lần chạy mọi nơi”) JNI là mộtgiao diện hai chiều cho phép các ứng dụng Java gọi mã gốc và ngược lại Hình dướiđây mô tả vai trò của JNI:

Hình 6.Vai trò của JNI [7]

Ta có thể sử dụng JNI để viết các phương thức gốc (native methods) cho phépcác ứng dụng Java gọi các hàm được thực thi trong các thư viện gốc Các ứng dụngJava gọi các phương thức gốc trong cùng một cách Dưới đây là mô hình xây dựng

và chạy code JNI:

Trang 23

Hình 7.Mô hình xây dựng và chạy code JNI [7]

Hoạt động của mô hình trên như sau: Đầu tiên ta viết mã nguồn Java (JavaSource) sau đó sử dụng trình biên dịch javac để biên dịch các file mã nguồn nàythành file ở định dạng (.class) Trong file mã nguồn Java ta sẽ thực hiện các côngviệc là viết lệnh gọi thư viện động mà ta sẽ tạo ở phần sau (Dynamic Library) vàđịnh nghĩa hay khai báo các phương thức thực hiện các hàm native code mà ta sẽviết ở sau, và mã nguồn Java này cũng là nơi để khởi tạo các phương thức

Tiếp theo ta sẽ tạo ra các header file bằng cách dùng lệnh với javah –jni Saukhi tạo ra các header file thì ta sẽ viết mã C thực thi các hàm và các phương thức màđược khai báo trong mã nguồn Java Tiếp theo để tạo ra thư viện động ta cần phảibiên dịch mã C vừa viết ở trên Để link được thư viện này tới mã nguồn Java thìtrong mã nguồn Java ta viết lệnh gọi thư viện này Sau tất cả các bước trên thìchương trình được thực thi trên máy ảo Java

1.7 Porting OpenCV vào Android

Để phát triển ứng dụng Android với OpenCV thì đầu tiên ta cần porting đượcthư viện này vào trong kiến trúc của Android OpenCV (Open Computer Visionlibrary) do Intel phát triển Thư viện OpenCV gồm khoảng 500 hàm được viết bằngngôn ngữ lập trình C và C++ OpenCV là công cụ mã nguồn mở thích hợp chonghiên cứu và phát triển Để porting OpenCV vào Android ta sử dụng AndroidNDK Dưới đây là mô hình porting OpenCV:

Trang 24

Hình 8.Mô hình porting OpenCV vào Android

Tổ chức thư viện OpenCV bao gồm 4 module chính và 2 module mở rộng Cácmodule CV và CVAUX hỗ trợ các chức năng cấp cao (nhận dạng khuôn mặt, hiệuchỉnh camera), xử lý ảnh, phân tích chuyển động Module CxCore tổ chức dữ liệu

cơ sở, thực hiện các thuật toán (phép tính ma trận, tính toán) Module HighGuidgiúp tạo nhanh giao diện và hỗ trợ truy xuất ảnh/phim từ file hoặc thiết bị ngoại vi

Để porting thì đầu tiên ta tải thư viện OpenCV về và giải nén Sau đó dùngAndroid NDK để porting Trong eclipse ta sẽ tạo một project cho việc thực thiporting Sau đó tạo một file tên là jni trong project File jni này sẽ chứa hai file làApplication.mk và Android.mk File Android.mk bao gồm các module là các thưviện của OpenCV cần porting vào trong Android với đường dẫn đúng Sau đó dùnglệnh ndk-build trên Ubuntu để biên dịch thư viện OpenCV cho kiến trúc Arm củaAndroid Chú ý để sử dụng được lệnh ndk-build ta cần phải tải android NDK về vàlink đến đúng thư mục chứa android NDK đã được giải nén Sau khi porting thì ta

sẽ được một thư viện chia sẻ tên là libOpenCV.so và nằm trong thư mụclibs/armeabi Thư viện chia sẻ này sẽ nằm trong tầng Libraries trong kiến trúcAndroid Hình dưới đây mô tả quá trình porting OpenCV cho kiến trúc Arm củaAndroid

Trang 25

Hình 9.Qúa trình porting OpenCV vào Android

1.8 Các thành phần tạo nên một ứng dụng Android

Các ứng dụng Android sẽ được xây dựng từ các thành phần cơ bản đó là:Activity, Service, Broadcast receiver, Content Provider và Intent

Activity

Activity là một thành phần ứng dụng cung cấp một màn hình mà người dùng

có thể tương tác để làm một cái gì đó Chẳng hạn như: quay số điện thoại, chụp ảnh,gửi email hoặc xem một bản đồ Một Activity có thể bắt đầu từ các Activity khác.Bên trong hệ thống các Activity được quản lý như một ngăn xếp Khi một Activitymới được bắt đầu thì nó được đặt ở đỉnh của ngăn xếp và trở trành Activity đangchạy Activity trước sẽ ở bên dưới Activity mới và sẽ không thấy trong suốt quátrình Activity mới tồn tại Nếu người dùng nhấn nút Back thì Activity kế tiếp củangăn xếp sẽ di chuyển lên và trở thành active Hình dưới đây mô tả một ngăn xếpcác Activity:

Trang 26

Hình 10.Ngăn xếp Activity

Mỗi tiến trình chạy ứng dụng trên nền tảng Android được đặt trên một ngănxếp Khi sử dụng một Activity trên foreground thì tiến trình hệ thống sẽ đưaActivity đó lên trên cùng của ngăn xếp và tiến trình trước đó sẽ được chuyển xuốngmức dưới Tất cả các Activity đều có khả năng bị dừng lại hoặc bị phá hủy bất cứlúc nào bởi vì người sử dụng có thể thay đổi các Activity tùy theo ý thích của họ.Chẳng hạn như: họ đang dùng Activity là một cuộc gọi và sau đó họ dừng cuộc gọi

và chuyển sang Activity khác là chụp ảnh, gửi email hay nhắn tin SMS Nếu tiếntrình Activity bị thoát ra khỏi foreground thì nó sẽ bị hủy Hình dưới đây mô tả chu

kỳ sống của Activity:

Trang 27

Hình 11.Chu kỳ sống của Activity [4]

Trạng thái Starting:

Khi một Activity không tồn tại trong bộ nhớ thì nó ở trạng thái starting Trongkhi Activity đang khởi động thì Activity sẽ đi qua một chuỗi các phương thứccallback Và cuối cùng Activity sẽ ở trạng thái running Lưu ý rằng quá trình chuyểnđổi từ trạng thái starting sang trạng thái running là một trong những các hoạt độngtốn kém nhất về thời gian tính toán, và nó cũng ảnh hưởng trực tiếp đến tuổi thọ củapin Đó là lý do tại sao ta không thể tự động hủy các Activity mà chúng không cònđược hiển thị

Trạng thái Running:

Activity ở trong trạng thái running (đang hoạt động) nghĩa là Activity đó đượchiển thị trên màn hình và tương tác với người dùng Người dùng có thể tương tácnhư gõ phím, chạm vào màn hình và nhấn các nút Tất cả các thao tác này được xử

lý bởi Activity này Như vậy tại một thời điểm nào đó thì chỉ có một Activity

Trạng thái Paused:

Khi một Activity không được focus( chẳng hạn như nó không được tương tácvới người sử dụng ) nhưng nó vẫn có thể được nhìn thấy ở trên màn hình Trongtrường hợp này ta nói Activity đang ở trạng thái tạm dừng (paused)

Trang 28

Trạng thái Stopped:

Khi một Activity không hiển thị nhưng vẫn còn ở trong bộ nhớ thì ta nói rằng

nó đang ở trạng thái dừng (Stopped) Các Activity ở trạng thái dừng này có thể được

đưa trở lại để trở thành một Activity đang chạy (running) hoặc nó cũng có thể bị phá

hủy và loại bỏ khỏi bộ nhớ Hệ thống vẫn giữ lại các Activity xung quanh trạng thái

stopped bởi vì có thể người dùng vẫn sẽ muốn quay trở lại các Activity trước đó và

muốn khởi động lại các Activity ở trạng thái dừng, do đó sẽ tiết kiệm được thời gian

khởi động vì ta sẽ không phải khởi động một Activity lại từ đầu Các Activity ở

trạng thái stopped có thể bị loại khỏi bộ nhớ bất cứ lúc nào

Trạng thái Destroyed:

Một Activity bị phá hủy thì nó không còn ở trong bộ nhớ Trình quản lý

Activity quyết định Activity này không còn cần thiết và do đó sẽ loại bỏ Activity đó

Trước khi Activity bị phá hủy thì nó có thể thực hiện các hành động nhất định, ví dụ

như bất kỳ một thông tin nào chưa được lưu thì nó sẽ lưu lại các thông tin đó Tuy

nhiên trước khi bị phá hủy thì Activity sẽ được ngừng lại (stopped)

Trong suốt chu kỳ sống của Activity thì mỗi Activity của một chương trình

Android sẽ tồn tại ở vài trạng thái khác nhau Lập trình viên không phải điều khiển

các trạng thái trong chương trình Tất cả hoạt động đó đều được xử lý bằng cách gọi

phương thức theo cấu trúc on_ten_trang_thai(), ví dụ như onStart(), onPause() Lập

trình viên sẽ phải ghi đè các phương thức này trong lớp Activity, và Android sẽ gọi

chúng ở thời điểm thích hợp:

onCreate(Bundle

tiên Ta có thể sử dụng nó để thực thi việc khởi tạo các thành phần khác như tạo

giao diện người dùng, kết nối dữ liệu đến danh sách Phương thức này có một tham

số, nó có thể là null hoặc là thông tin trạng thái trước đó được lưu bởi phương thức

onSaveInstanceState().

onStart: Phương thức này được gọi trước khi một Activity ẩn với người

dùng

onResume():

thời điểm này thì Activity ở trên đỉnh của ngăn xếp Activity

onPause(): Nó được gọi khi chuyển sang chế độ chạy nền, thường là khi có

một Activity khác được chạy trên nó Tại đây ta có thể lưu lại trạng thái cố định của

chương trình cũng như ghi lại thay đổi trong cơ sở dữ liệu

Trang 29

onStop(): Gọi khi Activity không còn xuất hiện với người dùng và nó sẽ

không cần tới nữa Nếu bộ nhớ không đủ, phương thức này sẽ không bao giờ được

Activity lưu lại trạng thái của nó Thường ta sẽ không cần ghi đè nó bởi vì quá trình

thực hiện để lưu lại trạng thái cho tất cả các giao diện người dùng được điều khiển

một cách tự động

onRestoreInstanceStat(Bundle)

trạng thái được lưu trước đó, được thực hiện bởi phương

thức:onSaveInstanceState(): Các Activity không chạy ở trên cùng có thể bị dừng lại

hoặc hệ thống sẽ hủy tiến trình Linux chứa Activity đó để tạo không gian cho các

Activity mới

Một Service là một thành phần ứng dụng có thể thực hiện các hoạt động lâu

dài trong nền (background) mà không có bất kỳ các thành phần giao diện người

dùng nào Chú ý là không được nhầm lẫn các dịch vụ của Android (một thành phần

của ứng dụng) với các thành phần cấp dưới của hệ điều hành như các dịch vụ Linux

nguồn (native Linux), các server Chu kỳ sống của Service đơn giản hơn rất nhiều so

với chu kỳ sống của Activity Hình 11 mô tả chu kỳ sống của một Service:

Hình 12.Chu kỳ sống của Service [4]

Trang 30

Khi một Service sử dụng IPC, AIDL (Android Interface DefinnitionLanguage) được sử dụng để tạo ra mã cho phép truyền thông giữa hai tiến trình quaIPC Hình dưới mô tả quá trình truyền thông giữa hai tiến trình:

Hình 13.Truyền thông giữa hai tiến trình

Broadcast receiver

Broadcast receiver là một thành phần thu nhận các Intent bên ngoài gửi tới Vídụ: ta cần viết một chương trình thay thế cho phần gọi điện mặc định của Androidkhi đó ta cần một broadcast receiver để nhận biết các Intent là các cuộc gọi tới

Hình 14.Broadcast receiver

Content Provider

Content Provider lưu trữ và lấy dữ liệu và nó có thể truy cập vào tất cả các ứngdụng Đây là cách duy nhất để chia sẻ dữ liệu giữa các ứng dụng Android với một

số Content Provider cho các loại dữ liệu( như video, âm thanh, hình ảnh, thông tin

liên lạc cá nhân, …) Các loại dữ liệu này được liệt kê trong gói android.provider.

Hình dưới mô tả chức năng của một Content Provider Ứng dụng có thể truy xuất vàchia sẻ dữ liệu với Database qua Content Provider với các phương thức insert(),update(), delete() và query()

Trang 31

Hình 15.Content Provider [4]

Hệ thống Android luôn luôn sử dụng cơ chế này Ví dụ, trình liên hệ (ContactsProvider) là một trình cung cấp nội dung (Conten Provider) Contacts Provider chothấy tất cả các dữ liệu liên hệ (contact data) người dùng đến nhiều ứng dụng Lưutrữ truyền thông (Media Store) sẽ chịu trách nhiệm lưu trữ và chia sẻ các phươngtiện truyền thông khác nhau, ví dụ như hình ảnh và âm nhạc trên các ứng dụng khácnhau Hình 14 minh họa cách sử dụng các ứng dụng liên hệ (Contacts app) sử dụngContacts Provider Một ứng dụng là hoàn toàn riêng biệt để lấy dữ liệu về các liên

Trang 32

Một ứng dụng Android thường bao gồm nhiều Activity, mỗi Activity hoạtđộng độc lập với nhau và thực hiện những công việc khác nhau Intent chính là cầunối giữa các Activity, là người đưa thư giúp ta triệu gọi và truyền các dữ liệu cầnthiết để thực hiện một Activity từ một Activity khác Hình 15 cho thấy Intent có thểđược sử dụng để “nhảy” giữa các Activity khác nhau ở trong cùng một ứng dụnghoặc trong các ứng dụng khác nhau.

Hình 17.Intent [4]

1.9 Phát triển ứng dụng Android và DVM

Như tôi đã đề cập ở trên thì file APK là file sẽ được phát hành trên Androidcho việc thực thi các ứng dụng Android DVM hay Dalvik Virtual Machine là máy

ảo để thực thi các ứng dụng Hình dưới đây mô tả quá trình tạo ra một file APK:

Hình 18.Qúa trình tạo file APK

Ngày đăng: 21/06/2014, 09:09

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Android TM A Programmer’s Guide, J.F. DiMarzio, Pulisher: McGraw-Hill Proesional, 2008 Sách, tạp chí
Tiêu đề: J.F. DiMarzio
[2] Harvey M. Deitel, Paul J.Deitel, Java How to Program (4 th Edition), Publisher: Prentice Hall PRT Upper Saddle River, NJ, USA, 2001 Sách, tạp chí
Tiêu đề: Java How to Program (4"th" Edition)
[3] James Steele Nelson To, The Android Developer’s Cookbook Building Applications with the Android SDK, Publisher: Add ison-Wes ley, 2010 Sách, tạp chí
Tiêu đề: The Android Developer’s Cookbook Building Applications with the Android SDK
[4] Marko Gargenta, Learning Android, Publisher: O’Reilly Media, 1 edition, 2010 Sách, tạp chí
Tiêu đề: earning Android
[5] Robin Hewitt, Seeing with OpenCV, Servo magazine, January 2007, Inc Sách, tạp chí
Tiêu đề: Seeing with OpenCV
[6] Rainer Lienhart and Jochen Maydt, “An extended set of Haar- like features for Rapid Object Detection”, Intel Labs, Intel Corporation, Santa Clara, CA 95052, USA Sách, tạp chí
Tiêu đề: An extended set of Haar- like features for Rapid Object Detection
[7] Sheng Liang, The Java TM Native Interface, Programmer’s Guide and Specification, Publisher: Prentice Hall PRT, 1 st edition, 1999 Sách, tạp chí
Tiêu đề: The Java"TM" Native Interface, Programmer’s Guide and Specification
[8] Viola–Jones, “Rapid Object Detection using a Boosted Cascade of Simple Features”, Accepted conference on Computer Vision and pattern recognition 2001 Sách, tạp chí
Tiêu đề: Rapid Object Detection using a Boosted Cascade of Simple Features”
[9] Viola–Jones, “Robust Real-time Object Detection”, Second international workshop on statistical and computational theories of vision – modeling, learning, computing, and sampling, Vancouver, Canada, July 13, 2001 Sách, tạp chí
Tiêu đề: Robust Real-time Object Detection
[10] W. Frank Ableson, Charilie Collins, Robi Sen, Unlocking Android, Publisher: Manning Publications, 2009 Sách, tạp chí
Tiêu đề: Unlocking Android

HÌNH ẢNH LIÊN QUAN

Hình 1. Qúa trình thực thi ứng dụng Java và ứng dụng Android [4] - hệ điều hành android và thực thi ứng dụng phát hiện khuôn mặt trên android
Hình 1. Qúa trình thực thi ứng dụng Java và ứng dụng Android [4] (Trang 15)
Hình   1   thể   hiện   hai   sự   khác   biệt   giữa   máy   ảo   Java   (JVM:   Java   Virtual  Machine) và máy ảo Dalvik (DVM: Dalvik Virtual Machine) - hệ điều hành android và thực thi ứng dụng phát hiện khuôn mặt trên android
nh 1 thể hiện hai sự khác biệt giữa máy ảo Java (JVM: Java Virtual Machine) và máy ảo Dalvik (DVM: Dalvik Virtual Machine) (Trang 15)
Hình 3.Kiến trúc Android [9] - hệ điều hành android và thực thi ứng dụng phát hiện khuôn mặt trên android
Hình 3. Kiến trúc Android [9] (Trang 16)
Hình 4.Android Emulator - hệ điều hành android và thực thi ứng dụng phát hiện khuôn mặt trên android
Hình 4. Android Emulator (Trang 19)
Hình 5.Các ứng dụng  Android trong API Demos - hệ điều hành android và thực thi ứng dụng phát hiện khuôn mặt trên android
Hình 5. Các ứng dụng Android trong API Demos (Trang 20)
Hình 6.Vai trò của JNI [7] - hệ điều hành android và thực thi ứng dụng phát hiện khuôn mặt trên android
Hình 6. Vai trò của JNI [7] (Trang 22)
Hình 7.Mô hình xây dựng và chạy code JNI [7] - hệ điều hành android và thực thi ứng dụng phát hiện khuôn mặt trên android
Hình 7. Mô hình xây dựng và chạy code JNI [7] (Trang 23)
Hình 8.Mô hình porting OpenCV vào Android - hệ điều hành android và thực thi ứng dụng phát hiện khuôn mặt trên android
Hình 8. Mô hình porting OpenCV vào Android (Trang 24)
Hình 9.Qúa trình porting OpenCV vào Android - hệ điều hành android và thực thi ứng dụng phát hiện khuôn mặt trên android
Hình 9. Qúa trình porting OpenCV vào Android (Trang 25)
Hình 10.Ngăn xếp Activity - hệ điều hành android và thực thi ứng dụng phát hiện khuôn mặt trên android
Hình 10. Ngăn xếp Activity (Trang 26)
Hình 11.Chu kỳ sống của Activity [4] - hệ điều hành android và thực thi ứng dụng phát hiện khuôn mặt trên android
Hình 11. Chu kỳ sống của Activity [4] (Trang 27)
Hình 12.Chu kỳ sống của Service [4] - hệ điều hành android và thực thi ứng dụng phát hiện khuôn mặt trên android
Hình 12. Chu kỳ sống của Service [4] (Trang 30)
Hình 14.Broadcast receiver - hệ điều hành android và thực thi ứng dụng phát hiện khuôn mặt trên android
Hình 14. Broadcast receiver (Trang 30)
Hình 13.Truyền thông giữa hai tiến trình - hệ điều hành android và thực thi ứng dụng phát hiện khuôn mặt trên android
Hình 13. Truyền thông giữa hai tiến trình (Trang 30)
Hình 15.Content Provider [4] - hệ điều hành android và thực thi ứng dụng phát hiện khuôn mặt trên android
Hình 15. Content Provider [4] (Trang 31)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w