CƠ SỞ LÝ THUYẾT
Giới thiệu về Android
Như các bạn đã biết Android là hệ điều hành di động phổ biến nhất hiện tại và cũng là hệ điều hành có sự phát triển nhanh nhất
Lịch sử Android bắt đầu từ năm 2005 như một phần của chiến lược không gian mobile, là hệ điều hành dựa trên nhân Linux Sau khi được Google mua lại, Android trở thành một hệ điều hành mã nguồn mở, cho phép người dùng tải về và sử dụng mã nguồn cho các mục đích riêng Hiện nay, Android hiện diện trên hầu hết các sản phẩm của các nhà sản xuất lớn như Samsung, Sony, HTC, từ điện thoại thông minh đến máy tính bảng và ti vi Sự phổ biến này không chỉ giúp Android phát triển mạnh mẽ mà còn tạo ra tiềm năng lớn cho các lập trình viên.
Hệ điều hành Android phát triển ngày càng lớn mạnh và kể từ khi nó ra đời tới giờ nó đã có các phiên bản sau
Biểu đồ cho thấy các phiên bản Android 4.x đang dần thay thế các phiên bản Android 2.x, trong khi phiên bản 3.0 chủ yếu được sử dụng cho máy tính bảng.
Dựa vào nội dung này, bạn có thể xác định hướng phát triển riêng cho mình, với khả năng hỗ trợ các phiên bản Android từ 4.x trở lên hoặc toàn bộ các phiên bản của hệ điều hành này Đây là một phần quan trọng trong đồ án tốt nghiệp đại học.
Võ Đình Luân – Lớp 53K1 – Khoa CNTT 10
Kiến trúc cơ bản của hệ điều hành Android
Android gồm 5 phần chính sau được chứa trong 4 lớp:
1 Nhân Linux: Đây là nhân nền tảng mà hệ điều hành Android dựa vào nó để phát triển Đâu là lớp chứa tất cả các thiết bị giao tiếp ở mức thấp dùng để điều khiển các phần cứng khác trên thiết bị Android
2 Thư viện: Chứa tất cả các mã cái mà cung cấp cấp những tính năng chính của hệ điều hành Android, đôi với ví dụ này thì SQLite là thư viện cung cấp việc hộ trợ làm việc với database dùng để chứa dữ liệu Hoặc Webkit là thư viện cung cấp những tính năng cho trình duyệt Web
3 Android runtime: Là tầng cùng với lớp thư viện Android runtime cung cấp một tập các thư viện cốt lỗi để cho phép các lập trình viên phát triển viết ứng dụng bằng việc sử dụng ngôn ngữ lập trình Java Android Runtime bao gốm máy ảo Dalvik(ở các version < 4.4, hiện tài là phiên bản máy ảo ART được cho là mạnh mẽ hơn trong việc xử lý biên dịch) Là cái để điều khiển mọi hoạt động của ứng dụng Android chạy trên nó(máy ảo Dalvik sẽ biên dịch ứng dụng để nó có thể chạy(thực thi) được , tương tự như các ứng dụng được biên dịch trên máy ảo Java vậy) Ngoài ra máy ảo còn giúp tối ưu năng lượng pin cũng như CPU của thiết bị Android
4 Android framework: Là phần thể hiện các khả năng khác nhau của Android(kết nối, thông báo, truy xuất dữ liệu) cho nhà phát triển ứng dụng, chúng có thể được tạo ra để sử dụng trong các ứng dụng của họ
5 Application: Tầng ứng dụng là tầng bạn có thể tìm thấy chuyển các thiết bị Android như Contact, trình duyệt…Và mọi ứng dụng bạn viết đều nằm trên tầng này Đồ án tốt nghiệp đại học
Võ Đình Luân – Lớp 53K1 – Khoa CNTT 11
Dưới đây là hình ảnh cho các tầng này:
Ngôn ngữ Java
Java là một ngôn ngữ lập trình mạnh mẽ và phổ biến, được sử dụng rộng rãi trong phát triển phần mềm, trang web, game và ứng dụng di động Với sự phát triển không ngừng, Java ngày càng khẳng định vị thế của mình trong ngành công nghiệp công nghệ.
Java được thiết kế với tiêu chí "Viết một lần, thực thi khắp nơi" (WORA), cho phép chương trình viết bằng Java chạy trên nhiều nền tảng khác nhau, miễn là có môi trường thực thi phù hợp Đây là ngôn ngữ lập trình phổ biến, dễ dàng tiếp cận và sử dụng cho tất cả lập trình viên.
Đặc điểm của ngôn ngữ lập trình Java a Tựa C++, hướng đối tượng hoàn toàn
Trong quá trình phát triển một ngôn ngữ lập trình mới nhằm hỗ trợ chạy trên nhiều nền tảng, các kỹ sư của Sun MicroSystem đã thực hiện một dự án tốt nghiệp đại học.
Võ Đình Luân – Lớp 53K1 – Khoa CNTT 12, cho biết rằng ngôn ngữ lập trình này rất dễ học và quen thuộc với đa số lập trình viên Điều này dẫn đến việc họ thường xuyên sử dụng lại các cú pháp từ C và C++.
Trong Java, việc thao tác với con trỏ đã bị loại bỏ để đảm bảo tính an toàn và dễ sử dụng Ngoài ra, các thao tác overload, lệnh goto cùng với các cấu trúc như struct và union cũng không được hỗ trợ trong Java Điều này giúp Java trở nên độc lập với phần cứng và hệ điều hành.
Ngôn ngữ Java nổi bật với khả năng "cross-platform", cho phép chương trình chạy mượt mà trên nhiều môi trường khác nhau Khả năng này được thể hiện qua hai cấp độ: mã nguồn và nhị phân Ở cấp độ mã nguồn, kiểu dữ liệu trong Java nhất quán trên tất cả hệ điều hành và phần cứng, nhờ vào bộ thư viện hỗ trợ riêng Điều này giúp chương trình Java có thể biên dịch trên nhiều loại máy mà không gặp lỗi Ở cấp độ nhị phân, mã biên dịch có thể chạy trên nhiều nền tảng mà không cần dịch lại mã nguồn, tuy nhiên, cần có Java Virtual Machine để thông dịch mã này.
Ngôn ngữ lập trình thường được chia ra làm 2 loại (tùy theo các hiện thực hóa ngôn ngữ đó) là ngôn ngữ thông dịch và ngôn ngữ biên dịch
Ngôn ngữ lập trình Java thuộc loại ngôn ngữ thông dịch Chính xác hơn, Java là loại ngôn ngữ vừa biên dịch vừa thông dịch Cụ thể như sau:
Khi lập trình, một tệp java sẽ được tạo ra Sau đó, mã nguồn của chương trình sẽ được biên dịch thành mã byte code Khi chương trình được yêu cầu chạy, Máy ảo Java (Java Virtual Machine) sẽ chuyển đổi mã byte code này thành mã máy (native code).
Võ Đình Luân, sinh viên lớp 53K1 thuộc Khoa CNTT 13, cho biết rằng phương pháp này cho phép mã Java hoạt động trên nhiều nền tảng khác nhau, miễn là có sự hỗ trợ của JVM cho nền tảng đó.
Nhược điểm của Java là quá trình thực thi mã chậm hơn so với các ngôn ngữ biên dịch khác, mặc dù vẫn nằm trong mức chấp nhận được Bên cạnh đó, Java sử dụng cơ chế thu gom rác tự động để quản lý bộ nhớ.
Khi tạo ra các đối tượng trong Java, JRE sẽ tự động cấp phát không gian bộ nhớ cho các đối tượng ở trên heap
Trong lập trình với ngôn ngữ C/C++, việc quản lý bộ nhớ là rất quan trọng, bạn cần phải giải phóng vùng nhớ đã cấp phát để tránh tình trạng thất thoát bộ nhớ Nếu không hủy bỏ một số vùng nhớ, điều này có thể dẫn đến thất thoát và làm giảm hiệu suất của chương trình.
Ngôn ngữ lập trình Java tự động quản lý bộ nhớ thông qua bộ thu dọn rác, giúp lập trình viên không cần phải gọi hủy các vùng nhớ Bộ thu dọn rác theo dõi các tài nguyên đã được cấp phát và tự động thu hồi chúng khi không còn tham chiếu nào, đảm bảo hiệu quả sử dụng bộ nhớ.
Java hỗ trợ lập trình đa tiến trình (multithread) cho phép thực thi các công việc đồng thời Nó cũng cung cấp các giải pháp đồng bộ giữa các tiến trình, bao gồm việc sử dụng ưu tiên (priority).
Võ Đình Luân – Lớp 53K1 – Khoa CNTT 14 f Tính an toàn và bảo mật
Ngôn ngữ lập trình Java yêu cầu chặt chẽ về kiểu dữ liệu
Dữ liệu phải được khai báo tường minh
Không sử dụng con trỏ và các phép toán với con trỏ
Java kiểm soát chặt chẽ việc truy cập vào mảng và chuỗi, ngăn chặn việc sử dụng kỹ thuật tràn Điều này đảm bảo rằng các truy cập không vượt quá kích thước cho phép của mảng hoặc chuỗi.
Quá trình cấp phát và giải phóng bộ nhớ được thực hiện tự động
Cơ chế xử lý lỗi giúp việc xử lý và phục hồi lỗi dễ dàng hơn
Java cung cấp một môi trường quản lý chương trình với nhiều mức khác nhau
Mức 1 : Chỉ có thể truy xuất dữ liệu cũng như phương phức thông qua giao diện mà lớp cung cấp
Mức 2 : Trình biên dịch kiểm soát các đoạn mã sao cho tuân thủ các quy tắc của ngôn ngữ lập trình Java trước khi thông dịch
Mức 3 : Trình thông dịch sẽ kiểm tra mã byte code xem các đoạn mã này có đảm bảo được các quy định, quy tắc trước khi thực thi
Mức 4: Java kiểm soát việc nạp các lớp vào bộ nhớ để giám sát việc vi phạm giới hạn truy xuất trước khi nạp vào hệ thống
Máy ảo Java là phần mềm giả lập máy tính, nó tập hợp các lệnh logic để xác định hoạt đông của máy
Có thể xem nó như là một hệ điều hành thu nhỏ Đồ án tốt nghiệp đại học
Võ Đình Luân – Lớp 53K1 – Khoa CNTT 15
JVM chuyển mã byte code thành machine code tùy theo môi trường tương ứng (gọi là khả năng khả chuyển)
JVM cung cấp môi trường thực thi cho chương trình Java (gọi đó là khả năng độc lập với nền)
Sun MicroSystem thiết kế và phát triển nhiều loại máy ảo Java, cho phép chúng hoạt động trên nhiều hệ điều hành và kiến trúc phần cứng khác nhau.
Giới thiệu môi trường phát triển Android Studio
Google cung cấp Android Studio, một công cụ phát triển ứng dụng Android dựa trên nền tảng IntelliJ IDEA Bộ công cụ này bao gồm các trình soạn thảo riêng biệt cho hầu hết các file cấu hình và Layout ứng dụng Android định dạng XML Đặc biệt, Android Studio cho phép lập trình viên dễ dàng chuyển đổi giữa chế độ chỉnh sửa nội dung XML và giao diện người dùng (GUI) để thao tác và chỉnh sửa thuận tiện.
Ngoài ra , bộ phát triển Android Studio còn tích hợp bên trong những tiện ích hỗ trợ phát triển ứng dụng như sau:
Bộ xây dựng ứng dụng Gradle với nhiều cấu hình linh động
Cho phép xây dựng ứng dụng tùy biến và tự động tạo ra file apk tương thích với thông tin tùy biến
Bộ code mẫu giúp chúng ta xây dựng các chức năng phổ biến của các ứng dụng
Trình biên soạn Layout GUI cho ứng dụng Android mang đến sự phong phú và tiện lợi, cho phép người dùng dễ dàng tạo giao diện màn hình bằng cách kéo thả các thành phần mẫu có sẵn Người dùng cũng có thể tùy chỉnh giao diện themes như kích thước, màu sắc và nhiều yếu tố khác theo ý muốn.
Tích hợp lint là một ứng dụng hữu ích giúp các nhà phát triển kiểm soát hiệu suất, tính khả dụng và khả năng tương thích của các phiên bản API Nó cũng hỗ trợ phát hiện những vấn đề tiềm ẩn có thể xảy ra trong quá trình Runtime, góp phần nâng cao chất lượng sản phẩm.
Võ Đình Luân – Lớp 53K1 – Khoa CNTT 16
ProGuard (tiện ích tối ưu và mã hóa code khi build ứng dụng) và Android app- signing
Bộ tích hợp hỗ trợ phát triển ứng dụng Android dễ dàng với các dịch vụ cùa nền tảng đám mây của Google (Google Cloud Platform)
Nơi khai báo các Activity trong ứng dụng
Qui định Activity nào thực thi đầu tiên
Đồ án tốt nghiệp đại học
Võ Đình Luân – Lớp 53K1 – Khoa CNTT 17
Cấp quyền cho ứng dụng như quyền truy cập internet, quyền ghi thẻ nhớ, …
Mỗi activity tương ứng với một form
Là nơi viết code bằng java
Câu lệnh setContentView(R.layout.activity_main); dùng để chỉ định layout
In the example provided, a main layout named "main_start" has been established to contain the primary program framework The command to invoke this main program framework is: setContentView(R.layout.main_start); within the package gsth.gsthapplcation The necessary imports include android.support.v7.app.AppCompatActivity and android.os.Bundle, and the class is defined as public class MainActivity extending AppCompatActivity.
@Override protected void onCreate(Bundle savedInstanceState) { Đồ án tốt nghiệp đại học
Võ Đình Luân – Lớp 53K1 – Khoa CNTT 18 super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
Khu vực res build.gradle (Module: app) trong Gradle Scripts
Qui định phiên bản SDK
Khai báo thư viện sử dụng apply plugin: 'com.android.application' Đồ án tốt nghiệp đại học
Võ Đình Luân – Lớp 53K1 – Khoa CNTT 19 android { compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig { applicationId "gsth.gsthapplcation" minSdkVersion 19 targetSdkVersion 23 versionCode 1 versionName "1.0"
} buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard- rules.pro'
} dependencies { Đồ án tốt nghiệp đại học
Võ Đình Luân – Lớp 53K1 – Khoa CNTT 20 compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.1.1'
Biên dịch và chạy ứng dụng
Bước 1: Tạo thiết bị ảo (Emulator)
Lựa chọn thiết bị -> Next Đồ án tốt nghiệp đại học
Võ Đình Luân – Lớp 53K1 – Khoa CNTT 21
Lựa chọn phiên bản Android -> Next -> Finish Đồ án tốt nghiệp đại học
Võ Đình Luân – Lớp 53K1 – Khoa CNTT 22
Chọn Lauch this AVD in the emulator (biểu tượng play) để khởi động thiết bị ảo
Thiết bị ảo (emulator) Đồ án tốt nghiệp đại học
Võ Đình Luân – Lớp 53K1 – Khoa CNTT 23
Chọn biểu tượng Run „app‟ hoặc nhấn tổ hợp phím Shift + F10
Chọn thiết bị ảo -> OK
Ứng dụng đã được thực thi Đồ án tốt nghiệp đại học
Võ Đình Luân – Lớp 53K1 – Khoa CNTT 24
PHÂN TÍCH HỆ THỐNG
Mô tả bài toán
Nhu cầu giải trí trên điện thoại di động ngày càng gia tăng, kéo theo sự xuất hiện của nhiều trò chơi hấp dẫn Trong những lúc rảnh rỗi, mọi người thường tìm kiếm các trò chơi quen thuộc để rèn luyện kiến thức và nâng cao khả năng hiểu biết, chẳng hạn như trò chơi Ai.
Xây dựng ứng dụng di động giúp người dùng vừa luyện kiến thức vừa giải trí, mô phỏng theo chương trình "Ai Là Triệu Phú" nổi tiếng trên VTV3 của Đài Truyền Hình Việt Nam.
1.3 Xác định yêu cầu và chức năng Ứng dụng cũng gồm các chức năng chính: trả lời câu hỏi và có sự hỗ trợ để vượt qua những câu hỏi Tương ứng với mỗi câu hỏi là một giá trị tiền thưởng nhất định
Tất cả mọi người ở mọi lứa tuổi đều sở hữu smartphone Android, và sau khi sử dụng các ứng dụng trên thiết bị di động, người dùng có thể đạt được nhiều mục tiêu quan trọng.
1.5 Phương pháp thực hiện và hướng giải quyết
- Tìm hiểu, khảo sát các ứng dụng trên và di động Đồ án tốt nghiệp đại học
Võ Đình Luân – Lớp 53K1 – Khoa CNTT 25
- Đặt tả yêu cầu xây dựng hệ thống
- Xây dựng quy trình hệ thống
- Phân tích và thiết kế các mô hình hệ thống: thiết kế cơ sở dữ liệu…
- Thiết kế sơ đồ chức năng
- Thiết kế và xây dựng giải thuật và đề ra các giải pháp lập trình
- Ngôn ngữ lập trình: Java
- Cơ sở dữ liệu(CSDL): SQLite
Các cơ sở lý thuyết cần nghiên cứu và nắm vững để thực hiện đề tài:
+ Lý thuyết về phân và thiết kế CSDL
+ Các công cụ: ngôn ngữ java, bộ công cụ phát triển java JDK…
- Về phần mềm, công cụ sử dụng
Sử dụng các phần mềm để phát triển hệ thông như:
+ Công cụ lập trình(IDE): Android Studio
Cơ sở của ứng dụng
2.1 Dữ liệu trong thực tế
Tất cả các lĩnh vực trong thực tế đều có thể được chuyển thành câu hỏi, bao gồm các dạng như phương án trả lời, điền vào chỗ trống hoặc tính toán.
2.2 Dữ liệu câu hỏi ứng dụng
Dựa trên dữ liệu thực tế, cần tạo bảng phân cấp câu hỏi với mức độ khó tăng dần từ 1 đến 15 Mỗi cấp độ phải có hàng trăm câu hỏi để đảm bảo không xảy ra trùng lặp trong các lần thi.
Đồ án tốt nghiệp đại học cần tập trung vào những câu hỏi thực tiễn, giúp sinh viên mở rộng kiến thức và nâng cao sự hiểu biết của bản thân Việc này không chỉ hỗ trợ trong việc học tập mà còn chuẩn bị cho sinh viên những kỹ năng cần thiết cho cuộc sống sau này.
Võ Đình Luân – Lớp 53K1 – Khoa CNTT 26
2.3 Thiết kế cơ sở dữ liệu
Hệ thống sử dụng cơ sở dữ liệu(CSDL) là SQLite, gồm có bảng như sau:
- ID: Là khoá chính của cơ sở dữ liệu, mỗi id là duy nhất và cũng chính là tên gọi của câu hỏi
- Question: Cột chứa câu hỏi
- Case A,B,C,D : Cột chứa câu trả lời và tương ứng với với mỗi cột sẽ được đánh số 1,2,3,4 để ở cột TrueCase sẽ chứa phương án đúng
Tất cả câu hỏi sẽ được phân thành 15 bảng từ 1 đến 15 tương ứng với 15 cấp độ khó khác nhau của chương trình Đồ án tốt nghiệp đại học
Võ Đình Luân – Lớp 53K1 – Khoa CNTT 27
Thiết kế bằng ảnh và các widget có sẵn của Android Studio
- Sử dụng Textview để hiển thị câu hỏi, câu trả lời, điểm cũng như các phần cần hiển thị chữ ra màn hình
- Sử dụng Button để thiết kế các nút chức năng, câu trả lời khi tương tác với chương trình
- Thiết kế Ảnh và các icon tương thích với các chức năng Đồ án tốt nghiệp đại học
Võ Đình Luân – Lớp 53K1 – Khoa CNTT 28
4 Các câu lệnh quan trọng của chương trình:
Câu lệnh SQL kết nối cơ sở dữ liệu và gán id tương ứng cho câu hỏi Trong câu lệnh Select, sử dụng lệnh random để tránh trùng lặp câu hỏi trong mỗi lần chơi Sau mỗi lần lấy câu hỏi, giá trị trong bảng sẽ tăng lên 1, giúp phân cấp độ khó của câu hỏi Phương thức public ArrayList getData() sẽ mở cơ sở dữ liệu để thực hiện các thao tác này.
ArrayList arrQuestions=new ArrayList(); for (int i=1;i