Chuyển đến nội dung chính

The Art of download size optimization for Android applications in practice

 


Này các cậu! Tôi hy vọng rằng mọi người đang làm tốt.


Vì vậy, hôm nay tôi quyết định chia sẻ một trong những phương pháp phát hành ứng dụng

quan trọng nhất mà tôi đã học được trong hành trình phát triển ứng dụng Android của mình.

Nó có thể giúp bạn tiết kiệm rất nhiều thời gian và cũng tiết kiệm cho người dùng cuối một

số MB và bạn sẽ có được tỷ lệ tải xuống hàng ngày được cải thiện.


Hãy bắt đầu nhanh bằng cách cho thấy tầm quan trọng của việc tối ưu hóa ứng dụng

Android của bạn. Kích thước thực sự quan trọng, đặc biệt là đối với các ứng dụng nhắm

mục tiêu đến người dùng ở thị trường các nước đang phát triển (đặc biệt là Sudan).

Một nghiên cứu gần đây cho thấy gần 70% người dùng cân nhắc kích thước ứng dụng trước

khi cài đặt chúng.

Về mặt kỹ thuật, tác động đang được thể hiện đối với tốc độ tải của ứng dụng, dung lượng bộ nhớ sử dụng và lượng điện năng tiêu thụ.



Trước tiên, bạn nên tìm hiểu tình hình phân phối kích thước ứng dụng hiện tại của mình trên các thành phần ứng dụng, vì sẽ dễ dàng hơn trong việc lập kế hoạch các bước tối ưu hóa của bạn…



Để bắt đầu, bạn phải phân tích bản dựng ứng dụng của mình bằng cách sử dụng công cụ Analyze APK trên Android Studio, công cụ này chấp nhận cả định dạng .apk và .aab





Giờ đây, bạn đã có tầm nhìn rõ ràng về mức độ đóng góp của mỗi thành phần trên ứng

dụng vào kích thước xây dựng ứng dụng, vì vậy… Hãy bắt đầu

1. Code Shrinking

  • Remove Unused Libraries

Trình phân tích sẽ giúp bạn biết chính xác cách "triển khai" libs đang đóng góp vào kích

thước bản phát hành ứng dụng vì sẽ dễ dàng hơn khi đưa ra quyết định loại bỏ những

phần không sử dụng.



  • Use Proguard


Vì vậy, từ bây giờ, tôi sẽ giả sử bạn đã xóa tất cả các lib không cần thiết mà bạn không

muốn, bạn chỉ giữ lại những lib cần thiết, nhưng một số lib vẫn có kích thước đáng kể? Đây

là một trong những vấn đề mà Proguard ở đây để giải quyết.


Proguard có 2 mục tiêu chính:


1- Thu nhỏ: Xóa mã không sử dụng trong ứng dụng của bạn

2- Code obfuscation: Đổi tên / rút ngắn tên của các lớp, phương thức, biến, v.v., điều này

cũng rất được khuyến khích vì lý do bảo mật!


Chỉ cần thay đổi minifyEnabled thành true trong tệp build.gradle của bạn.


android {
...
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard- android.txt'),
''
}
}
}

Những lưu ý khi sử dụng Proguard:


  • Đảm bảo rằng bạn biết mình sẽ làm gì, điều này có thể dẫn đến ứng dụng bị hỏng nếu không được sử dụng đúng cách, bạn phải thiết lập các quy tắc phù hợp bằng cách kiểm tra từng yêu cầu quy tắc của thư viện bên thứ ba Proguard.


  • Nếu bạn không sử dụng các tên được tuần tự hóa trên các mô hình phản hồi HTTP của mình, bạn nên loại trừ các mô hình này để Proguard xử lý.


Tìm hiểu thêm về Proguard: https://developer.android.com/studio/build/shrink-code


2. Optimize app resources


  • USE Vector Drawable


Sử dụng Vector Drawable là một trong những cách tốt nhất để giảm kích thước đáng kể.

Để bắt đầu sử dụng Vector Drawable, bạn chỉ muốn làm việc với UI Sheets, sau đó bạn chỉ cần nhập tất cả các biểu tượng cần thiết ở định dạng SVG, sau đó sử dụng Vector Asset sẽ chuyển đổi nó từ SVG sang Vector Drawable.




  • USE WEBP Images format


Định dạng hình ảnh WebP là định dạng ưu tiên cho các ứng dụng Android đang được Google phát triển và rất khuyến khích.

Điều này có thể được thực hiện đơn giản bằng cách chuyển đổi nội dung hình ảnh hiện có từ PNG / JPG thành WEBP vì nó có thể tối ưu hóa kích thước ứng dụng ở mức thấp nhất lên đến 60% kích thước ban đầu trong khi vẫn giữ chất lượng hình ảnh gần như tương tự, trong trường hợp của tôi, một trong những các trường hợp sử dụng chính: là chuyển đổi hình ảnh toàn màn hình mà có thể được sử dụng nhiều nhất trên màn hình giới thiệu ứng dụng.



  • Compress Images


Đôi khi bạn sẽ thấy ứng dụng của mình vẫn đang sử dụng PNG, vì vậy bạn nên nén

chúng bằng các công cụ chất lượng hình ảnh như TinyPNG.


  • Ship only the languages your app is using


Hãy xem các thành phần ứng dụng ở trên, theo mặc định, hệ thống xây dựng đang gửi

nhiều thư mục giá trị “localized resources”cho mỗi ngôn ngữ, điều này sẽ ảnh hưởng đến

kích thước ứng dụng bằng cách nào đó bằng cách xóa tất cả tài nguyên ngôn ngữ không

sử dụng.


Bạn chỉ phải ghi đè các cấu hình resconfigs mặc định bằng cách thêm các resconfigs phù

hợp như được hiển thị bên dưới vào phần cấu hình mặc định của bạn.


android {
...
defaultConfig {
...
resConfigs "en,ar"
...
}
...
}

  • Shrink resources


Thao tác này sẽ xóa tất cả các tài nguyên không được sử dụng trong dự án, áp dụng nó bằng cách thêm shrinkResources true vào loại bản phát hành của bạn.


android {
...
buildTypes {
release {
shrinkResources true
}
}
}

  • Use Lottie Animation instead of GIF files


Sử dụng Gifs cho các cảnh đồ họa hoạt hình trong SplashScreen là một việc làm rất tệ thay vì kích thước khổng lồ của nó, nó tiêu tốn nhiều tài nguyên bộ nhớ hơn và mang lại chất lượng rất tệ, bạn nên tránh điều đó, thay vào đó, bạn nên sử dụng hoạt ảnh Lottie.

Bạn có thể tìm thấy một vài hoạt ảnh tạo sẵn trực tuyến hoặc tốt hơn là yêu cầu nhà thiết kế UI / UX của bạn tùy chỉnh một cái phù hợp bằng cách sử dụng Adobe Effects, sau đó hoạt ảnh có thể được xuất ở định dạng JSON nhỏ có thể được hiển thị bằng cách sử dụng thư viện hoạt ảnh Lottie.


https://lottiefiles.com/

https://github.com/airbnb/lottie-android






3. Advanced Tips and Tricks


Woah Xin chúc mừng! Bạn đã cố gắng tối ưu hóa kích thước ứng dụng của mình một cách

tốt nhất để phần thưởng bạn sẽ tìm thấy dưới đây là hai Pro tips.


Điều đầu tiên sẽ cho bạn biết cách tốt hơn để cung cấp ứng dụng của bạn cho người dùng cuối.

Cái thứ hai, đó là một mẹo hay mà tôi học được từ một bài báo về kỹ thuật TikTok bằng cách

sử dụng một công cụ do ByteDance viết.


  • Implementing Multi-Module app architecture: Dynamic Feature:


- Case Scenario: GO


Tại GO, chúng tôi đang triển khai điều này trong 2 mô-đun khác nhau mà không nhất thiết

phải được vận chuyển trong gói tải xuống ban đầu từ cửa hàng Google play, chúng tôi đã

sử dụng để đóng gói hai mô-đun, Mô-đun xếp hạng và trình xem trước ảnh toàn cảnh 360 “xử

lý ảnh toàn cảnh 360 cho xem trước trạm xe buýt ”vì chúng phụ thuộc vào một vài biểu

tượng cảm xúc hoạt hình và tệp nhị phân chiếm gần 2,5 MB, hai tính năng này có thể được

tải xuống sau sau khi người dùng cài đặt thành công ứng dụng cơ sở.

https://play.google.com/store/apps/details?id=com.goteclabs.customer


- Case Scenario: Mobile Games


Tôi đang phát triển một số trò chơi dành cho thiết bị di động và tôi đang xem xét một lý do

chính đã giúp tôi rất nhiều để đạt được hơn 1 triệu lượt tải xuống là kích thước tải xuống

trò chơi, vâng, chắc chắn đó là một lợi thế cạnh tranh, trường hợp ở đây là tại một số thời

điểm tôi đã sử dụng tính năng trò chuyện thoại và kết quả của việc triển khai nó sẽ ảnh

hưởng đến kích thước trò chơi tổng thể khoảng gần 70% vì việc triển khai phát trực tuyến

bằng giọng nói phụ thuộc vào các tệp nhị phân nặng, thách thức ở đây là giải quyết vấn đề

này mà không phải hy sinh kích thước tải xuống ban đầu của trò chơi như Tôi đã đề cập ở

phần giới thiệu vì nó sẽ ảnh hưởng ngay đến tốc độ tải xuống hàng ngày.

https://play.google.com/store/apps/details?id=klma.online.ayman


Việc triển khai mô-đun Dynamic Feature nhằm giải quyết những vấn đề này.




Tôi sẽ không đi sâu vào chi tiết triển khai của nó, nhưng điểm chính ở đây, tính năng động của bạn sẽ chỉ được yêu cầu tải xuống một lần vào thời điểm người dùng cuối cần.


  • Resources obfuscation: using aabResGuard:


AabResGuard là một công cụ xáo trộn tài nguyên được sử dụng bởi ứng dụng xã hội hàng đầu Tiktok.


Điều này có nghĩa là hoạt động giống như Proguard, nhưng sự khác biệt chính ở đây là Proguard chỉ quan tâm đến bytecode thực thi chứ không phải tài nguyên ứng dụng “/res”


Hehehe, Về tối ưu hóa kích thước ứng dụng của bạn, đây sẽ là gạch đầu dòng cuối cùng của bạn!




Nó sẽ giúp bạn giảm kích thước ứng dụng của mình đối với một số KB và trong hầu hết

các trường hợp, không quá 200 KB, tốt hơn nên đề cập rằng nó cũng rất được khuyến khích

vì lý do bảo mật, tôi đã triển khai nó trên nhiều dự án mà tôi đang thực hiện.

Nguồn: https://github.com/bytedance/AabResGuard


Results?



Trước một vài tháng, tôi tham gia một công ty khởi nghiệp ở UAE có tên là Aleem, sau khi hoàn thành quá trình chuyển giao vì việc triển khai mã được viết tốt, tôi quyết định bắt đầu tối ưu hóa kích thước tải xuống hiện tại từ gần 8MB lên 5 MB, điều này đã tăng tốc đáng kể lượt tải xuống ứng dụng từ 500+ đến 10K+ trong vài tuần.




Tôi đảm bảo bạn bằng cách làm theo các bước sau có thể giúp bạn rất nhiều để giữ cho ứng dụng của bạn ở mức trung bình 5 ~ 10 Mb kích thước tải xuống.

Hẹn gặp lại các bạn trong những bài viết tiếp theo 😄❤️

Cảm ơn bạn!


Nhận xét

Bài đăng phổ biến từ blog này

Jetpack Compose VS SwiftUI !VS Flutter

  Việc phát triển Android đã trở nên dễ dàng hơn khi các bản cập nhật liên tục đến. Sau bản cập nhật 2020.3.1, rất nhiều thứ đã thay đổi. Nhưng thay đổi chính mà tôi nghĩ hầu hết các nhà phát triển phải chờ đợi là Jetpack Compose cho ứng dụng sản xuất. Và Kotlin là lựa chọn duy nhất cho jetpack Compose, cũng là ngôn ngữ được ưu tiên. Để biết thêm chi tiết hoặc các thay đổi trên Jetpack Compose, bạn có thể truy cập vào https://developer.android.com/jetpack/compose Tương tự, IOS Development cũng cung cấp một tùy chọn để phát triển khai báo, SwiftUI. Trong IDE, không có thay đổi nào do điều này. Nhưng khái niệm gần giống với Jetpack Compose. Thay vì bảng phân cảnh, chúng tôi tạo giao diện người dùng bằng Swift. Để biết thêm chi tiết hoặc các thay đổi trên SwiftUI, hãy truy cập https://developer.apple.com/xcode/swiftui/ Hãy xem cách cả hai hoạt động bằng cách sử dụng một dự án demo. Tôi đã lấy một số ví dụ về số lần chạm tương tự của Flutter. 1. Android Jetpack Compose Chúng tôi có thể tạo

Thiết kế giao diện với DotNetBar (Phần 1)

Đây là phiên bản DotNetBar hỗ trợ C# và Visual Basic https://www.dropbox.com/s/wx80jpvgnlrmtux/DotNetBar.rar  , phiên bản này hỗ trợ giao diện Metro cực kỳ “dễ thương” Các bạn load về và cài đặt, khi cài đặt xong sẽ có source code mẫu của tất cả các control. Để sử dụng được các control của DotNetBar các bạn nhớ add item vào controls box. Thiết kế giao diện với DotNetBar, giao diện sẽ rất đẹp. Link các video hướng dẫn chi tiết cách sử dụng và coding: http://www.devcomponents.com/dotnetbar/movies.aspx Hiện tại DotNetBar có rất nhiều công cụ cực mạnh, trong đó có 3 công cụ dưới đây: DotNetBar for Windows Forms Requires with Visual Studio 2003, 2005, 2008, 2010 or 2012.   DotNetBar for WPF Requires with Visual Studio 2010 or 2012 and Windows Presentation Foundation.   DotNetBar for Silverlight Requires with Visual Studio 2010 or 2012 and Silverlight. Dưới đây là một số hình ảnh về các control trong DotnetBar.   Metro User Interface  controls with Metro Tiles, toolbars, slide panels, forms,

Một số bài tập Winform C#

Một số bài tập: 1. Mô phỏng game đoán số. Luật chơi:         o Đúng số và đúng vị trí   +         o Đúng số mà sai vị trí      ?         o Sai số và sai vị trí          -         . . .         - Kết quả được tạo ngẫu nhiên từ các số có 4 chữ số.         - Các chữ số có giá trị từ 0-6.         - Người chơi có 6 lần đoán. Chương trình tham khảo: 2. In số điện tử Yêu cầu: người dùng nhập vào 1 số ( hoặc 1 chuỗi số) yêu cầu in ra số đó dưới dạng số điện tử. Chương trình tham khảo: 3. Mô phỏng game CARO  (update) 4. Mô phỏng game DÒ MÌN (update)