CHƯƠNG I: TỔNG QUAN 1. Giới thiệu về hệ điều hành Android: 1. Lịch sử Android [1]Android là một hệ điều hành có mã nguồn mở dựa trên nền tảng Linux được thiết kế dành cho các thiết bị di động có màn hình cảm ứng như điện thoại thông minh và máy tính bảng. Ban đầu, Android là hệ điều hành cho các thiết bị cầm tay dựa trên lõi Linux do công ty Android Inc.
Công ty này sau đó được Google mua lại vào năm 2005 và bắt đầu xây dựng Android Platform. Các thành viên chủ chốt tại ở Android Inc. gồm có: Andy Rubin, Rich Miner, Nick Sears, and Chris White. Hình Android timeline Và sau tiếp, vào cuối năm 2007, thuộc về Liên minh Thiết bị Cầm tay Mã Nguồn mở (Open Handset Alliance) gồm các thành viên nổi bật trong ngành viễn thông và thiết bị cầm tay như: Texas Instruments, Broadcom Corporation, Google, HTC, Intel, LG, MarvellTechnology Group, Motorola, Nvidia, Qualcomm, Samsung Electronics, SprintNextel, T-Mobile, ARM Holdings, Atheros Communications, Asustek Computer Inc, Garmin Ltd, Softbank, Sony Ericsson, Toshiba Corp, and Vodafone Group,… Mục tiêu của Liên minh này là nhanh chóng đổi mới để đáp ứng tốt hơn cho nhu cầu người tiêu dùng và kết quả đầu tiên của nó chính là nền tảng Android.
11 Android được thiết kế để phục vụ nhu cầu của các nhà sản xuất thiết, các nhà khai thác và các lập trình viên thiết bị cầm tay. Phiên bản SDK lần đầu tiên phát hành vào tháng 11 năm 2007, hãng T-Mobile cũng công bố chiếc điện thoại Android đầu tiên đó là chiếc T-Mobile G1, chiếc smartphone đầu tiên dựa trên nền tảng Android. Một vài ngày sau đó, Google lại tiếp tục công bố sự ra mắt phiên bản Android SDK release Candidate 1. Trong tháng 10 năm 2008, Google được cấp giấy phép mã nguồn mở cho Android Platform.
Khi Android được phát hành thì một trong số các mục tiêu trong kiến trúc của nó là cho phép các ứng dụng có thể tương tác được với nhau và có thể sử dụng lại các thành phần từ những ứng dụng khác. Việc tái sử dụng không chỉ được áp dụng cho cho các dịch vụ mà nó còn được áp dụng cho cả các thành phần dữ liệu và giao diện người dùng. Vào cuối năm 2008, Google cho phát hành một thiết bị cầm tay được gọi là Android Dev Phone 1 có thể chạy được các ứng dụng Android mà không bị ràng buộc vào các nhà cung cấp mạng điện thoại di động. Mục tiêu của thiết bị này là cho phép các nhà phát triển thực hiện các cuộc thí nghiệm trên một thiết bị thực có thể chạy hệ điều hành Android mà không phải ký một bản hợp đồng nào.
Vào khoảng cùng thời gian đó thì Google cũng cho phát hành một phiên vản vá lỗi 1.1 của hệ điều hành này. Ở cả hai phiên bản 1.1 Android chưa hỗ trợ soft- keyboard mà đòi hỏi các thiết bị phải sử dụng bàn phím vật lý. Android cố định vấn đề này bằng cách phát hành SDK 1.5 vào tháng Tư năm 2009, cùng với một số tính năng khác. Chẳng hạn như nâng cao khả năng ghi âm truyền thông, vật dụng, và các live folder.
Delving với máy ảo Dalvik là máy ảo giúp các ứng dụng java chạy được trên các thiết bị động Android. Nó chạy các ứng dụng đã được chuyển đổi thành một file thực thi Dalvik (dex). Định dạng phù hợp cho các hệ thống mà thường bị hạn chế về bộ nhớ và tốc độ xử lý. Dalvik đã được thiết kế và viết bởi Dan Bornstein, người đã 12 đặt tên cho nó sau khi đến thăm một ngôi làng đánh cá nhỏ có tên là Dalvík ở đảo Eyjafjörður, nơi mà một số tổ tiên của ông sinh sống.
Từ góc nhìn của một nhà phát triển, Dalvik trông giống như máy ảo Java (Java Virtual Machine) nhưng thực tế thì hoàn toàn khác. Khi nhà phát triển viết một ứng dụng dành cho Android, anh ta thực hiện các đoạn mã trong môi trường Java. Sau đó, nó sẽ được biên dịch sang các bytecode của Java, tuy nhiên để thực thi được ứng dụng này trên Android thì nhà phát triển phải thực thi một công cụ có tên là dex. Đây là công cụ dùng để chuyển đổi bytecode sang một dạng gọi là dex bytecode.
"Dex" là từ viết tắt của "Dalvik executable" đóng vai trò như cơ chế ảo thực thi các ứng dụng Android. Giao diện: Giao diện người dùng của Android dựa trên nguyên tắc tác động trực tiếp, sử dụng cảm ứng chạm tương tự như những động tác ngoài đời thực như vuốt, chạm, kéo dãn và thu lại để xử lý các đối tượng trên màn hình. Các thiết bị Android sau khi khởi động sẽ hiển thị màn hình chính, điểm khởi đầu với các thông tin chính trên thiết bị, tương tự như khái niệm desktop trên máy tính để bàn. Màn hính chính Android thường gồm nhiều biểu tượng (icon) và tiện ích (widget).
Giao diện màn hình chính của Android có thể tùy chỉnh ở mức cao, cho phép người dùng tự do sắp đặt hình dáng cũng như hành vi của thiết bị theo sở thích. Ưu và nhược điểm: v Ưu điểm: Ø Là hệ điều hành có mã nguồn mở nên khả năng tuỳ biến cao, có thể tùy ý chỉnh sửa mà không có sự can thiệp hay cấm cản từ Google. 13 Ø Đa dạng sản phẩm, rất nhiều hãng điện thoại, thiết bị công nghệ đã ưu ái chọn Android cho thiết bị của họ, giá cả thì hợp lý từ bình dân đến cao cấp. Ø Kho ứng dụng Google Play đồ sộ.
Ø Thân thiện và dễ sử dụng. Ø Khả năng đa nhiệm, chạy cùng lúc nhiều ứng dụng cao Ø Có thể mở rộng bộ nhớ bằng thẻ nhớ v Nhược điểm: Ø Nhiều ứng dụng chạy ngầm làm chậm máy Ø Ø Dễ nhiễm phần mềm độc hại và virus. Do tính chất mã nguồn mở, nhiều phần mềm không được kiểm soát có chất lượng không tốt hoặc lỗi bảo mật vẫn được sử dụng. Ø Kho ứng dụng quá nhiều dẫn đến khó kiểm soát chất lượng, thiếu các ứng dụng thật sự tốt.
Ø Cập nhật không tự động với tất cả thiết bị. Khi một phiên bản hệ điều hành mới ra mắt, không phải tất cả sản phẩm đều được cập nhật, thậm chí nếu muốn trải nghiệm bạn thường xuyên phải mua mới thiết bị. Kiến trúc của Android: Để lập trình Android hiệu quả, bên cạnh nắm vững kiến thức về ngôn ngữ lập trình, về môi trường Android Studio, chúng ta cần nắm kiến thức tổng quát về kiến trúc của Android. Android Software Stack: Android được cấu trúc theo hình thức một hàng đợi phần mềm (software stack) bao gồm các ứng dụng (applications), hệ điều hành (operating system), 14 môi trường thực thi (run-time environment), middleware, các dịch vụ (services), các thư viện (libraries).
Hình sau minh họa kiến trúc của Android với các tầng (layer) và các thành phần tương ứng trong mỗi tầng trong một Android software stack. Linux Kernel: Cung cấp một mức trừu tượng giữa các thiết bị phần cứng và các tầng trên của stack. Dựa trên Linux phiên bản 2.6, kernel cung cấp đa nhiệm, các dịch vụ hệ thống mức thấp như bộ nhớ, tiến trình, các drivers như wifi, audio, … 1. Khi ứng dụng được tải lên thiết bị, ART sẽ sử dụng một tiến trình gọi là Ahead-of-Time (AOT) để chuyển mã bytecode thành định dạng mã để bộ xử lý có thể hiểu được.
Định dạng mã này được gọi là Executable and Linkable Format (ELF). Mỗi lần ứng dụng Android tải lên thiết bị, phiên bản thực thi ELF đã tạo lần đầu sẽ chạy mà không cần phải chuyển sang mã bytecode, do đó, ứng dụng thực thi nhanh hơn và làm tăng tuổi thọ pin của các thiết bị. Cách tiếp cận AOT ngược với cách biên dịch Just-in-Time (JIT) trong các phiên bản Andorid cũ hơn. Biên dịch JIT sẽ chuyển mã bytecode sang máy ảo mỗi lần ứng dụng Android được tải lên thiết bị, do đó, sẽ xử lý chậm hơn rất nhiều so với cách biên dịch AOT.
Libraries (thư viện Android): Android cung cấp một tập các thư viện rất đa dạng dùng trong đồ họa, cơ sở dữ liệu, giao tiếp mạng, v. Các thư viện chủ yếu dự trên Java và C/C++. Một số thư viện chủ yếu gồm: android. Application Framework: Application Framework là một tập các dịch vụ định hình nên môi trường trong đó các ứng dụng Android thực thi và được quản lý.
Một số framework chủ yếu trong Android như Activity Manager, Content Providers, Resource Manager, v. Applications: Là tầng cao nhất trong stack gồm các ứng dụng Android và các ứng dụng bên thứ ba do người dùng cài đặt trên thiết bị. Các thành phần trong một Android Project 1.xml [2]Trong bất kì một project Android nào khi tạo ra đều có một file AndroidManifest.xml, file này được dùng để định nghĩa các screen sử dụng, các permission cũng như các theme cho ứng dụng. Đồng thời nó cũng chứa thông tin về phiên bản SDK cũng như main activity sẽ chạy đầu tiên.
File này được tự động sinh ra khi tạo một Android project. Trong file manifest bao giờ cũng có 3 thành phần chính đó là: application, permission và version. Dưới đây là nội dung của một file AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.com/apk/res/android" package="dtu.activity" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".LoginActivity" android:label="@string/app_name"> <intent-filter> 16 <action android:name="android.MAIN" /> <category android:name="android.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MainContactListActivity" /> <activity android:name=".RestoreContactActivity" /> </application> <uses-sdk android:minSdkVersion="7" /> <uses-sdk android:minSdkVersion="7" /> <uses-permission android:name="android.INTERNET"/> <uses-permission android:name="android.CALL_PHONE"/> </manifest> v Application Thẻ <application>, bên trong thẻ này chứa các thuộc tính được định nghĩa cho ứng dụng Android như: • Android:icon = “drawable resource” Ở đây đặt đường dẫn đến file icon của ứng dụng khi cài đặt. VD: android:icon = “@drawable/icon”.
• Android:name = “string” thuộc tính này để đặt tên cho ứng dụng Android. Tên này sẽ được hiển thị lên màn hình sau khi cài đặt ứng dụng. • Android:theme = “drawable theme” thuộc tính này để đặt theme cho ứng dụng. Các theme là các cách để hiển thị giao diện ứng dụng.
Ngoài ra còn nhiều thuộc tính khác… v Permission Bao gồm các thuộc tính chỉ định quyền truy xuất và sử dụng tài nguyên của ứng dụng. Khi cần sử dụng một loại tài nguyên nào đó thì trong file manifest của ứng dụng cần phải khai báo các quyền truy xuất như sau: 17 <uses-permission android:name="android.READ_PHONE_STATE"/> <uses-permission android:name="android.ACCOUNT_MANAGER"/> <uses-permission android:name="android.VIBRATE" /> <uses-permission android:name="android.CALL_PHONE"/> v SDK version Thẻ xác định phiên bản SDK được khai báo như sau: <uses-sdk android:minSdkVersion="7" />. Ở đây chỉ ra phiên bản SDK nhỏ nhất mà ứng dụng hiện đang sử dụng.java là một file tự động sinh ra ngay khi tạo ứng dụng, file này được sử dụng để quản lý các thuộc tính được khai báo trong file XML của ứng dụng và các tài nguyên hình ảnh. - Mã nguồn của file R.java được tự động sinh khi có bất kì một sự kiện nào xảy xa làm thay đổi các thuộc tính trong ứng dụng.