Sơ lược lịch sử công nghệ Android Android là một hệ điều hành mở phát triển dựa trên nền tảng Linux dành cho các Thiết bị di động cảm ứng.. Các nhà phát triển có thể sử dụng tất cả tính
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
TÓM TẮT LUẬN VĂN THẠC SĨ
HÀ NỘI - 2013
Trang 2HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
Người hướng dẫn khoa học: TS Nguyễn Khanh Văn
Phản biện 1: ………
Phản biện 2: ………
Luận văn sẽ được bảo vệ trước Hội đồng chấm luận văn thạc sĩ tại Học viện Công nghệ Bưu chính Viễn thông
Vào lúc: giờ ngày tháng năm
Có thể tìm hiểu luận văn tại:
- Thư viện của Học viện Công nghệ Bưu chính Viễn thông
Trang 3MỞ ĐẦU
Ngày nay, điện thoại di động được áp dụng các công nghệ cao và hiện đại phát triển một cách mạnh mẽ, tăng trưởng một cách không ngừng Điện thoại di động trở thành một nhu cầu thiết yếu cho con người Điện thoại di động có tính tiện lợi cao, có thể sử dụng mọi lúc mọi nơi Điện thoại di động càng ngày càng "thông minh" với nhiều chức năng và dịch
vụ rất hấp dẫn đã được tích hợp rất nhiều tiện ích để đáp ứng cho con người trọng mọi lĩnh vực Trong số các công nghệ dành cho các loại điện thoại di động thì công nghệ Android là một công nghệ mạnh mẽ, được ứng dụng phát triển rộng rãi và chọn làm nền tảng phát triển
di động cho nhiều hãng di động khác nhau Android là hệ điều hành trên điện thoại di động (và hiện nay là cả trên một số đầu phát HD, HD Player, TV) phát triển bởi Google và dựa trên nền tảng Linux
Các ứng dụng và dịch vụ dành cho điện thoại di động liên tục phát triển và gia tăng không ngừng Do sự dư thừa thông tin và quảng cáo, người sử dụng có thể gặp khó khăn khi phải chọn lựa, sàng lọc ra thông tin tốt, hợp lý nhất phục vụ cho công việc hoặc sự giải trí của mình Để hỗ trợ người sử dụng một cách tốt nhất cần có phần mềm thu thập thu thập tất
cả các hành vi và thói quen của người sử dụng trên các ứng dụng, dịch vụ dành cho điện thoại di động Sau khi thu thập tất cả các hành vi và thói quen của người sử dụng trong các khoảng thời gian định kì sẽ tiến hành phân tích các hành vi, thói quen người sử dụng mục đích để nắm bắt nhu cầu sử dụng, sở thích, thói quen của người sử dụng để chúng ta có thể tạo ra các sản phẩm, các dịch vụ, phục vụ cho người sử dụng tốt hơn nữa Đồng thời phần mềm cũng hỗ trợ đưa ra những gợi ý tư vấn cho sự lựa chọn các ứng dụng và dịch vụ phù
hợp nhất cho người sử dụng Đây chính là những lý do để tôi chọn đề tài “Thu thập, phân tích hành vi và thói quen người sử dụng thiết bị di động Android” Nội dung của luận
văn nghiên cứu, và phát triển được trình bày thông qua bốn chương:
người sử dụng thiết bị di động Android
dụng thiết bị di động Andriod
Trang 4CHƯƠNG 1 NỀN TẢNG CÔNG NGHỆ ANDROID CHO THIẾT
BỊ DI ĐỘNG
1.1 Tổng quan công nghệ Android
1.1.1 Sơ lược lịch sử công nghệ Android
Android là một hệ điều hành mở phát triển dựa trên nền tảng Linux dành cho các Thiết bị di động cảm ứng Công nghệ Android đầu tiên được nghiên cứu bởi tổng công ty Android với sự hỗ trợ đầu tư của Google Ngày 17 tháng 8 năm 2005, Google mua lại tổng công ty Android biến nó thành một bộ phận trực thuộc của mình Ngày 5 tháng 11 năm
2007, Một hiệp hội các công ty lớn trên thế giới về viễn thông, phần cứng, phần mềm cho thiết bị di động thành lập ra Liên minh thiết bị cầm tay mở (Open Handset Alliance) với mục đích phát triển các tiêu chuẩn mở cho di động Cùng ngày này, google cũng ra mắt sản phẩm đầu tiên là một nền tảng thiết bị di động được xây dựng trên nhân Linux 2.6
Hình 1.1: Các thành viên của “Liên minh di động mở”
(Nguồn: Bài báo “Lịch sử hệ điều hành Android - Trần Quỳnh Hương” [1])
Ngày 22 tháng 10 năm 2008 Chiếc điện thoại Android đầu tiên HTC Dream được bán ra Từ năm 2008, Hệ điều hành Android đã trải qua nhiều lần cập nhật, sửa các lỗi, bổ xung thêm tính năng mới Mỗi phiên bản đều được đặt tên lần lượt theo thứ tự bảng chữ cái
theo tên các món ăn tráng miệng: phiên bản 1.5 cupcate, phiên bản 4.2 Jelly Bean
Trang 51.2 Khái niệm Android
Android là hệ điều hành mở được Google phát triển dành cho thiết bị di động Các nhà phát triển có thể sử dụng tất cả tính năng của hệ điều hành Android để tạo ra các ứng dụng di động Android được xây dựng trên nhân Linux mở Hơn nữa, nó sử dụng một máy
ảo tuỳ chỉnh được thiết kế để tối ưu hóa bộ nhớ và tài nguyên phần cứng trong một môi trường di động Để phục vụ cho việc phát triển và sáng tạo các ứng dụng và dịch vụ Google
đã đưa ra bộ công cụ Android SDK cung cấp các công cụ và bộ thư viện các hàm API cần thiết để phát triển ứng dụng cho nền tảng Android sử dụng ngôn ngữ lập trình java
1.2.1 Kiến trúc Android
Mô hình kiến trúc sau thể hiện các thành phần của hệ điều hành Android:
Hình 1.2: Mô hình kiến trúc nền tảng Android
(Nguồn: Bài báo “Lịch sử hệ điều hành Android - Trần Quỳnh Hương” [1])
- Applications: Tầng này tích hợp sẵn một số ứng dụng cơ bản cần thiết dành cho
thiết bị di động như danh bạ điện thoại, gọi điện thoại, Tin nhắn SMS, trình duyệt web và một số ứng dụng khác Người sử dụng có thể tích hợp các ứng dụng của hãng thứ 3 viết bằng ngôn ngữ java vào tầng này
Trang 6- Application Framwork: Tầng này của hệ điều hành Android cung cấp một nền tảng
phát triển ứng dụng mở qua đó cho phép nhà phát triển ứng dụng có khả năng tạo ra các ứng dụng vô cùng sáng tạo và phong phú
- Libraries: là lớp chứa các thư viện native Android Các thư viện chia sẻ tất cả được
viết bằng C, C + +, mục đích biên dịch cho các kiến trúc phần cứng đặc biệt được sử
dụng cho điện điện thoại
- Android Runtime: Android bao gồm một tập hợp các thư viện lõi cung cấp hầu hết
các chức năng có sẵn trong các thư viện lõi của ngôn ngữ lập trình Java Tất cả các ứng dụng Android sẽ có một thể hiện riêng trên máy ảo Dalvik Máy ảo Dalvik đã được viết để một thiết bị có thể chạy nhiều máy ảo cùng lúc có hiệu quả và nó thực thi các file có định dạng ( dex) mục đích tối ưu hóa cho bộ nhớ và sử dụng tối thiểu
bộ nhớ
- Linux Kernel: Android dựa trên Linux phiên bản 2.6 cho hệ thống cốt lõi dịch vụ
như an ninh, quản lý bộ nhớ, quản lý tiến trình, Network stack, Driver model Kernel cũng hoạt động như một tầng trừu tượng giữa phần cứng và phần còn lại của ngăn xếp phần mềm
1.2.2 Phát triển ứng dụng trên Android
1.2.2.1 Ngôn ngữ lập trình
Để phát triển các ứng dụng một cách đơn giản và dễ tiếp cận, Google đã sử dụng ngôn ngữ java làm ngôn ngữ lập trình chính thức của Android Ngôn ngữ lập trình java cho android là ngôn ngữ được cải tiến, tinh chỉnh cho phù hợp nền tảng Android Ứng dụng java
là ứng dụng “Viết một lần, chạy mọi nơi” nên cần phải có môi trường máy ảo để chạy ứng dụng Google đã tinh chỉnh, cải tiến từ máy ảo JDK để phát triển thành máy ảo Dalvik của
hệ điều hành Android mục đích để biên dịch mã Java với tốc độ biên dịch nhanh hơn và nhẹ hơn
1.2.2.2 Môi trường lập trình cho Android
Google cung cấp công cụ phát triển ứng dụng Android SDK, là một công cụ giả lập thiết bị ảo Android hỗ trợ để test và debug các lỗi của ứng dụng Android Môi trường lập trình (IDE) chính thức của Android là Eclipse (từ phiên bản 3.2) với sự hỗ trợ của plugin
Trang 7Android Development Tools (ADT) Ứng dụng Android được đóng gói thành các file apk
và đuợc lưu trong thư mục /data/app của hệ điều hành Android
1.3 Các thành phần cơ bản của ứng dụng Android
1.3.1 Activity
Một 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 điều gì đó, chẳng hạn như quay số điện thoại, chụp ảnh, gửi email, hoặc xem bản đồ Mỗi Activity được đưa ra một cửa sổ trong đó vẽ ra giao diện người dùng của nó Cửa sổ thường lấp đầy màn hình, nhưng nó có thể là nhỏ hơn so với màn hình và hiển thị lên trên các cửa sổ khác
1.3.1.1 Vòng đời của một Activity
Một Activity có 4 trạng thái:
- Active hay Running: Khi một Activity đang chạy trên màn hình [5]
- Paused: Khi một Activity vẫn đang chạy trên màn hình nhưng đang bị một Activity
trong suốt (transparent) hay nó bị chiếm toàn màn hình hiển thị phía trên Tuy vẫn
lưu trữ dữ liệu, nhưng các paused Activity này sẽ bị hệ thống bắt chấm dứt khi đang
thiếu bộ nhớ trầm trọng [5]
- Stopped: Khi một Activity bị che khuất hoàn toàn bởi một Activity khác (Activity
này đang ở chế độ background) Ở trạng thái Stoped, Activity vẫn tồn tại có nghĩa đối tượng Activity vẫn giữ lại trọng bộ nhớ, duy trì trạng thái và thông tin thành viên
của nó Tuy nhiên các stopped Activity này sẽ thường xuyên bị hệ thống bắt chấm dứt
giải phóng bộ nhớ để cấp bộ nhớ cho các tiến trình khác [5]
- Killed hay Shut down: Khi một Activity đang paused hay stopped, hệ thống sẽ xóa
Activity ấy ra khỏi bộ nhớ Nhà phát triển ứng dụng có cài đặt phương thức finish() trước khi bị xóa khỏi bộ nhớ [5]
Trang 8thực hiện hoặc trong trường hợp Broadcasts, nó là một mô tả về một cái gì đó đã xảy ra và
1.3.2.2 Vòng đời của 1 Service
Một Service có các phương thức callback vòng đời mà ứng dụng có thể thực hiện để theo dõi những thay đổi trong trạng thái của service và ứng dụng có thể thực hiện công việc
ở giai đoạn thích hợp
1.3.3 BroadcastReceiver
Broadcast Reciever chỉ đơn giản là phản ứng tin nhắn broadcast từ các ứng dụng khác hoặc từ hệ thống chính nó Có hai bước quan trọng để tạo ra BroadcastReceiver cho hệ thống Broadcast intent:
thông qua tag <receiver> trong file AndroidManifest.xml
1.3.4 Content Provider
Là nơi lưu trữ và cung cấp cách truy cập dữ liệu do các ứng dụng tạo nên Đây là cách duy nhất mà các ứng dụng có thể chia sẻ dữ liệu của nhau Android cung cấp sẵn Content Providers cho một số kiểu dữ liệu thông dụng như âm thanh, video, thông tin số điện thoại, Người lập trình cũng có thể tự tạo ra các class con (subclass) của Content Provider để lưu trữ kiểu dữ liệu của riêng mình
Trang 91.3.5 Shared preferences
Shared preferences sử dụng key/value hệ thống để save/retrieve dữ liệu Đây là, tất cả
các dữ liệu đơn giản sẽ có một khóa duy nhất trong Shared preferences Bằng cách sử dụng khóa này, giá trị đã lưu trước đó, ngay cả những ứng dụng đã bị hủy và khởi động lại một lần nữa nó sẽ được phục hồi Trong trường hợp giá trị yêu cầu chưa được thiết lập một giá trị mặc định sẽ được trả lại Nếu dữ liệu có lưu trữ theo cấu trúc với số lượng lớn thì không nên sử dụng nên sử dụng lưu trữ với database (sqlite)
1.3.6 LogCats
LogCats là phương pháp được sử dụng trên các thiết bị dựa trên Android để hiển thị
các thông điệp hoặc các bản ghi tương tự như các câu lệnh System.out.println() của Java Để
gọi nó, các lập trình viên có thể viết in mã code trong bất kỳ nơi mã code tồn tại Điều quan trọng là đề cập đến những thông báo hoặc các log có thể được chụp và xử lý bởi bất kỳ chương trình nào đang chạy trong Android, bởi vì nó là cơ sở của chương trình thực hiện cho dự án này
1.3.7 ửi và nhận messages trong Andriod
Bên cạnh các phương pháp broadcast receiver, cách khác để giao tiếp trong Android đang sử dụng các messages và Handlers
Nhận message này phải cài đặt các phương thức xử lý (handler) Các phương thức xử
lý là tiến trình đó liên tục lặp lại kiểm tra các nội dung của hàng đợi message và bộ lọc message Bởi vì sự lặp lại này, khi phương thức xử lý không được cài đặt trong các Activity
nó đã được cài đặt trong thread khác
Trang 10CHƯƠNG 2 MỘT SỐ CƠ SỞ LÝ HUYẾ LIÊN QUAN
2.1 Bảo mật ứng dụng Android
Khi Chúng ta phát triển các ứng dụng Android, Chúng ta phải giải quyết một số khía cạnh liên quan đến bảo mật, bao gồm cả các quy trình ứng dụng và các hộp cát (sandbox - hộp dùng để thử nghiệm và phát triển phần mềm), chia sẻ mã và dữ liệu, bảo vệ hệ thống thông qua việc ký các ứng dụng và sử dụng các quyền hạn Hệ điều hành android sử dụng một vài phương pháp bảo mật cho thiết bị của người sử dụng Chúng ta sẽ miêu tả các tính năng bảo mật ảnh hưởng đến ứng dụng một cách trực tiếp
Hình 2.1: Các lĩnh vực bảo mật hiện có khi lập trình các ứng dụng Android
(Nguồn: Bài báo “Understanding security on Android- IBM” [6])
2.1.1 phân quyền Android
Phân quyền là một cơ chế bảo mật của nền tảng Android để cho phép hoặc hạn chế ứng dụng truy cập đến các API và các tài nguyên bị hạn chế Theo mặc định, các ứng dụng Android không được cấp các phân quyền nào, làm cho chúng an toàn bằng cách không cho phép chúng truy cập vào các API được bảo vệ hoặc các tài nguyên trên thiết bị Ứng dụng phải yêu cầu các phân quyền thông qua manifest.xml file và người dùng cấp hoặc không cấp các phân quyền trong khi cài đặt Để yêu cầu cấp phân quyền, hãy khai báo một thuộc
tính <user-permission> trong manifest.xml file:
Trang 11<uses-permission android:name="string" />
2.1.1.1 Các quyền hạn của Content provider và của file
Các Content Provider trưng ra một URI chung là URI duy nhất xác định dữ liệu của chúng Để bảo vệ Content Provider như vậy, khi bắt đầu một hoạt động hoặc trả về một kết
lập Intent.FLAG_GRANT_READ_URI_PERMISSION và Intent.FLAG_GRANT_WRITE_URI_PERMISSION, để cấp quyền cho hoạt động thu nhận truy cập vào URI của dữ liệu
cụ thể theo ý định này Các ứng dụng có thể cho phép các ứng dụng hoặc các tiến trình khác
có quyền truy cập tới các file của mình Sự cho phép này được thực hiện bằng cách chỉ ra
động MODE_WORLD_READABLE và MODE_WORLD_WRITEABLE thích hợp để cho phép quyền truy cập đọc hoặc viết vào tệp, hoặc MODE_PRIVATE để mở tệp trong chế độ riêng tư
2.1.1.2 Các API Permission thời gian chạy
Android cung cấp các API Permission để kiểm tra, bắt tuân thủ, cấp và thu hồi các
phân quyền trong thời gian chạy Các API này là một phần của lớp android.content.Context,
cung cấp toàn bộ thông tin về một môi trường ứng dụng
2.1.2 Sandbox
Android sử dụng khái niệm về sandbox để bắt buộc tách riêng giữa ứng dụng với nhau và các phân quyền để cho phép hoặc ngăn không cho một ứng dụng truy cập vào các tài nguyên của thiết bị như các file và các thư mục, các mạng, các cảm biến và các API nói chung Các ứng dụng Android chạy trên tiến trình Linux riêng của mình và được gán cho một ID của người dùng duy nhất (UID) Theo mặc định, các ứng dụng chạy trong một tiến trình của sandbox cơ sở không được gán cho các phân quyền, do đó ngăn không cho các ứng dụng như vậy được truy cập vào hệ thống hoặc các tài nguyên Tuy nhiên, các ứng dụng Android có thể yêu cầu các phân quyền thông qua các manifest.xml file của ứng dụng
2.1.3 Ký ứng dụng (Application signing)
Tất cả các ứng dụng Android phải được ký Việc ký ứng dụng hoặc mã là quá trình
ký số một ứng dụng cụ thể bằng cách sử dụng một khóa riêng để:
Trang 12 Xác định tác giả của mã
2.1.4 Loại bỏ từ xa sự chuyển đổi (Remote kill switch)
Các ứng dụng Google Play có khả năng loại bỏ từ xa các ứng dụng từ thiết bị cầm tay của người sử dụng khi ứng dụng được vi phạm việc thỏa thuận phân phối phát triển hoặc chính sách chương trình phát triển
Tuy nhiên các loại bỏ từ xa chỉ hữu ích đối với các ứng dụng cài đặt thông qua thị trường Google Play Các ứng dụng cài đặt thông qua các kênh không chính thức sẽ không bị ảnh hưởng bởi tính năng này
2.1.5 Bảo vệ file hệ thống
Android bảo vệ các file hệ thống cốt lõi của hệ điều hành bằng cách lưu trữ chúng trong một phân vùng chỉ có quyền đọc của ổ đĩa cứng Ngoài ra, tính năng sandbox đề cập ở trên ngăn chặn các ứng dụng được cài đặt trên các thiết bị truy cập các file của nhau trừ khi các file cố ý hoặc vô ý trưng bày ra bởi các nhà phát triển
2.1.6 Google Bouncer
Bouncer kiểm tra các ứng dụng mới khi chúng được tải lên google play market để xác định các ứng dụng có khả năng độc hại, thậm chí có thể tiến xa hơn tạo mô phỏng các ứng dụng đang chạy trên một thiết bị Android bắt bất kỳ hành vi ẩn
2.1.7 Rooting Android
Có quyền truy cập root vào thiết bị Android hoạt động theo cách tương tự dựa trên các nền tảng Unix khác nhau, và có thể được so sánh với việc có quyền quản trị administrator trên một máy tính sử dụng hệ điều hành windows Theo mặc định, người dùng
sẽ thường xuyên không được truy cập với tính năng này trên thiết bị Android, vì nó sẽ được khóa bởi nhà cung cấp Một ứng dụng với quyền truy cập root có thể thay thế, sửa đổi và cài đặt các ứng dụng như nó muốn
Trang 132.2 Học Máy
2.2.1 Khái niệm về học máy
Học máy (machine learning) là một lĩnh vực của trí tuệ nhân tạo liên quan đến việc nghiên cứu và xây dựng các kĩ thuật cho phép các hệ thống có thể "học" tự động từ dữ liệu
để giải quyết những vấn đề cụ thể Học máy là tạo ra các phương pháp và chương trình để cho máy tính có thể giải quyết các vấn đề giống như con người Ví dụ như các hệ thống có thể "học" cách phân loại thư điện tử xem có phải thư rác (spam) hay không và tự động xếp thư vào thư mục tuơng ứng
2.2.2 Thuật toán K-Means
Trong số các thuật toán phân nhóm tồn tại, thì thuật toán k-means sử dụng rộng rãi nhất Nó là một thuật toán lặp tổ chức dữ liệu số trong số k cụm Các dữ liệu số, hoặc tập huấn luyện, được tổ chức trong vectơ với một kích thước bằng với số tính năng được đánh giá Thuật toán K-means phân tích quá trình phân cụm đơn giản nên có thể áp dụng đối với tập dữ liệu lớn Tuy nhiên nhược điểm của thuật toán này là chỉ áp dụng với dữ liệu có thuộc tính số và khám phá ra các cụm có dạng hình cầu, K-means còn rất nhạy cảm với nhiễu và các phần tử ngoại lai trong dữ liệu Chất lượng của thuật toán K-means phụ thuộc nhiều vào các tham số đầu vào như: số cụm k và k trọng tâm khởi tạo ban đầu
2.3 Tổng kết
Android là một nền tảng di động hiện đại được thiết kế để được thực sự mở Để bảo
vệ giá trị, nền tảng này phải cung cấp một môi trường ứng dụng để đảm bảo sự an toàn của người sử dụng, dữ liệu, ứng dụng, thiết bị, và mạng Đảm bảo một nền tảng mở đòi hỏi một kiến trúc bảo mật mạnh mẽ và các chương trình an ninh nghiêm ngặt Android được thiết kế với bảo mật đa tầng cung cấp sự linh hoạt cần thiết cho một nền tảng mở, trong khi cung cấp bảo vệ cho tất cả người dùng của nền tảng này