Skip to content
Back to Blog
informational

File APK là gì? Giải thích về các gói Android

2026-05-17 8 phút đọc

Câu trả lời ngắn gọn: APK là trình chứa ứng dụng của Android

File APK, hay Android Package Kit, là định dạng file mà Android sử dụng để phân phối và cài đặt ứng dụng. Nó giống như file .exe của Windows hay .dmg của macOS phiên bản Android, nhưng nó đóng gói mọi thứ mà một ứng dụng cần vào một file nén duy nhất. Bên trong, bạn sẽ tìm thấy mã đã biên dịch, tài nguyên, asset, chứng chỉ và một file manifest cho hệ điều hành biết ứng dụng được phép làm gì. Định dạng này thực chất chỉ là một file ZIP chuyên dụng. Thật đấy. Bạn cứ đổi tên bất kỳ file .apk nào thành .zip là có thể mở nó bằng các công cụ lưu trữ tiêu chuẩn như 7-Zip. Bên trong, bạn sẽ thấy một cấu trúc tiêu chuẩn: AndroidManifest.xml đóng vai trò như thẻ căn cước của ứng dụng, classes.dex chứa mã đã biên dịch, thư mục res/ chứa các layout và hình ảnh, và thư mục META-INF/ lưu trữ các chữ ký mật mã để chứng minh gói này là thật. Mọi ứng dụng bạn tải từ Google Play Store đều được phân phối dưới dạng APK. Chỉ là bạn không bao giờ thấy file đó vì Play Store quản lý việc download và cài đặt một cách âm thầm. Khi bạn lấy một ứng dụng từ nơi khác—một quá trình gọi là sideloading—bạn đang tự mình xử lý file APK. Sideloading là một tính năng hoàn toàn hợp pháp và được Android hỗ trợ, nhưng nó đòi hỏi bạn phải bật một tùy chọn: kích hoạt 'Cài đặt ứng dụng không xác định' trong Cài đặt > Ứng dụng > Quyền truy cập đặc biệt của ứng dụng trên Android 8+, hoặc tùy chọn 'Nguồn không xác định' cũ trong Cài đặt > Bảo mật trên Android 7 trở về trước.

Thực sự bên trong một file APK có gì?

Hãy cùng 'mổ xẻ' một file APK thực tế để xem một ứng dụng Android được xây dựng như thế nào. Ví dụ, một ứng dụng thời tiết điển hình có thể là một file 18–25 MB chứa hàng trăm file riêng lẻ, tất cả được sắp xếp vào các thư mục cụ thể. Đầu tiên là AndroidManifest.xml. Bên trong APK, nó không phải là file văn bản mà con người đọc được như lúc nhà phát triển viết; nó là một file XML nhị phân đã được nén (AXML). File này là linh hồn của ứng dụng. Nó khai báo tên gói (như com.example.weatherapp), phiên bản SDK Android tối thiểu và mục tiêu, mọi màn hình (Activity) và tác vụ nền (Service) mà ứng dụng sử dụng, và tất cả các quyền mà nó cần, từ INTERNET đến ACCESS_FINE_LOCATION. Tiếp theo, bạn có classes.dex. File này—và đôi khi là classes2.dex hoặc classes3.dex đối với các ứng dụng lớn—chứa logic ứng dụng đã được biên dịch. DEX là viết tắt của Dalvik Executable. Mặc dù các thiết bị hiện đại sử dụng Android Runtime (ART) thay vì máy ảo Dalvik cũ, cái tên này vẫn được giữ lại. Thư mục res/ là nơi chứa tất cả các asset không phải là code. Nó chứa đầy các file layout XML, các chuỗi dịch, màu sắc và hiệu ứng hoạt hình. Bất kỳ ai đã từng phát triển cho Android đều biết rõ thư mục này; nó cũng là nơi chứa các hình ảnh drawable được sắp xếp theo nhiều mức mật độ điểm ảnh (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi). Một icon nút bấm duy nhất có thể tồn tại ở năm độ phân giải khác nhau để Android có thể chọn ra cái hoàn hảo nhất cho bất kỳ màn hình nào. Một file đi kèm, resources.arsc, là một bảng đã được biên dịch để ánh xạ các ID tài nguyên tới các file này, cho phép code tìm thấy R.drawable.ic_launcher khi chạy. Thư mục lib/ chứa các thư viện đã biên dịch gốc (file .so), được sắp xếp theo kiến trúc CPU: armeabi-v7a, arm64-v8a, x86, và x86_64. Mặc dù không phải ứng dụng nào cũng cần chúng, bạn gần như luôn tìm thấy chúng trong các game và các ứng dụng đòi hỏi hiệu năng cao khác.

APK và AAB: Tại sao Google thay đổi định dạng phân phối

Vào tháng 8 năm 2021, Google đã thay đổi cuộc chơi đối với các nhà phát triển bằng cách yêu cầu các ứng dụng mới trên Play Store phải được gửi dưới dạng Android App Bundles (.aab) thay vì APK. Sự khác biệt này rất quan trọng nếu bạn đang cố gắng cài đặt một ứng dụng thủ công và không hiểu tại sao file .aab đó từ GitHub lại không hoạt động. Đây là điều quan trọng nhất cần hiểu: AAB là định dạng *xuất bản*, không phải định dạng *cài đặt*. Nhà phát triển đóng gói mọi thứ vào AAB—code và tài nguyên cho mọi mật độ màn hình, kiến trúc CPU và ngôn ngữ. Khi AAB đó được tải lên Google Play, máy chủ của Google sẽ sử dụng nó như một bản thiết kế để xây dựng và phân phối một file APK (hoặc một bộ các file APK riêng lẻ) được tối ưu hóa cao dành riêng cho thiết bị của bạn. Nếu bạn có một chiếc Pixel 7 dùng tiếng Pháp, bạn sẽ nhận được một file APK chỉ có thư viện arm64-v8a, tài nguyên xxhdpi và các chuỗi văn bản tiếng Pháp. Điều này làm cho file download nhỏ hơn 15–40% so với một file APK 'một kích cỡ cho tất cả'. Đó chính là lý do tại sao bạn không thể cứ tải một file AAB về và cài đặt nó. Điện thoại của bạn không biết cách phân tích gói bundle và trích xuất những gì nó cần. Trên một trang như GitHub, bạn sẽ tìm thấy một file APK universal (một file lớn hơn hoạt động ở mọi nơi) hoặc một bộ sưu tập các file APK riêng lẻ, đòi hỏi một công cụ đặc biệt như SAI (Split APKs Installer) để ghép chúng lại với nhau. Khi nói đến sideloading, file APK cổ điển vẫn là vua. Đó là định dạng mà bạn sẽ thực sự làm việc. Các trang web uy tín lưu trữ APK để cài đặt thủ công, như APKMirror, cung cấp các biến thể APK universal này vì người dùng cuối có thể cài đặt chúng trực tiếp mà không cần thêm bước nào.

Cách mở, kiểm tra và chuyển đổi file APK trên PC

Có thể bạn sẽ cần làm việc với một file APK trên máy tính của mình vì những lý do hoàn toàn chính đáng. Có thể bạn muốn trích xuất icon của một ứng dụng ở độ phân giải đầy đủ, kiểm tra các quyền của nó trước khi cài đặt, lấy ra các chuỗi dịch, hoặc chuyển đổi một số asset bên trong của nó sang định dạng dễ sử dụng hơn. Để lấy asset đơn giản, chỉ cần đổi tên file APK thành .zip là bạn đã có thể làm được khá nhiều việc rồi. Nhưng để kiểm tra thực sự, đặc biệt là để đọc các file XML nhị phân, bạn cần một công cụ chuyên dụng. Tôi luôn đề xuất apktool. Nó giải mã các file manifest và tài nguyên nhị phân trở lại thành văn bản mà con người có thể đọc được. Chạy lệnh `apktool d myapp.apk` trong terminal sẽ giải nén mọi thứ vào một thư mục, cho phép bạn dễ dàng đọc mọi quyền được yêu cầu hoặc xem ứng dụng được xây dựng cho cấp độ API Android nào. Khi mục tiêu của bạn cụ thể là trích xuất và chuyển đổi các asset hình ảnh, một công cụ như CocoConvert cung cấp một quy trình làm việc nhanh hơn nhiều. Thay vì phải giải nén thủ công và đào sâu qua các thư mục `res/` lồng nhau, bạn có thể tải trực tiếp file APK lên. CocoConvert cho phép bạn lấy ra các icon PNG, màn hình chờ và đồ họa giao diện người dùng, sau đó chuyển đổi chúng sang các định dạng như SVG, WebP hoặc JPEG ở độ phân giải bạn muốn. Nó tiết kiệm rất nhiều thời gian cho công việc cụ thể này. Tuy nhiên, hãy nói rõ về phạm vi. CocoConvert được xây dựng để chuyển đổi định dạng file, không phải để phân tích code sâu. Nếu mục tiêu của bạn là dịch ngược bytecode Dalvik trở lại mã nguồn Java, bạn sẽ cần một trình dịch ngược chuyên dụng như jadx hoặc bộ đôi kinh điển dex2jar/JD-GUI. Đó là những công cụ mạnh mẽ dành cho nhà phát triển. Tương tự, CocoConvert sẽ không đóng gói lại hoặc ký lại một file APK đã sửa đổi; đó là một quá trình phức tạp đòi hỏi các công cụ xây dựng của Android SDK và khóa ký của riêng bạn.

Rủi ro bảo mật của file APK (và cách đánh giá chúng)

Sự tự do sideload file APK là một lợi thế thực sự của Android so với iOS. Nhưng sự tự do đó đi kèm với những rủi ro bảo mật thực sự, và chúng ta cần nói thẳng về chúng, không vòng vo cảnh báo. Các file APK độc hại không phải là chuyện hoang đường; chúng là một vấn đề đã được ghi nhận rõ ràng. Những kẻ lừa đảo có thể lấy một ứng dụng phổ biến, tiêm phần mềm gián điệp, trojan ngân hàng, hoặc phần mềm quảng cáo vào đó, rồi đóng gói lại thành một bản cập nhật giả hoặc một game đã bị bẻ khóa. Báo cáo Mối đe dọa Di động của ESET luôn cho thấy hầu hết phần mềm độc hại trên Android đến từ các nguồn APK của bên thứ ba, không phải từ Play Store chính thức. Vì vậy, trước khi bạn cài đặt bất kỳ file APK nào từ một nguồn không chính thức, bạn phải tìm hiểu kỹ. Bắt đầu bằng việc xác minh chữ ký mật mã. Mọi file APK hợp pháp đều được nhà phát triển ký. Bạn có thể kiểm tra điều này bằng cách sử dụng `apksigner verify --print-certs myapp.apk` từ bộ công cụ xây dựng của Android SDK. Nếu chi tiết chứng chỉ không khớp với khóa công khai của nhà phát triển, đó là một dấu hiệu đáng báo động lớn. Tiếp theo, hãy kiểm tra các quyền trong file manifest. Một ứng dụng đèn pin đơn giản không nên yêu cầu quyền đọc tin nhắn văn bản của bạn (READ_SMS) hoặc ghi âm (RECORD_AUDIO). Cuối cùng, hãy luôn đối chiếu tên gói và số phiên bản với những gì được liệt kê trên trang web chính thức của nhà phát triển. Nếu bạn chỉ đang trích xuất asset từ một file APK trên máy tính, rủi ro sẽ thấp hơn vì bạn không thực thi code của ứng dụng. Dù vậy, một thói quen tốt là nên quét file qua VirusTotal trước. Nó quét file với hơn 70 công cụ chống virus trong chưa đầy một phút. Mặc dù điểm số 0/72 không phải là đảm bảo an toàn 100%, nhưng điểm số 15/72 là một tín hiệu rõ ràng để xóa file ngay lập tức.

Các tác vụ APK phổ biến và công cụ phù hợp cho từng việc

Mọi người làm việc với file APK vì đủ loại lý do, và việc sử dụng đúng công cụ cho đúng việc có thể tiết kiệm cho bạn cả tấn thời gian. Dưới đây là hướng dẫn nhanh để khớp tác vụ với công cụ. Nếu bạn muốn cài đặt một phiên bản ứng dụng cũ hơn, lựa chọn tốt nhất của bạn là tải nó từ một nguồn đáng tin cậy như APKMirror, nơi xác minh rằng chữ ký APK khớp với bản gốc từ Play Store. Bật 'Cài đặt ứng dụng không xác định' cho trình quản lý file của bạn, nhấn vào file APK đã tải xuống, xem lại các quyền và xác nhận cài đặt. Để trích xuất icon ứng dụng hoặc asset hình ảnh, cách dễ nhất là sử dụng một công cụ chuyển đổi file. Tải file APK lên CocoConvert, nơi bạn có thể duyệt nội dung của `res/drawable` hoặc `res/mipmap`, lấy các file PNG bạn cần và chuyển đổi chúng sang định dạng mục tiêu của bạn. Điều này hoàn hảo cho các nhà thiết kế đang làm mockup hoặc các nhà phát triển kiểm tra lại asset. Nếu bạn muốn đọc file manifest hoặc kiểm tra quyền mà không cần cài đặt, hãy sử dụng apktool. Nó miễn phí, mã nguồn mở và đa nền tảng. Lệnh `apktool d -s myapp.apk` là một lối tắt tuyệt vời chỉ giải mã tài nguyên, bỏ qua mã nguồn, vì vậy nó nhanh hơn nhiều nếu bạn chỉ cần file manifest. Để dịch ngược ứng dụng ra mã nguồn Java, hãy sử dụng jadx. Nó là tiêu chuẩn hiện đại và xử lý các định dạng DEX mới tốt hơn nhiều so với các công cụ cũ như dex2jar. Giao diện đồ họa của nó (`jadx-gui`) cũng rất tuyệt vời để điều hướng trong code. Chỉ cần lưu ý: nếu ứng dụng sử dụng kỹ thuật làm rối mã (như ProGuard hoặc R8), bạn sẽ phải nhìn chằm chằm vào những tên lớp vô nghĩa như a.b.c.d, có thể là một cơn ác mộng để giải mã. Để sửa đổi và đóng gói lại một file APK, bạn sẽ cần `apktool` để giải mã, thực hiện các thay đổi, `apktool` một lần nữa để xây dựng lại, và sau đó là `zipalign` và `apksigner` từ Android SDK để chuẩn bị và ký lại gói. Đó là một quy trình phức tạp mà không một trình chuyển đổi trực tuyến nào, kể cả CocoConvert, có thể xử lý giúp bạn.

Khi nào bạn thực sự cần chuyển đổi một file APK

Thuật ngữ 'chuyển đổi APK' có thể mang nhiều ý nghĩa khác nhau, vì vậy điều quan trọng là phải làm rõ điều gì thực sự có thể làm được và điều gì chỉ là mơ tưởng. Loại chuyển đổi phổ biến và hữu ích nhất là trích xuất asset. Ví dụ, một nhà thiết kế có thể cần lấy các icon launcher từ một file APK và chuyển đổi chúng từ PNG sang SVG cho một bài thuyết trình. Hoặc một kỹ sư QA có thể lấy tất cả các tài nguyên chuỗi từ các file XML nội bộ và chuyển đổi chúng sang CSV để xem xét bản dịch. Đây là một việc chuyển đổi định dạng file đơn giản, và đó chính xác là những gì các công cụ như CocoConvert được thiết kế để làm. Một trường hợp sử dụng thực tế khác là chuyển đổi các asset hình ảnh hiện có của ứng dụng sang một định dạng hiệu quả hơn như WebP. Google đã thúc đẩy việc sử dụng WebP trên Android kể từ API level 17 (Android 4.2) vì nó cung cấp kích thước file nhỏ hơn 25–34% so với PNG với chất lượng tương đương. Trích xuất các file PNG của một ứng dụng cũ và chuyển đổi hàng loạt chúng sang WebP là một cách tối ưu hóa thông minh. Bây giờ đến phần những gì bạn *không thể* làm. Bạn không thể chuyển đổi một file APK của Android thành một file IPA của iOS. Điều đó là không thể. Các nền tảng này về cơ bản là khác nhau, từ mã đã biên dịch và các framework giao diện người dùng cho đến các mô hình bảo mật và môi trường chạy. Một file APK chứa bytecode Dalvik chạy trên Android; không có gì trong đó sẽ thực thi được trên iOS. Bất kỳ dịch vụ nào tuyên bố cung cấp chuyển đổi APK sang IPA chỉ bằng một cú nhấp chuột đều là lừa đảo. Cùng lắm thì họ đang mô tả việc viết lại hoàn toàn ứng dụng từ đầu, điều đó hoàn toàn không phải là 'chuyển đổi'. Tương tự, việc chuyển đổi một file APK thành một file EXE của Windows không phải là một điều có thật. Các trình giả lập Android như BlueStacks hoặc Windows Subsystem for Android tạo ra một môi trường Android đầy đủ để *chạy* file APK trên Windows. Chúng không biến đổi mã của ứng dụng một cách thần kỳ thành một file thực thi gốc của Windows. Điều quan trọng là phải hiểu sự khác biệt này khi bạn thấy các công cụ đưa ra những lời hứa hẹn lớn lao về những gì chúng có thể cung cấp.