Giaosucan's blog - Chia sẻ kiến thức theo cách bá đạo

Ticker

20/recent/ticker-posts

Android Yếu Lược

Tháng Chạp năm Ất Mùi, tức năm 2015 sau công nguyên, tập đoàn Fsoft trúng thầu dự án lớn nhất trong lịch sử, PPHontai. Với tổng giá trị cả triệu mỹ kim, cuder lên tới 400 người, nhưng thời gian thì ngắn kỉ lục, chỉ hơn bốn tuần trăng, quả thật là khó khăn chồng chất, thử thách vô cùng...
Image result for PPhontai

Dưới sự lãnh đạo tài tình của project manager XXX và sự nỗ lực OT, ON không ngừng của đội quân cuder hùng hậu, cuối cùng sản phẩm cũng deliver thành công. CEO nghe tin mừng lắm, liền cho mở tiệc khao quân.
Đang lúc mọi người hồ hởi chén tạc chén thù, thì được tin BrSe cấp báo:
Sản phẩm deliver chất lượng không tốt, bug quá nhiều, số lượng lên tới cả ngàn. Khách hàng đã ra tối hậu thư nếu không fix hết trong vòng 1 tuần trăng. Nhẹ thì sẽ hủy dự án, nặng sẽ cut business. Lúc đó thì ngọc đá cũng không còn, mà thanh danh công ty cũng sẽ bị hủy hoại.
Thấy rõ tình thế nguy cấp, PM đã cho triệu tập Team Lead, sub PM, PTL và hơn 400 cuder đến họp tại F-Complex để bàn chiến lược
PM nói
Nay bug report đến cả ngàn, quân lực chúng ta không đủ, không biết có nên fix hết bug hay xin giảng hòa với khách hàng, giãn deadline??
Chúng cuder nghe xong nộ khí trào dâng, tinh thần phấn chấn khác thường, đứng dậy đồng loạt hô lớn
Có bug thì phải fix, nay bug report về mà lại sợ hãi xin giãn dead line, thì còn gì thanh danh của Fsoft??
PM thở dài nói
Nhưng năng lực chúng ta còn yếu, fix sao hết bug trong thời gian ngắn thế
Trong lúc mọi người còn trầm ngâm suy nghĩ , Deliver Manager bỗng vuốt râu cười nói
Dự án này làm về Android, cuder tuy đông nhưng người hiểu sâu về kiến trúc hệ điều hành, framework Android thì chả có mấy ai. Nay ta có cuốn “Android yếu lược”, mô tả cặn kẽ kiến trúc hệ điều hành Android. Ta sẽ giảng giải cho mọi người, lo gì mà không fix hết bug.
Dưới đây là kiến trúc về Android hãy nhớ cho kĩ
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) dựa trên nền tảng Linux. Được phát triển đầu tiên bởi liên minh thiết bị cầm tay (Open Handset Alliance), nhưng sau khi được Google mua lại vào năm 2005, Android mới thực sự như rồng ra biển, hổ về sơn lâm, trở thành hệ điều hành di động phổ biến nhất.
Với hơn 1200 vạn dòng code, hệ điều hành Android là sự kết tinh trí tuệ của đội ngũ kĩ sư Google, được chia thành 5 layer
Image result for kiến trúc android
Linux kernel.
Layer cơ bản là linux kernel, là phần nhân của hệ điều hành. Tất cả hệ điều hành đa nhiệm đều có một nhân dạng này hay dạng khác. Windows và Windows Phone có nhân riêng thường được gọi là nhân NT, còn OS X và iOS sử dụng một nhân được gọi là Darwin, riêng Android sử dụng nhân Linux
  • Kernel được gọi là hạt nhân của hệ điều hành Android
  • Đáp ứng lại các hoạt động của user trên smartphone, là cầu nối giữa phần mềm và phần cứng(ví dụ: tăng âm lượng bằng phím cứng, khóa màn hình bằng nút cứng, chạm vào màn hình)
  • Giúp Android hiểu các kết nối vật lý bên ngoài ( ví dụ : cắm cáp kết nối với máy tính ,cắm chuột, usb, hay bàn phím).
Nếu ai đã từng nghiên cứu bộ source android thì có thể dễ thấy module kernel này
Để hiểu nguyên tắc hoạt động của kernel, hãy xem qua ví dụ sau
  • Khi user khởi động một ứng dụng Camera để chụp self-fi
  • Kernel sẽ tải ứng dụng Camera vào memory, tạo tiến trình cần thiết và start ứng dụng
  • Ứng dụng Camera gửi yêu cầu xuống device driver trong kernel
  • Kernel kích hoạt phần cứng camera của điện thoại
Do Kernel được open source, nếu có kiến thức về kernel và lập trình C/C++, developer có thể modify và build lại kernel của điện thoại. Tuy nhiên việc này có thể biến chiếc Android từ viên ngọc minh châu thành “cục gạch” nếu như có lỗi xảy ra
Libraries
Đây là lớp thư viện gốc của Android. Lớp này cho phép các thiết bị xử lý các loại dữ liệu khác nhau. Các thư viện này được viết bằng ngôn ngữ C/C++
Một vài thư viện gốc:
  • Libc: bộ thư viện standard C được Google phát triển cho Android, có tên là bionic được điều chỉnh để tối ưu hóa cho các thiết bị chạy trên nền Linux.
  • Media Framework: Bộ thư viện hỗ trợ âm thanh và hình ảnh
  • Surface manager: Quản lý hiển thị nội dung 2D và 3D.
  • LibWebCore: Một web browser engine hiện đại được sử dụng trong trình duyệt của Android lần trong trình duyệt nhúng web view được sử dụng trong ứng dụng.
  • OpenGLjES: Engine nổi tiếng liên quan đến xử lý đồ họa, tối ưu hóa hiển thị 3D.
  • FreeType: Bitmap and vector font rendering.
  • SQLite: hệ cơ sở dữ liệu nhỏ gọn, tiện lợi hơn so với SQL, Oracle.. phù hợp với ứng dụng Android
  • Webkit: công cụ trình duyệt được sử dụng để hiển thị nội dung HTML.
Android Runtime.
Java coder có lẽ rất quen thuộc với khái niệm Java Virtual Machine, môi trường runtime của Java cho phép các ứng dụng Java có thể chạy đa nền tảng. Trên Android cũng có 1 loại máy ảo tương tự gọi là Dalvik, nhờ Dalvik nên Android developer có thể “nhất tiễn hạ song điêu”, viết một app duy nhất có thể chạy trên smartphone, tablet, Android TV..
Tuy nhiên giữa Goolgle và Oracle xảy ra “long tranh hổ đấu”, tranh chấp vấn đề bản quyền ngôn ngữ Java,cũng như Dalvik khá chậm, nên Google đã phát triển giải pháp thay thế là Android ART
android art dalvik
ART cũng là một loại máy ảo như Dalvik nhưng tính năng rất khác.
  • Dalvik dùng cơ chế Just-In-Time (JIT) compiler để dịch ứng dụng ra mã máy khi user start ứng dụng
  • ART dùng cơ chế Ahead-Of-Time(AOT) để biên dịch ứng dụng ra mã máy khi cài ứng dụng của thiết bị
Như vậy việc biên dịch ra mã máy chỉ cần thực hiện 1 lần duy nhất với ART, giúp cho performance của ứng dụng tăng đáng kể, đặc biệt là các ứng dụng xử lý ảnh, video
Application Framework
Ở các layer như linux kernel, hay libraries chỉ phù hợp cho các vendor sản xuất điện thoại như BKAV với BPhone thần thánh hay Samsung với Galaxy, khi họ cần customize source code Android. Còn đối với developer, thì application framework là layer được sử dụng nhiều nhất. Developer sẽ gọi các API từ layer này để lập trình ứng dụng
Ứng dụng Android thường dùng 4 components chính từ Application Framework là
Activity Manager
Activity là một cửa sổ chứa giao diện người dùng. Activity quản lý các Activity Life cycles.
Content Providers
Một ứng dụng Android mặc định không thể truy cập dữ liệu của ứng dụng khác. Đây cũng là cơ chế bảo mật của Android, theo da sandboxing. ContentProvider cho phép ứng dụng chia sẻ dữ liệu với ứng dụng khác.
Resource Manager
Cho phép truy cập tới những tài nguyên không phải là mã nguồn như chuỗi, cài đặt màu, bố cục giao diện.
Broadcast receivers
Broadcast receiver là một thành phần trong ứng dụng android, nó cho phép lập trình viên đăng ký lắng nghe sự kiện từ hệ thống hoặc sự kiện từ ứng dụng. Tất cả cái receiver cho sự kiện đó được thông báo bởi hệ điều hành Android mỗi khi sự kiện xảy ra.
Ví dụ, ứng dụng có thể đăng ký cho sự kiện ACTION_BOOT_COMMPLETED của hệ thống. Sự kiện này sẽ xảy ra một lần khi hệ thống Android hoàn thành việc khởi động.


Application
Đây là những ứng dụng Android mà user hay sử dụng như Facebook, Gmail. Những ứng dụng này được build trên top layer của Android


Deliver Manager giải thích đến đây, mọi người như vén mây mù thấy trời xanh, tiếng hò reo vang trời dậy đất
“Dù đốt cháy cả dãy Trường Sơn, cũng phải fix hết bug”
Sĩ khí đang hăng, cuder để xăm lên tay hai chữ “Sát Bug” để thể hiện quyết tâm. Quả nhiên, nhờ cuốn Android yếu lược, cuder đã hiểu hơn về hệ điều hành Android, nhờ đó đã fix hết toàn bộ bugs trong thời gian ngắn. Khách hàng hết sức hài lòng.
Nhờ công lại đó, đội dự án để lại tiếng thơm, lưu danh thanh sử…




Đăng nhận xét

0 Nhận xét