CHƯƠNG 2 : PHÂN TÍCH – THIẾT KẾ HỆ THỐNG
3.1 Hệ điều hành Android
3.1.1 Giới thiệu
Android là một hệ điều hành 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 được phát triển bởi Android, Inc. với sự hỗ trợ tài chính từ Google và sau này được chính Google mua lại vào năm 2005.
Android ra mắt vào năm 2007 cùng với tuyên bố thành lập Liên minh thiết bị cầm tay mở: một hiệp hội gồm các công ty phần cứng, phần mềm, và viễn thông với mục tiêu đẩy mạnh các tiêu chuẩn mở cho các thiết bị di động. Chiếc điện thoại đầu tiên chạy Android được bán vào năm 2008.
Hình 3 - 1 Biểu tượng của hệ điều hành Android
Android có mã nguồn mở và Google phát hành mã nguồn theo Giấy phép Apache. Chính mã nguồn mở cùng với một giấy phép khơng có nhiều ràng buộc đã cho phép các nhà phát triển thiết bị, mạng di động và các lập trình viên nhiệt huyết được điều chỉnh và phân phối Android một cách tự do.
sửa đổi. Tháng 10 năm 2012, có khoảng 700.000 ứng dụng trên Android, và số lượt tải ứng dụng từ Google Play, cửa hàng ứng dụng chính của Android, ước tính khoảng 25 tỷ lượt.
Những yếu tố này đã giúp Android trở thành nền tảng điện thoại thông minh phổ biến nhất thế giới, vượt qua Symbian OS vào quý 4 năm 2010, và được các công ty công nghệ lựa chọn khi họ cần một hệ điều hành khơng nặng nề, có khả năng tinh chỉnh, và giá rẻ chạy trên các thiết bị công nghệ cao thay vì tạo dựng từ đầu.
Kết quả là mặc dù được thiết kế để chạy trên điện thoại và máy tính bảng, Android đã xuất hiện trên TV, máy chơi game và các thiết bị điện tử khác. Bản chất mở của Android cũng khích lệ một đội ngũ đơng đảo lập trình viên và những người đam mê sử dụng mã nguồn mở để tạo ra những dự án do cộng đồng quản lý. Những dự án này bổ sung các tính năng cao cấp cho những người dùng thích tìm tịi hoặc đưa Android vào các thiết bị ban đầu chạy hệ điều hành khác.
Android chiếm 87,7% thị phần điện thoại thơng minh trên tồn thế giới vào thời điểm quý 2 năm 2017, với tổng cộng 2 tỷ thiết bị đã được kích hoạt và 1,3 triệu lượt kích hoạt mỗi ngày. Sự thành cơng của hệ điều hành cũng khiến nó trở thành mục tiêu trong các vụ kiện liên quan đến bằng phát minh, góp mặt trong cái gọi là "cuộc chiến điện thoại thông minh" giữa các công ty công nghệ.
3.1.2 Kiến trúc của hệ điều hành Android
Android có một hạt nhân dựa trên nhân Linux phiên bản 2.6, kể từ Android 4.0 Ice Cream Sandwich (bánh ngọt kẹp kem) trở về sau, là phiên bản 3.x, với middleware, thư viện và API viết bằng C, còn phần mềm ứng dụng chạy trên một nền tảng ứng dụng gồm các thư viện tương thích với Java dựa trên Apache Harmony.
Android sử dụng máy ảo Dalvik với một trình biên dịch động để chạy 'mã dex' (Dalvik Executable) của Dalvik, thường được biên dịch sang Java bytecode. Nền tảng phần cứng chính của Android là kiến trúc ARM. Người ta cũng hỗ trợ x86 thông qua dự án Android x86, và Google TV cũng sử dụng một phiên bản x86 đặc biệt của Android.
Hình 3 - 2 Kiến trúc của hệ điều hành Android
Nhân Linux dùng cho Android đã được Google thực hiện nhiều thay đổi về kiến trúc so với nhân Linux gốc. Android khơng có sẵn X Window System cũng không hỗ trợ các thư viện GNU chuẩn, nên việc chuyển các ứng dụng hoặc thư viện Linux có sẵn sang Android rất khó khăn. Các ứng dụng C đơn giản và SDL cũng được hỗ trợ bằng cách chèn những đoạn shim Java và sử dụng tương tự JNI, như khi người ta chuyển Jagged Alliance 2 sang Android.
3.1.3 Ưu nhược điểm của hệ điều hành Android
a) Ư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.
+ Đ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 Store đồ 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 b) Nhược điểm
- 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 số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 q nhiều dẫn đến khó kiểm sốt chất lượng, thiếu các ứng dụng thật sự tốt.
- Sự phân mảnh lớn. Trong khi một số thiết bị Android xuất sắc đã trình làng như Galaxy S5, Galaxy Note 4, Xperia Z3…, vẫn cịn rất nhiều sản phẩm giá rẻ bình thường khác.
- 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ị.
3.2 Ngôn ngữ lập trình Java
3.2.1 Lịch sử
Java được khởi đầu bởi James Gosling và đồng nghiệp ở Sun Microsystems năm 1991. Ban đầu ngơn ngữ này được gọi là Oak (có nghĩa là cây sồi, do bên ngồi cơ quan của ơng Gosling có trồng nhiều loại cây này), họ dự định ngơn ngữ đó thay cho C++, nhưng các tính năng giống Objective C. Không nên lẫn lộn Java với JavaScript, hai ngôn ngữ đó chỉ giống tên và loại cú pháp như C. Công ty Sun Microsystems đang giữ bản quyền và phát triển Java thường xuyên. Tháng 04/2011, công ty Sun Microsystems tiếp tục cho ra bản JDK 1.6.24.
3.2.2 Đặc điểm
Java là ngơn ngữ lập trình hướng đối tượng nên nó cũng có 4 đặc điểm chung của các ngơn ngữ hướng đối tượng:
▪ Tính trừu tượng (Abstraction): Là tiến trình xác định và nhóm các thuộc tính, các hành động liên quan đến một thực thể đặc thù, xét trong mối tương quan với ứng dụng đang phát triển.
▪ Tính đa hình (Polymorphism): Cho phép một phương thức có các tác động khác nhau trên nhiều loại đối tượng khác nhau. Với tính đa hình, nếu cùng một phương thức ứng dụng cho các đối tượng thuộc các lớp khác nhau thì nó đưa đến những kết quả khác nhau. Bản chất của sự việc chính là phương thức này bao gồm cùng một số lượng các tham số.
▪ Tính kế thừa (Inheritance): Điều này cho phép các đối tượng chia sẻ hay mở rộng các đặc tính sẵn có mà khơng phải tiến hành định nghĩa lại.
▪ Tính đóng gói (Encapsulation): Là tiến trình che giấu việc thực thi những chi tiết của một đối tượng đối với người sử dụng đối tượng ấy.
Bên cạnh đó Java cịn có một số đặc tính khác:
▪ Độc lập nền (Write Once, Run Anywhere): Khơng giống như nhiều ngơn ngữ lập trình khác như C và C ++, khi Java được biên dịch, nó khơng được biên dịch sang mã máy cụ thể, mà thay vào đó là mã byte code chạy trên máy ảo Java (JVM). Điều này đồng nghĩa với việc bất cứ thiết bị nào có cài đặt JVM sẽ có thể thực thi được các chương trình Java.
Hình 3 - 3 Quá trình biên dịch qua máy ảo JVM
▪ Đơn giản: Học Java thật sự dễ hơn nhiều so với C/C++, nếu bạn đã quen với các ngơn ngữ lập trình hướng đối tượng thì việc học Java sẽ dễ dàng hơn. Java trở nên đơn giản hơn so với C/C++ do đã loại bỏ tính đa kế thừa và phép tốn con trỏ từ C/C++.
▪ Bảo mật: Java hỗ trợ bảo mật rất tốt bởi các thuật tốn mã hóa như mã hóa một chiều (one way hashing) hoặc mã hóa cơng cộng (public key).
▪ Đa luồng: Với tính năng đa luồng Java có thể viết chương trình có thể thực thi nhiều task cùng một lúc. Tính năng này thường được xử dụng rất nhiều trong lập trình game.
▪ Hiệu suất cao: Nhờ vào trình thu gom rác (garbage collection), giải phóng bộ nhớ
đối với các đối tượng không được dùng đến.
▪ Linh hoạt: Java được xem là linh hoạt hơn C/C ++ vì nó được thiết kế để thích ứng với nhiều mơi trường phát triển.
3.3 Firebase
3.3.1 Firebase là gì?
Firebase là một nền tảng để phát triển ứng dụng di động và trang web, bao gồm các API đơn giản và mạnh mẽ mà khơng cần backend hay server. Nó giúp các lập trình viên rút ngắn thời gian triển khai và mở rộng quy mô của ứng dụng mà họ đang phát triển.
Firebase là dịch vụ cơ sở dữ liệu hoạt động trên nền tảng đám mây – cloud. Kèm theo đó là hệ thống máy chủ cực kỳ mạnh mẽ của Google. Chức năng chính là giúp người dùng lập trình ứng dụng bằng cách đơn giản hóa các thao tác với cơ sở dữ liệu.
Firebase là dịch vụ cơ sở dữ liệu hoạt động trên nền tảng đám mây – cloud. Kèm theo đó là hệ thống máy chủ cực kỳ mạnh mẽ của Google. Chức năng chính là giúp người dùng lập trình ứng dụng bằng cách đơn giản hóa các thao tác với cơ sở dữ liệu cụ thể là những giao diện lập trình ứng dụng API đơn giản với mục đích nhằm tăng số lượng người dùng và thu lại nhiều lợi nhuận hơn.
Đặc biệt, còn là dịch vụ đa năng và bảo mật cực tốt. Firebase hỗ trợ cả hai nền tảng Android và IOS. Khơng có gì khó hiểu khi nhiều lập trình viên chọn Firebase làm nền tảng đầu tiên để xây dựng ứng dụng cho hàng triệu người dùng trên toàn thế giới.
3.3.2 Lịch sử phát triển
Firebase phát triển từ Envolve, một công ty khởi nghiệp trước đó do James Tamplin và Andrew Lee thành lập vào năm 2011. Envolve cung cấp cho các nhà phát triển một API cho phép tích hợp chức năng trị chuyện trực tuyến vào trang web của họ.
Sau khi phát hành dịch vụ trò chuyện, Tamplin và Lee nhận thấy rằng nó đang được sử dụng để chuyển dữ liệu ứng dụng không phải là tin nhắn trò chuyện. Các nhà phát triển đã sử dụng Envolve để đồng bộ hóa dữ liệu ứng dụng, chẳng hạn như trạng thái trò chơi trong thời gian thực giữa người dùng của họ. Tamplin và Lee quyết định tách biệt hệ thống trò chuyện và kiến trúc thời gian thực cung cấp năng lượng cho nó.
Họ thành lập Firebase như một công ty riêng biệt vào tháng 9 năm 2011 và ra mắt cơng chúng vào tháng 4 năm 2012.
Hình 3 - 4 Biểu tượng của Firebase
Sản phẩm đầu tiên của Firebase là Cơ sở dữ liệu thời gian thực của Firebase, một API đồng bộ hóa dữ liệu ứng dụng trên các thiết bị iOS, Android và Web, đồng thời lưu trữ trên đám mây của Firebase. Sản phẩm hỗ trợ các nhà phát triển phần mềm trong việc xây dựng các ứng dụng cộng tác, theo thời gian thực.
3.3.3 Cách thức hoạt động của Firebase
➢ Firebase Realtime Database:
Khi đăng ký một tài khoản trên Firebase để tạo ứng dụng, bạn đã có một cơ sở dữ liệu thời gian thực. Dữ liệu bạn nhận được dưới dạng JSON. Đồng thời nó cũng ln được đồng bộ thời gian thực đến mọi kết nối client.
Đối với các ứng dụng đa nền tảng, tất cả các client đều sử dụng cùng một cơ sở dữ liệu. Nó được tự động cập nhật dữ liệu mới nhất bất cứ khi nào các lập trình viên phát triển ứng dụng. Cuối cùng, tất cả các dữ liệu này được truyền qua kết nối an tồn SSL có bảo mật với chứng nhận 2048 bit.
Trong trường hợp bị mất mạng, dữ liệu được lưu lại ở local vì thế khi có mọi sự thay đổi nào đều được tự động cập nhật lên Server của Firebase. Bên cạnh đó, đối với các dữ liệu ở local cũ hơn với Server thì cũng tự động cập nhật để được dữ liệu mới nhất.
➢ Firebase Authentication:
Hoạt động nổi bật của Firebase Authentication là xây dựng các bước xác thực người dùng bằng Email, Facebook, Twitter, GitHub, Google. Đồng thời cũng xác thực nặc danh cho các ứng dụng. Hoạt động xác thực có thể giúp thơng tin cá nhân của người sử dụng được an tồn và đảm bảo khơng bị đánh cắp tài khoản.
➢ Firebase Hosting:
Hosting được phân phối qua tiêu chuẩn công nghệ bảo mật SSL từ mạng CDN (Content Delivery Network) - mạng lưới máy chủ lưu giữ bản sao của các nội dung tĩnh bên trong website và phân phối đến nhiều máy chủ PoP.
Mạng lưới máy chủ CDN được đặt ở khắp mọi nơi trên toàn cầu. Từ PoP (Points of Presence), dữ liệu sẽ tiếp tục được gửi đến người dùng cuối. Thông qua CDN, bản sao nội dung trên máy chủ gần nhất sẽ được trả về cho người dùng khi họ truy cập website. Hoạt động này giúp lập trình viên tiết kiệm thời gian thiết kế, xây dựng và phát triển ứng dụng.
3.3.4 Ưu nhược điểm của Firebase
a) Ưu điểm
tính năng để giúp các nhà phát triển bắt đầu sử dụng. Khi yêu cầu ngày càng tăng, tơi chọn gói Blaze có trả phí với nhiều tính năng nâng cao hơn.
✓ Tốc độ phát triển nhanh: Thông thường, mọi Developer cần có quyền truy cập vào Server và Host để tạo, bảo trì cơ sở dữ liệu và dịch vụ phụ trợ. Do đó, cần có một Backend Developer và một Frontend Developer để xây dựng các ứng dụng. Tuy nhiên, việc này thường có thể dẫn đến lỗi và các vấn đề có thể gây ra sự cố
ứng dụng và làm tăng chi phí phát triển. Thơng qua việc sử dụng Firebase và Firestore, Frontend Developer có thể quản lý, giảm thời gian cần thiết để hồn thành tất cả cơng việc.
✓ Nhiều dịch vụ trong một nền tảng: Hai tùy chọn cơ sở dữ liệu là Firestore và Realtime Database của Firebase. Tương tự như vậy, Firebase cho phép bạn thực hiện lưu trữ Cloud Media dễ dàng. Nó cũng cho phép phát triển ứng dụng không cần máy chủ thông qua việc tích hợp Cloud Functions.
Hình 3 - 5 Minh họa sự kết hợp của Firebase và Google Cloud Platform
✓ Được cung cấp bởi Google: Google - một trong những tên tuổi nổi bật và đáng tin cậy nhất trong thế giới công nghệ kể từ khi mua lại, Firebase đã trải qua một loạt thay đổi, phát triển và trở thành nền tảng đáng tin cậy như ngày nay. Nó khai thác sức mạnh của Google Cloud và nhiều dịch vụ của Google.
✓ Tập trung vào phát triển giao diện người dùng: Nó cho phép Developer tập trung vào việc tạo mã Frontend cho các ứng dụng di động. Nền tảng này giúp cho việc phát triển ứng dụng trở nên thuận tiện và giúp giảm chi phí đáng kể.
✓ Firebase khơng có máy chủ: Firebase cung cấp một môi trường hồn tồn khơng có máy chủ đi kèm với kiến trúc khơng máy chủ (Serverless Architecture). Do đó, bạn sẽ khơng cần lo lắng về cơ sở hạ tầng máy chủ.
✓ Học máy (Machine Learning): Firebase đi kèm với bộ ML với các API sẵn có cho các tính năng khác nhau của nền tảng di động như nhận dạng văn bản, nhận diện khn mặt, ghi nhãn hình ảnh, quét mã vạch,…
✓ Tạo lưu lượng truy cập: Firebase hỗ trợ lập chỉ mục ứng dụng để cho phép người dùng thu hút lại những khách tìm kiếm trên Google. Cụ thể, nó cung cấp liên kết ứng dụng trên mục tìm kiếm của Google.
✓ Theo dõi lỗi: Firebase có thể theo dõi cả lỗi không nghiêm trọng và lỗi nghiêm trọng. Đồng thời, báo cáo được tạo dựa trên mức độ ảnh hưởng của lỗi đến trải nghiệm của người dùng.
✓ Sao lưu: Firebase đảm bảo tính bảo mật tối ưu và tính sẵn có của dữ liệu nhờ các bản sao lưu thường xuyên. Các ứng dụng được bảo vệ khỏi mọi khả năng mất dữ liệu bằng cách dựa vào tính năng sao lưu tự động của nền tảng này.
b) Nhược điểm của Firebase
➢ Không phải là mã nguồn mở: Firebase không phải là một tùy chọn mã nguồn mở