CHƯƠNG I: CƠ SỞ LÝ THUYẾT 1.1 Lịch sử android Android là hệ điều hành cho các thiết bị dị động như: điện thoại di động, máy tính bảng. Android được phát triển bởi Google và dựa trên nền tảng Linux phiên bản 2.6 cho hệ thống dịch vụ cốt lõi như security, memory management, process management, network stack, and driver model. Android có một cộng đồng những nhà phát triển lớn viết các ứng dụng cho hệ điều hành của mình. Hiện tại có khoảng 200.000 ứng dụng android os và 100.000 ứng dụng đã được đệ trình, điều này khiến cho android trở thành hệ điều hành di động có môi trường phát triển lớn thứ 2.
Các nhà phát triển viết ứng dụng cho Android dựa trên ngôn ngữ Java. Google công bố hầu hết các mã nguồn của Android theo bản cấp phép Apache. Hệ điều hành Android bao gồm 12 triệu dòng mã; 3 triệu dòng XML, 2.1 triệu dòng mã Java và 1.2 Lịch Sử Android Ban đầu, Android là hệ điều hành dành cho các thiết bị di động cầm tay dựa trên nền tảng Linux do công ty Android Inc gồm có: Andy Rubin, Rich Miner, Nick Sears, and Chris White. 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 nghành viễn thông và thiết bị càm tay như: Texas Instruments, Broadcom Corporation, Google, HTC, Intel, LG, Marvell Technology Group, Motorola… 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.
Android được thiết kế để phục vụ nhu cầu của các nhà sản xuất, các nhà khai thác và các nhà lập trình viên thiết bị cầm tay. Android là hệ thống nền tảng phần mềm dành cho điện thoại di động bao gồm hệ điều hành, các phần tử giao tiếp trung gian(midleware) và các ứng dụng chính (key application). Phiên bản SDK (Software Development Kit) lần đàu tiên phát hành vào tháng 11- 2007, hang T-Mobile cũng công bố chiếc điện thoại Android đàu tiên đó là chiếc T- Monile 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 Sinh viên: Quách Văn Hà 3 Lớp: 510CNT 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 các dịch vụ mà còn được áp dụng cho 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 co phát hành một phiên bả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ợ bàn phím ảo mà đòi hỏi các thiết biị 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 4 năm 2009. Đến nay, Android đã trải qua nhiều phiên bản khác nhau như Android 1.2 và mới đây nhất là Android 4.3 với các tính năng ngày càng đầy đủ và hoàn thiện hơn.3 Kiến trúc của Android Mô hình thể hiện tổng quan về các thành phần của hệ điều hành Android.
Mỗi một phần sẽ được đặc tả một cách chi tiết dưới đây. Sinh viên: Quách Văn Hà 4 Lớp: 510CNT Hình 1-1 Cấu trúc stack hệ thống android 1.1 Tầng ứng dụng Android được tích hợp sẵn một ứng dụng cần thiết cơ bản như: Contacts, browser, camera, phone… tất cả các ứng dụng chạy trên đệ điều hành android điều được viết bằng Java.2 Application framework Android cung cấp một nền tảng phát triển mở, giú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à sang tạo. Nhà phát triể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ác dịch vụ chạy nền, thiết lập hệ thống báo động… Nhà phát triển có thể truy cập vào các API (Appication programing Interface) cùng một khuôn khổ được sử dụng bởi các ứng dụng lõi. Các kiến trúc ứng dụng được thiết kế đơn giản hóa việc sử dụngcá thành phần; bất kỳ ứng dựng có thể xuất bản khả năng của mình và ứng dụng nào khác sau đó có thể sử dụng những khả năng(có thể hạn chế bảo mật được thực thi bởi khuôn khổ).
Cơ chế này cho phép các thành phần tương tự sẽ được thay thế bởi người sử dụng. Sinh viên: Quách Văn Hà 5 Lớp: 510CNT Cơ bản tất cả các ứng dụng là một bộ các dịch vụ và các hệ thống, bao gồm: • Một tập hợp các View có khả năng kế thùa lẫn nhau dụng để thiết kế phàn giao diện ứng dụng như: gridview, tableview, linearlayout… • Một “Content Provider” cho phép các ứng dụng có thể truy xuất dữ liệu từ ứng dụng khác(chẳng hạn như Contacts) hoặc chia sẽ dữ liệu giữa các ứng dụng đó. • Một “Resource Manager” cung cấp truy xuất tới các tài nguyên không phải là mã nguồn, chẳng hạn như: localized strings, graphics, and layout files. • Một “Notifycation Manager” cho phép tất cả các ứng dụng hiển thị các custom alerts trong status bar.
Activity manager được dụng để quản lý chu trình sống của ứng dụng và điều hướng các activity.3 Library Android bao gồm một tập các thư viện C/C++ được sử dụng bởi các thành phần khác nhau trong hệ thống Android. Điều này được thể hiện thông qua thông qua nền tảng ứng dụng Android.4 Android Runtime Android bao gồm một tập cá dữ liệu cơ bản mà cung cấp hâu hết 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 điều chạy trong tiến trình riêng. Máy ảo Dalvik đã được viết để cho một thiết bị có thể chạy nhiều máy ảo(Virtual Machine-VM) hiệu quả.
Các VM-Dalvik thực thi các tập tin thực thi dalvik(dex). Định dạng tối ưu hóa cho bộ nhớ tối thiểu. VM là dựa trên register-based, và chạy các lớp đã được biên dịch Java để chuyển đổi thành các định dạng dex. Các VM dalvik dựa vào nhân Linux cho chức năng có bản như luồng và quản lý bộ nhớ thấp.5 Linux kernel Android dựa trên nhân Linux phiên bản 2.6 cho hệ thống dịch vụ cốt lõi như security, memory management, process management, network stack, and driver mode.
Kernel Linux 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 phần mềm Stack. Sinh viên: Quách Văn Hà 6 Lớp: 510CNT 1. Các lập trình viên Android sẽ cần phải sử dụng công cụ IDE (Integrated Development Enveronment) này để phát triển, debugging – gỡ lỗi và thử nghiệm cho ứng dụng. Tuy nhiên, các lập trình viên cũng có thể không cần phải sử dụng IDE mà thay vào đó là sử dụng dòng lệnh (command line) để biên dịch và tất nhiên là vẫn có Emulator như thường.
Android Amulator được trang bị đầy đủ hầu hết các tính năng của một thiết bị thật. Tuy nhiên, một số đã bị giới hạn như là kết nối cổng USB, Camera và video, nghe phone, nguồn điện giả lập và Bluetooth. Android Emulator thực hiện các công việc thông qua một bộ xử lý mã nguồn mở, công nghệ này được gọi là QEMU (http://bellard.org/qemu/) được phát triển bởi Fabrice Bellard.5 Các thành phần Android 1.xml Trong bất kì một Project Android nào khi tạ ra 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ư activity sẽ chạy đầu tiên.
Sinh viên: Quách Văn Hà 7 Lớp: 510CNT 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. Ví dụ về một file AndroidManifest.0"encoding="utf-8"?> <manifestxmlns:android="http://schemas.com/apk/res/android" package="dictionary.ev" android:versionCode="2" android:versionName="1.1"> <uses-sdkandroid:minSdkVersion="7"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name"> <activity android:name=".main" android:label="@string/app_name"> <intent-filter> <actionandroid:name="android.MAIN"/> <categoryandroid:name="android.LAUNCHER"/> </intent-filter> </activity> <activityandroid:name=".Detail"> <intent-filter> <actionandroid:name="android.DETAIL"/> <categoryandroid:name="android.DEFAULT"/> Sinh viên: Quách Văn Hà 8 Lớp: 510CNT </intent-filter> </activity> </application> <uses- permissionandroid:name="android.WRITE_EXTERNAL_STORAGE"> </uses-permission> <supports-screens android:anyDensity="true" android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:resizeable="true"> </supports-screens> </manifest> 1.1 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 đườ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 dùng để đặ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 them”: thuộc tính này dùng để đặt them cho ứng dụng. Các theme là cách để hiển thị giao diện ứng dụng.
Ngoài ra còn nhiều thuộc tính khác.2 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 nguồn tài nguyên nào đó thì trong file manifest của ứng dụng cần phải khai báo quyền truy xuất. + Quyền đọc danh bạ: Sinh viên: Quách Văn Hà 9 Lớp: 510CNT <uses-permission android:name="android.READ_PHONE_STATE"/> Quyền quản lý tài khoản: <uses-permission android:name="android.ACCOUNT_MANAGER"/> + quyền cho phép thực hiện cuộc gọi: <uses-permission android:name="android.3 SDK version Thẻ xác định phiên bản SDK được khai báo như sau. <use-sdk android:minSdkVerssion=”7”> 1.java là file được 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à tài nguyên hình ảnh.java được tự động sinh ra khi có bất kì một sự kiện nào sảy ra làm thay đổi các thuộc tính trong ứng dụng.
Chẳng hạn như, bạn kéo thả một file hình ảnh từ bên ngoài vào Project thì ngay lập tức thuộc tính đường dẫn đến file đó sẽ được hình thành trong file R.java hoạc xóa một file hình ảnh đường dẫn tướng ứng đến hình ảnh đó cũng tự động bị xóa.java hoàn toàn không phải đụng chạm gì đến trong quá trình xây dựng ứng dụng. Ví dụ một file R.java /* AUTO-GENERATED FILE. DO NOT MODIFY. * * This class was automatically generated by the * aapt tool from the resource data it found.
It * should not be modified by hand.com; Sinh viên: Quách Văn Hà 10 Lớp: 510CNT public final class R { public static final class array { public static final int teo=0x7f060000; } public static final class attr { } public static final class dimen { /** Default screen margins, per the Android Design guidelines. Customize dimensions originally defined in res/values/dimens.