1
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
BÁO CÁO THỰC TẬP
LẬP TRÌNH ỨNG DỤNG ANDROID
Cơng ty thực tập: Cơng ty cổ phần VNG
Người phụ trách: Văn Hồng Phương
Thực tập sinh
: Nguyễn Hữu An Nhiên
TP. Hồ Chí Minh, tháng 6 năm 2022
<Nguyễn Hữu An Nhiên>
2
LỜI MỞ ĐẦU
Với sự phát triển của công nghệ, các thiết bị di động ngày càng được phát triển mạnh mẽ
và có những chức năng hỗ trợ cuộc sống của con người tốt hơn. Với tốc độ phát triển của các thiết
bị di động, tốc độ phát triển của ngành lập trình ứng dụng di động cũng tăng trưởng nhanh chóng.
Việt Nam nằm trong top đầu các nước có độ phủ Internet rộng nhất, điện thoại thông minh
đang dần trở thành một phần quan trọng không thể thiếu trong cuộc sống hằng ngày. Ngày càng
nhiều ứng dụng công nghệ được phát triển trên các nền tảng di động. Kèm theo đó là các cơng ty
cơng nghệ lớn, đa quốc gia đang tập trung vào mảng phát triển ứng dụng di động như: Zalo, Grab,
SEA,…
Từ lâu, trong quá trình học tập tại trường, em đã định hướng bản thân trở thành một lập
trình viên Ứng dụng di động chuyên nghiệp nên em đã tìm tịi về các cơng nghệ di động, các ngôn
ngữ và đăng ký các môn chuyên ngành lập trình ứng dụng di động.
Sau quá trình tự học và làm đồ án, em cảm thấy bản thân đã sẵn sàng để xin thực tập để có
thể học hỏi, tiếp thu nhiều kiến thức hơn trong ngành này. Do đó em đã đăng ký mơn thực tập và
bắt đầu tìm kiếm công việc. Rất may mắn cộng với những nỗ lực, em đã trúng tuyển vào Công ty
Cổ phần VNG.
.
<Nguyễn Hữu An Nhiên>
3
LỜI CẢM ƠN
Trân trọng gửi lời cảm ơn Công ty Cổ phần VNG đã tạo điều kiện cho em có cơ hội được
thực tập tại công ty.
Chỉ trong một thời gian ngắn, nhưng nhờ sự chỉ dẫn nhiệt tình của các anh chị đi trước, em
đã tiếp thu được những kiến thức quan trọng để có thể làm được một ứng dụng Android hoàn
thiện. Chân thành cảm ơn các anh chị trong team đã bỏ ra nhiều thời gian,công sức để hướng dẫn
em hoàn thành đợt thực tập này.
Đặc biệt cảm ơn anh Văn Hoàng Phương, đã training Android, hướng dẫn, giúp đỡ cho em
tận tình cả những khó khăn trong cơng việc, đến những khó khăn việc làm quen với mơi trường
mới; cảm ơn anh Nguyễn Hồi Chung đã training chi tiết về các vấn đề kĩ thuật, review code
trong quá trình thực tập; Cảm ơn tất cả các anh chị trong Zalo Group nói chung và team Android
Zing MP3 nói riêng đã nhiệt tình giúp đỡ em trong thời gian qua.
Cũng xin cảm ơn thầy cô trong khoa Cơng nghệ phần mềm đã nhiệt tình hỗ trợ, tạo điều
kiện em làm bài báo cáo này.
<Nguyễn Hữu An Nhiên>
<TPHCM, tháng 6, 2022>
<Nguyễn Hữu An Nhiên>
4
NHẬN XÉT CỦA KHOA
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
<Nguyễn Hữu An Nhiên>
5
Chương 1: Giới thiêu công ty thực tập
1. Giới thiệu công ty Cổ phần VNG
Công ty cổ phần VNG được thành lập vào ngày 9 tháng 9 năm 2004 với tên gọi
VinaGame – đổi tên thành VNG vào năm 2008 – là một công ty cung cấp các dịch vụ
Internet, xuất bản phần mềm, quảng cáo thương mại và kinh doanh trị chơi điện tử.
Cơng ty có trụ sở chính tại VNG Campus (KCX Tân Thuận) Z06 Đường số 13 Phường Tân Thuận Đông - Quận 7 TP.HCM.
Công ty Cổ phần VNG (VNG) vừa lần thứ ba liên tiếp được HR Asia Awards
vinh danh “Nơi làm việc tốt nhất châu Á” nhờ những nỗ lực “Phát triển con người”
không ngừng nghỉ trong suốt 17 năm qua.
Sản phẩm nổi bật của công ty: PUBG Mobile, Tốc Chiến, Zalo, Zing MP3,…
2. Sản phẩm nổi bật của công ty
Zalo:
Ngày 8/08/2012, VNG giới thiệu sản phẩm Zalo-ứng dụng nhắn tin và gọi
điện miễn phí hoạt động trên nền tảng di động. Zalo được cung cấp cho iOS,
Android, Windows Phone, và Nokia Java. Phần mềm hỗ trợ sóng 2G, 2.5G, 3G,
4G và wifi.
Năm 2021, Zalo trở thành ứng dụng nhắn tin được yêu thích nhất tại Việt
Nam.
PUBG Mobile:
<Nguyễn Hữu An Nhiên>
6
PlayerUnknown's Battlegrounds Mobile (viết tắt: PUBGM) là tựa game bắn
súng sinh tồn do PUBG Corporation phát triển và phát hành đầu tiên tại thị trường quốc
tế. Tuy nhiên, vào tháng 3 năm 2018, PUBG mới được Tencent Games và PUBG Corp
hợp tác để cho ra mắt phiên bản di động PUBG Mobile. PUBG Mobile đã chính thức có
mặt tại Việt Nam vào ngày 26 tháng 11 năm 2018 do VNG GAMES hợp tác
cùng Tencent Games và PUBG Corp phát hành đầu tiên trên hệ điều hành iOS và tiếp đến
là hệ điều hành Android vào ngày 27.
Zing MP3:
Ra đời vào tháng 8 năm 2007, Zing MP3 là công cụ nghe và tìm kiếm nhạc
trực tuyến. Sản phẩm này có các ứng dụng trên iOS, Android và Windows Phone.
Tháng 12/2012, Zing MP3 ký hợp đồng bản quyền với Universal Music Group, cho
phép người dùng Việt Nam có thể nghe và download các bản nhạc của Universal
Music (có thu phí).
Đầu năm 2013, Zing MP3 ký kết thỏa thuận kinh doanh kho nhạc hơn 40.000
bài của Hiệp hội Công nghiệp ghi âm Việt Nam (RIAV) và 35.000 tác phẩm âm
nhạc của Trung tâm Bảo vệ quyền tác giả âm nhạc Việt Nam.
Tháng 6/2013, Zing Mp3 ký kết thỏa thuận bản quyền âm nhạc với Sony
Music Group và Youtube.
Hàng năm Zing Mp3 tổ chức giải thưởng âm nhạc Zing Music Awards, lần
đầu tiên vào năm 2010.
Theo thống kê, hiện tại ZingMP3 đang đứng top1 tại cả 2 bảng xếp hạng của
AppStore và PlayStore ở hạng mục Music.
Chương 2: Nội dung thực tập
Đợt thực tập với chủ đề “Lập trình ứng dụng Android” nhằm mục đích giúp sinh viên thực
tập được đào tạo tồn diện về lập trình ứng dụng trên Android, đồng thời rèn luyện những kỹ
năng mềm như làm việc nhóm, thuyết trình, giao tiếp. Tại cơng ty, sinh viên có cơ hội được học
tập, khám phá và làm việc trong một môi trường phát triển ứng dụng chun nghiệp.
1. Tìm hiểu cơng ty và các kỹ năng cơ bản trong công ty
<Nguyễn Hữu An Nhiên>
7
Thời gian : 1 ngày
Nội dung : Giới thiệu về công ty, cách tổ chức của công ty
Được nghe người phụ trách giới thiệu về cơng ty, q trình thành lập và phát triên
(như đã nhắc đến ở trên), quy trình làm việc từ cao xuống thấp, cách thức tổ chức của cơng
ty .
Ngồi ra, thực tập sinh cịn được giới thiệu về cách thức làm việc trong công ty như
thời gian đi làm, các quy định cần phải tuân thủ, cách sử dụng email trong công việc…
Kết quả : Hiểu thêm về cơng ty VNG, q trình thành lập và phát triển. Có thêm các kỹ
năng về việc sử dụng email trong cơng việc, làm việc có kế hoạch, có kỷ luật, có trách
nhiệm hơn.
2. Nghiên cứu kỹ thuật
2.1.
2.2.
Các công cụ làm việc
Thời gian : 2 ngày
Nội dung : Tìm hiểu về các cơng cụ sẽ được sử dụng trong q trình làm việc.
Tìm hiểu về các cơn cụ sẽ được sử dụng trong quá trình làm việc tại VNG như:
- Zalo for work để liên lạc giữa các thành viên.
- Microsoft Outlook để liên lạc qua mail
- Git để quản lý mã nguồn
- Android Studio
Thực hiện : Thực hành sử dụng các phần mềm đã nêu trên.
Kết quả : Hiểu được về quy trình làm việc và các cơng cụ dùng trong quy trình
Tìm hiểu ngơn ngữ Java và Kotlin
Thời gian : 5 ngày (1 tuần)
Nội dung : Được giới thiệu về ngơn ngữ lập trình Java và Kotlin, những kiến thức quan
trọng cho việc tối ưu trên Android.
-
Các cú pháp, câu lệnh cơ bản của Java.
-
So sánh Java và Kotlin
-
Làm quen với lập trình Android
-
Xây dựng ứng dụng Android cơ bản
Thực hiện :
- Tham gia đầy đủ các buổi training của công ty.
- Làm các bài thực hành, kiểm tra về kiến thức đã học.
Kết quả :
<Nguyễn Hữu An Nhiên>
8
2.3.
- Nâng cao kỹ năng lập trình Android
- Có được những kiến thức quan trọng cho việc lập trình mobile sau này.
Tìm hiểu về thư viện ExoPlayer
Thời gian : 1 tháng
Nội dung: Các kiến thức cơ bản về ExoPlayer.
-
-
ExoPlayer là một thư viện open-source được phát triển bởi Google nhằm xử lý
video và audio trên Android. Hỗ trợ Dynamic Adaptive Streaming thông qua giao
thức HTTP (DASH) và SmoothStreaming, điều mà MediaPlayer khơng thể làm
được.
Ngồi ra ExoPlayer cịn cung cấp khả năng tùy chỉnh và mở rộng cao. ExoPlayer
được thiết kế đặc biệt, cho phép nhiều thành phần được thay thế và tuỳ chỉnh khi
thực thi.
Thực hiện :
-
Tham gia research về mã nguồn của thư viện ExoPlayer.
Vẽ UML về cơ chế của ExoPlayer và tạo các ứng dụng demo sử dụng ExoPlayer
Nghiên cứu về cơ chế buffer, render, caching,…
So sánh 2 phiên bản 2.9.6 và 2.16.1
Kết quả :
-
2.4.
Cơ bản nắm được cách hoạt của thư viện ExoPlayer
Có thể viết được ứng dụng phát nhạc/video sử dụng ExoPlayer có hỗ trợ cơ chế
cache, pre-cache, preloading…
Clean Architecture
Thời gian : 1 tuần
Nội dung : Tìm hiểu về kiến trúc Clean Architecture
-
Định nghĩa về Clean Architecture: Clean Architecture được xây dựng dựa trên tư
tưởng "độc lập" kết hợp với các nguyên lý thiết kế hướng đối tượng(đại diện tiêu
biểu là Dependency Inversion). Độc lập ở đây nghĩa là việc project không bị phụ
thuộc vào framework và các cơng cụ sử dụng trong q trình kiểm thử.
<Nguyễn Hữu An Nhiên>
9
-
Kiến trúc của Clean Architecture chia thành 4 layer với một quy tắc phụ thuộc. Các
layer bên trong không nên biết bất kỳ điều gì về các layer bên ngồi. Điều này có
nghĩa là nó có quan hệ phụ thuộc nên "hướng" vào bên trong.
Thực hiện :
-
Tham gia đầy đủ các buổi training.
Tạo ra những ứng dụng cơ bản, có áp dụng kiến trúc Clean Architecture và mơ hình
MVP
Kết quả: Cơ bản nắm được kiến thức về Clean Architecture, mô hình MVP trong lập
trình Android
2.5.
Dependency Injection & thư viện Dagger 2
Thời gian : 1 tuần
Nội dung : Tìm hiểu khái niệm Dependency Injection và thư viện Dagger 2.
-
Khái niệm Dependency Injection: Dependency Injection được xây dựng dựa trên
khái niệm Inversion of Control. Nghĩa là các phụ thuộc của 1 class chỉ nên được
cung cấp từ bên ngoài. Dependency injection là một kĩ thuật trong đó một object
(hoặc một static method) cung cấp các dependencies của một object khác. Một
dependency là một object mà có thể sử dụng trong ứng dụng.
-
Thư viện Dagger 2: Dagger 2 là một dependency injection framework thuộc dạng
compile-time và fully static. Tách biệt khởi tạo/sử dụng, dễ dàng test hơn (unit test
<Nguyễn Hữu An Nhiên>
10
và function), khả năng mở rộng tốt hơn - đây chỉ là một vài lợi ích từ việc sử dụng
depedency injection framework như Dagger 2.
Thực hiện :
-
Tham gia đầy đủ các buổi training.
Tạo ra ứng dụng demo cơ bản, có áp dụng Dependency Injection và thư viện Dagger
2.
Kết quả: Cơ bản nắm được kiến thức về Dependency Injection, Dagger và một số thư
viện liên quan như Hilt, Koin,…
2.6.
Tìm hiểu về xử lý bất đồng bộ và RxJava
Thời gian : 2 tuần
Nội dung : Tìm hiểu về lập trình bất đồng bộ, đa luồng, thư viện RxJava.
Thực hiện:
-
Tham gia các buổi training và thực hiện các bài tập do trainer đề ra
Kết quả: Nắm được cơ bản về các thành phần, các operator của RxJava. Có thể sử áp
dụng để xử lý bất đồng bộ.
2.7.
Tìm hiểu về các cơng cụ phổ biến trong việc lập trình Android
Thời gian : 2 tuần
Nội dung : Tìm hiểu về Retrofit, Volley, Glide, Picasso
-
Khái niệm Glide: Glide là một thư viện open source hỗ trợ load ảnh trên Android.
Dùng Glide sẽ đơn giản hóa các công việc cần làm khi sử dụng một bức ảnh trong
Android đi rất nhiều. Chúng ta không cần quan tâm đến việc decoding, memory and
disk caching mà thay vào đó chỉ cần sử dụng interface rất đơn giản từ Glide.
-
Khái niệm Picasso: Picaso là một thư viện tải và xử lý hình ảnh cho Android. Nó
được tạo ra và duy trì bởi Square, và cung cấp việc tải và xử lý hình ảnh. Nó đơn
giản hố q trình hiển thị hình ảnh từ một nguồn bên ngồi. Trong nhiều trường
hợp, chỉ một ít code là đủ để cài đặt thư việc đơn giản này.
<Nguyễn Hữu An Nhiên>
11
-
Khái niệm Retrofit: Retrofit là một công nghệ được phát triển bởi Square, được xây
dựng dựa trên rất nhiều công nghệ mạnh mẽ cho phép giải quyết tốt các yêu cầu từ
phía client và server một cách nhanh và hiệu quả nhất.
-
Khái niệm Volley: Volley library Android là thư viện networking cho các dự án
Android. Volley được dùng để quản lý các network request, giúp cho developer đơn
giản hóa việc thực hiện kết nối và xử lý kết quả trả về từ server.
Kết quả: Nắm được cơ bản về cách sử dụng các công cụ này hiệu quả
3. Thực hiện project
Sau hai tháng được training và thực hành, thực tập sinh đã nắm được những kiến thực cơ
bản về lập trình ứng dụng Android. Sau đó sinh viên bắt đầu thực hiện kết hợp các kiến
thức đã học vào việc lập trình một ứng dụng hồn chỉnh.
4. Lịch làm việc
Tuần
Cơng việc
-
1
-
-
3
4
Nhận xét của người
hướng dẫn
- Anh Văn Hoàng
Phương
- Anh Nguyễn
Hoài Chung
- Team HR
- Anh Văn Hồng
Phương
- Anh Nguyễn
Hồi Chung
- Tìm hiểu về Clean - Anh Văn Hoàng
Architecture
Phương
- Anh Nguyễn
Hoài Chung
- Tìm
hiểu
về - Anh Văn Hồng
Dependency
Phương
Injection
- Anh Nguyễn
Hồi Chung
2
Tìm hiểu về công ty,
cách tổ chức của
công ty.
Làm quen với các
công cụ làm việc
trong cơng ty.
Học cách trao đổi,
làm việc qua email.
Tìm hiểu và nghiên
cứu về thư viện
ExoPlayer
Người hướng dẫn
Mức
độ
hoàn
thành
<Nguyễn Hữu An Nhiên>
12
5
6
Tìm hiểu về thư
viện Dagger 2
Tìm
hiểu
về
Reactive
Programming
Tìm hiểu về RxJava
Tìm hiểu về các
cơng cụ trong lập
trình Android
- Anh Văn Hồng
Phương
- Anh Nguyễn
Hoài Chung
- Anh Văn Hoàng
Phương
- Anh Nguyễn
Hoài Chung
Chương 3: Chi tiết về project
1. Giới thiệu về ứng dụng
Ứng dụng Muzik là một mini music player project bao gồm các tính năng chính: Stream
nhạc từ server, phát nhạc từ thiết bị người dùng, stream video.
Ngơn ngữ lập trình: Java
Các thư viện liên quan: ExoPlayer, RxJava3, Retrofit, Glide, Dagger 2, Palette,…
Các design pattern ó ỏp dng: Synchronized Singleton, Faỗade, Observer
1.1.
Tớnh nng streaming nhạc
Mơ tả: Muzik hỗ trợ người dùng có thể stream nhạc trực tuyến từ các nguồn khác
nhau. Sau khi người dùng chọn bài hát bất kỳ trên màn hình chính thì sẽ khởi động
giao diện của trình phát nhạc. Ngồi bài hát người dùng vừa chọn thì player cũng
sẽ có lưu lại playlist người dùng vừa chọn và auto-resume khi đã phát xong nhạc.
Đồng thời, sau khi phát nhạc thì cũng sẽ khởi tạo 1 background thread để thực hiện
cơ chế preload. Tức là các bài hát tiếp theo sẽ được lưu trước vào bộ nhớ cache,
điều này sẽ giảm thời gian chờ đợi trong lúc chuyển bài đồng thời nếu trong lúc
phát nhạc mà người dùng bị mất kết nối mạng thì bài hát cũng đã được nạp sẵn,
vẫn có thể tiếp tục phát nhạc mà khơng ảnh hưởng trải nghiệm người dùng. Các
bài hát đã phát đều sẽ được lưu vào bộ nhớ cache, nếu lần sau người dùng nghe lại
bài hát đó sẽ sử dụng data từ bộ nhớ cache thay vì phải lấy nhạc từ phía server về.
<Nguyễn Hữu An Nhiên>
13
Giao diện màn hình chính
Màn hình Music Player
<Nguyễn Hữu An Nhiên>
14
Màu nền của Player thay đổi theo từng bài hát
1.2.
Tính năng play video
Mơ tả: Tính năng phát video cho phép người dùng phát các video từ server. Giao
diện của màn hình video player được thiết kế theo giao diện của các nền tảng
video dọc phổ biến như Tiktok, Facebook Reels,… Tương tự nhạc, các video
cũng sẽ hỗ trợ việc cache, pre-load video nhằm mang đến trải nghiệm tốt nhất
cho người dùng. Để tối ưu hoá hiệu năng và hỗ trợ trên các thiết bị cấu hình thấp,
thay vì mỗi video sẽ phải tạo mới 1 video player. Ứng dụng đã tính tốn để sử
<Nguyễn Hữu An Nhiên>
15
dụng lại các đối tượng video player này nhằm tiết kiệm tài ngun hệ thống.
Màn hình Video Player
1.3.
Tính năng phát nhạc từ thiết bị:
Muzik cho phép người dùng có thể scan và tìm kiếm tất cả bài hát có trên thiết bị.
Điều này giúp cho người dùng có thể tải và phát nhạc mà không yêu cầu kết nối
mạng.
<Nguyễn Hữu An Nhiên>
16
Giao diện màn hình phát nhạc từ thiết bị
1.4.
Kiến trúc ứng dụng và tổ chức cây thư mục:
-
Muzik được viết dựa trên kiến trúc Clean Architecture và mơ hình MVP.
-
Ứng dụng được chia thành 3 module chính(3 tầng): App, Data, Domain.
<Nguyễn Hữu An Nhiên>
17
1.4.1. Tầng Domain:
Tầng domain chứa các business logic của toàn bộ project. Định nghĩa các
object chứa các thông tin liên quan đến ứng dụng. Ngồi ra cịn chứa các interface
của các repositories và các usecase liên quan.
1.4.2. Tầng Data:
Sẽ implement các abstract class và interface từ Domain layer. Mục đích là
để cô lập tầng Data khỏi tầng App để chúng ta có thể dễ dàng thay đổi nó
khi cần.
<Nguyễn Hữu An Nhiên>
18
1.4.3. Tầng App:
Chứa những thứ liên quan đến UI và Android như là view
architecture(MVP, MVVM...), fragment, activity,... Presenter không phụ
thuộc vào các Android class để dễ kiểm thử. Layer này là nơi tập trung của
các chi tiết. Chúng ta sẽ giữ những thứ này ở bên ngồi, nơi chúng khó có
thể gây ảnh hưởng đến các phần bên trong.
<Nguyễn Hữu An Nhiên>
19
<Nguyễn Hữu An Nhiên>
20
2. Thực hiện:
Sau thời gian trau dồi kiến thức từ các buổi training và tự nghiên cứu tài liệu. Cộng
với sự giúp đỡ của các anh mentor và các thành viên trong team Android ZingMP3.
Sinh viên đã hoàn thành xong dự án.
<Nguyễn Hữu An Nhiên>
21
TỔNG KẾT
Như vậy, chỉ trong vòng một tháng ngắn ngủi, em đã trau dồi được rất nhiều kiến thực
cũng như trải nghiệm thực tế về lập trình Android. Ứng dụng demo cũng đã đạt được các tính
năng cơ bản ban đầu. Do thời gian có hạn nên tính năng ứng dụng cịn đơn giản, hình ảnh chưa
được đẹp như mong đợi. Nhưng do ứng dụng phát triển theo Clean Architecture nên sẽ dễ dàng
phát triển thêm các tính năng mới.
Chân thành cảm ơn sự giúp đỡ của các anh chị team Media, Zalo đã giúp em hoàn thành
thời gian thực tập tại VNG.
<Nguyễn Hữu An Nhiên>