Hướng dẫn APK modding

Hướng dẫn APKTool: giải mã, biên dịch lại và ký APK (2026)

Hướng dẫn APKTool đầy đủ. Cài trên Windows, Mac và Linux, rồi giải mã, sửa Smali và tài nguyên, biên dịch lại và ký APK.

Mục lục

APKTool giải mã tài nguyên APK và Smali vào một thư mục dự án và có thể dựng lại dự án đó; gói đã dựng lại cần được ký trước khi cài. Tài liệu chính thức của APKTool mô tả các lệnh hiện tại và cách thiết lập cho các nền tảng máy tính được hỗ trợ.

Thuộc trung tâm modding: Cách mod APK · Thay thế trên điện thoại: Hướng dẫn MT Manager · Tệp nguồn: Trích xuất APK.

Mọi thứ dưới đây là một quy trình duy nhất: cài đặt, giải mã, hiểu bố cục thư mục, chỉnh sửa, dựng lại, ký, và sửa bốn lỗi gây ra phần lớn các lần build thất bại. Ở đâu công cụ trên điện thoại nhanh hơn, hướng dẫn này sẽ nói ra và chỉ tới chúng.

APKTool là gì?

APKTool giải mã một APK thành một thư mục gồm các tệp Smali, bảng tài nguyên, manifest đã giải mã và apktool.yml, rồi dựng lại thư mục đó thành một gói sẵn sàng ký; đây là con đường dòng lệnh để kiểm tra hoặc chỉnh sửa tài nguyên và mã Android trên máy tính.

APKTool so với MT Manager

MT Manager thắng cho một lần chỉnh sửa trên điện thoại, không cần cấu hình, không cần cáp. APKTool thắng khi bạn cần tìm kiếm trong nhiều tệp, giữ một bản sao nguyên bản dưới version control, xử lý framework của hệ thống, hoặc viết script cho cùng một thay đổi xuyên suốt nhiều bản build. Hãy dùng cả hai: MT Manager để khảo sát, APKTool để làm việc.

Cách cài APKTool

Cài APKTool thường nghĩa là lấy tệp jar của nó và cấu hình Java, với các bước thiết lập khác nhau trên Windows, macOS và Linux; hãy làm theo các bước cho hệ điều hành của bạn và xác nhận lệnh hoạt động trước khi mở một APK từ nguồn đáng tin cậy trên máy tính.

Windows

Cài một runtime Java 11 trở lên, tải apktool.jar từ trang phát hành chính thức trên GitHub, và đặt một wrapper .bat bên cạnh nó chứa java -jar apktool.jar %*. Đổi tên wrapper thành apktool.bat và đưa cả hai vào PATH.

Mac và Linux

Cài Java từ trình quản lý gói, tải jar, và tạo một script wrapper tên apktool với java -jar /path/to/apktool.jar "$@", rồi chmod +x nó. Đặt nó ở đâu đó trên PATH và xác nhận bằng apktool --version.

Yêu cầu về Java

Java 11 trở lên. Kiểm tra bằng java -version trước tiên: một runtime bị thiếu hoặc quá cũ chính là nguyên nhân khiến việc cài đặt thất bại phổ biến nhất, và nó hiện ra dưới dạng lỗi class-version khó hiểu chứ không phải một thông báo rõ ràng.

Các lệnh cơ bản của APKTool

Bốn lệnh phủ các tác vụ APKTool phổ biến: giải mã một gói, build một dự án, cài tài nguyên framework và xóa tệp framework; việc hiểu mỗi lệnh thay đổi điều gì sẽ giúp bạn chọn đúng bước khi một lần build hoặc decode thất bại trong lúc bạn làm việc trên máy tính.

apktool d (giải mã)

apktool d app.apk -o app-folder giải mã vào một thư mục có tên. Thêm -s để giữ nguyên classes.dex không giải mã khi bạn chỉ cần tài nguyên, điều này nhanh hơn nhiều với ứng dụng lớn.

apktool b (build)

apktool b app-folder dựng lại và ghi app-folder/dist/app.apk. Lần build đọc apktool.yml để lấy cài đặt đóng gói, nên đầu ra hành xử như tệp nén gốc chứ không phải một lần rezip tổng quát.

apktool if (cài framework)

apktool if framework.apk cài một tệp framework, cần thiết trước khi giải mã những ứng dụng hệ thống tham chiếu framework của hãng. Không có nó, việc decode một gói hệ thống thất bại ngay với lỗi framework bị thiếu.

apktool empty-framework-dir

Xóa các tệp framework đã cache khi một lần decode bắt đầu thất bại sau khi cập nhật APKTool. Chạy nó một lần khi lỗi nhắc tới những ID framework mà bạn chưa bao giờ cài.

Tham chiếu lệnh nhanh

Bộ đầy đủ bạn thực sự sẽ gõ, nhóm theo giai đoạn:

# decode
apktool d app.apk -o work          # decode into ./work
apktool d app.apk -s -o res-only   # resources only, faster
apktool if framework.apk           # install a framework first

# build
apktool b work                     # build to work/dist/
apktool b work -o out/app.apk      # build to a chosen path

# maintenance
apktool empty-framework-dir        # clear stale frameworks
apktool --version                  # confirm what is installed

Hãy giữ khối này trong lịch sử shell của bạn hoặc một tệp ghi chú. Gần như mọi phiên làm việc với công cụ này đều dùng ba trong số bảy dòng này.

Cách giải mã bằng APKTool

Chạy apktool d app.apk để tạo một thư mục dự án chứa Smali, tài nguyên, manifest đã giải mã và apktool.yml; hãy xem đầu ra đó trước để hiểu bố cục của gói và định vị các tệp liên quan tới thay đổi dự định của bạn trước khi chỉnh sửa bất cứ thứ gì.

Các cờ decode hữu ích

-o name đặt tên thư mục đầu ra, -s giữ nguyên classes.dex như cũ khi bạn chỉ cần tài nguyên, và -f ghi đè một thư mục đã tồn tại mà không hỏi. Các lần decode chỉ-tài nguyên với -s hoàn thành nhanh hơn vài lần trên gói lớn, điều quan trọng khi bạn lặp lại nhiều vòng.

Cấu trúc thư mục

smali/ chứa mã đã giải mã, mỗi thư mục cho một DEX khi gói là multidex. res/ chứa tài nguyên đã giải mã, AndroidManifest.xml nằm ở cấp cao nhất, và apktool.yml ghi metadata đóng gói. original/ giữ những phần nguyên vẹn của tệp nén.

Đọc manifest

Quyền, activity, service và các phiên bản SDK đều ở dạng XML thuần tại đây. Đây là cách nhanh nhất để hiểu một ứng dụng làm gì trước khi quyết định có đụng vào nó hay không.

Đọc Smali

Smali là dạng hợp ngữ dễ đọc của bytecode Dalvik. Thân phương thức hiện dưới dạng danh sách lệnh, hằng số chuỗi hiện dưới dạng dòng const-string, và điều kiện hiện dưới dạng nhánh nhảy có điều kiện. Hãy tìm các chuỗi nhìn thấy được trước: chúng neo bạn vào đúng phương thức một cách nhanh chóng.

Một phiên decode tham khảo

apktool d app.apk -o app-decode
cd app-decode
grep -rn "Remove Ads" res/values/strings.xml
grep -rn "isPremium" smali*/ | head -20

Hai lệnh grep trả lời hai câu hỏi khiến người ta mở một lần decode: văn bản hiển thị nằm ở đâu, và cờ phía sau nó được kiểm tra ở đâu. Với một game 60 MB, toàn bộ cuộc soi xét này mất dưới một phút sau khi decode xong.

Cách chỉnh sửa bằng APKTool

Hãy thực hiện một thay đổi mỗi chu trình build để một lần thất bại có thể truy về đúng một chỉnh sửa cụ thể; các tệp Smali là văn bản và tài nguyên là XML hoặc hình ảnh đã giải mã, nhưng mỗi định dạng có những ràng buộc mà quá trình dựng lại kiểm tra trước khi tạo APK.

Chỉnh sửa AndroidManifest.xml

Thay đổi quyền, activity khởi động, hoặc nhãn ứng dụng trực tiếp trong XML. Giữ tệp well-formed: một thẻ lạc chỗ sẽ thất bại lúc build với lỗi nêu rõ dòng, cái rẻ hơn nhiều so với một lần crash khi chạy.

Chỉnh sửa mã Smali

Thay đổi một phép so sánh, đảo một giá trị trả về, hoặc bỏ qua một nhánh. Giữ nguyên số thanh ghi: thêm một thanh ghi vào một phương thức nghĩa là phải sửa mọi lệnh trong đó, và đó chính là loại thay đổi trông có vẻ đúng nhưng crash thực tế.

Hai kiểu chỉnh sửa gần như luôn an toàn: thay đổi một giá trị tức thời const/4, và thay thế một nhánh nhảy có điều kiện bằng cái ngược lại của nó. Cả hai đều giữ nguyên hình dạng thanh ghi của phương thức.

Chỉnh sửa tài nguyên

res/values/strings.xml chứa các chuỗi đã giải mã, và res/values/ chứa số và màu. Đây là hạng mục chỉnh sửa an toàn nhất: giá trị sai trông sẽ sai, và chúng hiếm khi làm ứng dụng crash.

Giữ bản decode nguyên bản

Chép thư mục decode trước lần chỉnh sửa đầu tiên. Khi một lần dựng lại crash, diff -r pristine edited in chính xác những gì đã thay đổi, và diff đó xem nhanh hơn trí nhớ của bạn về việc bạn đã đụng vào gì hai mươi phút trước.

Cách biên dịch lại bằng APKTool

apktool b app-folder dựng lại dự án đã decode thành một APK, và đầu ra console của nó xác định liệu thao tác thành công hay dừng lại ở một lỗi tài nguyên hay Smali; hãy đọc lỗi đầu tiên được báo trước khi thay đổi tệp hoặc chạy bước ký.

Các cờ build hữu ích

-o path ghi đầu ra vào một chỗ cụ thể, và -f ghi đè mà không hỏi. Các lần build thất bại chỉ in ra tệp vi phạm đầu tiên, nên hãy sửa, dựng lại và lặp lại thay vì cố suy luận về một danh sách dừng ở lỗi đầu tiên.

Lỗi build phổ biến

Lỗi cú pháp Smali nêu rõ tệp và dòng. Xung đột tài nguyên nêu rõ mục trùng lặp. Tệp bị thiếu nghĩa là chỉnh sửa của bạn đã xóa thứ mà manifest vẫn tham chiếu. Hãy sửa tệp được nêu tên, dựng lại, và không bao giờ ký một bản build đã thất bại.

Hướng dẫn biên dịch lại đi qua từng lỗi một cách chi tiết kèm thông báo chính xác để bạn đối chiếu.

Cách ký đầu ra của APKTool

APKTool dựng lại tệp nén nhưng không áp dụng khóa ký; hãy dùng apksigner từ Android build tools ngay sau đó, rồi xác minh chữ ký kết quả trước khi thử cài lên một thiết bị mà bạn kiểm soát, để thử nghiệm gói và các thay đổi của nó một cách an toàn ngoại tuyến.

Một thói quen đáng xây dựng: ký và xác minh cùng một hơi. apksigner verify ngay sau khi ký sẽ bắt được một keystore lặng lẽ không được áp dụng, cái mà nếu không sẽ hiện ra như một lỗi cài đặt hai bước sau đó với thông báo kém hữu ích hơn.

Dùng APKTool với framework

Một số APK hệ thống tham chiếu các tài nguyên framework dùng chung không nằm trong gói; hãy cài framework tương ứng bằng apktool if framework-res.apk trước khi decode hoặc dựng lại, và dùng các tệp từ cùng một bản Android build khi có thể để tránh lệch tài nguyên.

Các tệp framework tích tụ qua nhiều dự án và thỉnh thoảng trở nên cũ sau khi nâng cấp APKTool. apktool empty-framework-dir xóa chúng, và đó là thứ đầu tiên nên thử khi lỗi decode bắt đầu nhắc tới những ID framework mà bạn chưa bao giờ chủ động cài.

Một vòng lặp đầy đủ

Chuỗi lệnh này phủ việc trích xuất, decode, sửa, dựng lại, ký, xác minh và cài đặt theo đúng thứ tự; hãy bắt đầu từ một APK đã sao chép và giữ dự án gốc nguyên vẹn để bạn có thể so sánh hoặc khôi phục nếu một chỉnh sửa thất bại ở bất kỳ giai đoạn nào của quy trình.

adb shell pm path com.example.app
adb pull /data/app/.../base.apk original.apk
apktool d original.apk -o work
# ...edit one file inside work/...
apktool b work
apksigner sign --ks my.keystore work/dist/original.apk
apksigner verify --print-certs work/dist/original.apk
adb uninstall com.example.app
adb install work/dist/original.apk

Thời gian với một ứng dụng cỡ vừa: decode mất 20 đến 60 giây, phần sửa mất bằng thời gian của việc tìm kiếm, và lần dựng lại chạy trong khoảng 10. Bước cài đặt là lúc ứng dụng gốc biến mất, đó là lý do mọi bước trước đó đều chạy trên các bản sao.

Lỗi APKTool phổ biến

Các lần decode thất bại, tham chiếu framework bị thiếu, xung đột tài nguyên và lỗi cú pháp Smali là những vấn đề APKTool phổ biến; tệp hoặc đường dẫn được báo thường xác định giai đoạn hỏng, nên hãy xem chi tiết đó trước khi thay đổi lệnh hoặc tệp dự án trên đĩa để thử lại.

Không tìm thấy Java hoặc sai phiên bản

Wrapper không tiếp cận được một runtime Java 11+. Hãy cài một cái, xác nhận bằng java -version, và giữ lời gọi java của wrapper trỏ đúng bản cài đặt nếu bạn có nhiều bản.

Thiếu framework

Decode một gói hệ thống mà chưa cài framework của nó. Chạy apktool if framework.apk, hoặc để APKTool tải framework từ một thiết bị đã kết nối, rồi decode lại.

Build thất bại ở Smali

Lỗi cú pháp trong một tệp đã chỉnh sửa. Lỗi nêu rõ tệp và dòng: mở nó, so sánh với bản decode nguyên bản, và sửa lệnh bạn đã thay đổi. Các tệp nhị phân chưa giải mã đi qua trình soạn thảo của bạn một cách nguyên vẹn là nguyên nhân phổ biến khác.

Xung đột ID tài nguyên

Hai giá trị giành cùng một ID, thường sau khi gộp các tệp tài nguyên từ những bản build khác nhau. Hãy xóa mục trùng lặp, hoặc dựng lại từ một lần decode mới và áp lại các chỉnh sửa của bạn, mỗi cái một lần.

APKTool so với các công cụ khác

APKTool, JADX, MT Manager và APK Editor khác nhau về nền tảng, độ dễ đọc của mã, khả năng dựng lại và tự động hóa; hãy so sánh các khả năng dưới đây với công việc bạn cần làm, vì mỗi công cụ có một vai trò khác nhau trong một quy trình APK từ kiểm tra đến dựng lại.

Tác vụ APKTool MT Manager APK Editor JADX
Nền tảng Máy tính Điện thoại Điện thoại Máy tính
Giải mã thành mã dễ đọc Smali Smali Không Java
Khả năng dựng lại Có Có Có Không
Ký đầu ra Không Có Có Không
Script và version control Có Không Không Không
Tốt nhất cho Dự án sâu Sửa nhanh trên điện thoại Biểu mẫu tài nguyên Đọc mã

APKTool ghép tự nhiên với JADX, được đề cập trong hướng dẫn giải mã, để đọc mã, và ghép với MT Manager để kiểm tra nhanh trên thiết bị.

Chọn giữa chúng trong thực tế

Hãy bắt đầu từ chỗ bạn đang ở: trên điện thoại với một giá trị cần đổi, MT Manager xong trước. Trên máy tính với một thay đổi manifest hoặc chuỗi, các biểu mẫu của APK Editor nhanh hơn Smali. Khi thay đổi trải rộng qua nhiều tệp, cần một diff, hoặc phải lặp lại xuyên suốt nhiều bản build, APKTool là công cụ duy nhất trong ba cái mở rộng được.

APKTool nằm ở đâu trong quy trình rộng hơn

APKTool xử lý các giai đoạn giải mã và dựng lại giữa việc lấy một APK và cài nó; việc trích xuất cung cấp tệp, việc ký chuẩn bị gói đã dựng lại, và việc cài đặt đặt nó lên thiết bị, nên hãy làm theo các hướng dẫn được liên kết theo đúng trình tự đó khi cần.

Hãy kéo tệp nguồn về với hướng dẫn trích xuất, decode nó bằng các lệnh ở trên, rồi giao đầu ra đã dựng lại cho bước ký khi lần build trở lại sạch.

Hãy decode gói đầu tiên của bạn bằng apktool d, mở manifest, và đọc nó trước khi thay đổi bất cứ thứ gì. Khi bạn sẵn sàng dựng lại, hướng dẫn biên dịch lại và hướng dẫn ký số tiếp nối đúng nơi hướng dẫn này dừng lại.

Điểm chính

  • apktool d giải mã, apktool b dựng lại, apksigner ký. APKTool không bao giờ ký.
  • Giữ thư mục decode nguyên bản; diff so với nó chính là cách bạn gỡ lỗi crash.
  • Ứng dụng hệ thống cần các tệp framework được cài trước bằng apktool if.

Các câu hỏi thường gặp

APKTool là gì?

APKTool là một công cụ dòng lệnh giải mã APK thành các tệp Smali và tài nguyên, cho phép bạn chỉnh sửa chúng, rồi dựng lại một gói hoạt động. Đây là tiêu chuẩn cho các chỉnh sửa sâu, framework ứng dụng hệ thống và những lần build lặp lại được trên Windows, Mac và Linux.

Làm sao để cài APKTool?

Tải tệp jar từ trang phát hành chính thức trên GitHub, đặt nó vào PATH của bạn với tên apktool.jar, và cài một runtime Java 11 trở lên. Trên Windows, bọc nó trong một tệp .bat nhỏ; trên Mac và Linux, làm cho wrapper có quyền thực thi.

Làm sao để giải mã bằng APKTool?

Chạy apktool d app.apk để giải mã vào một thư mục chứa Smali, tài nguyên, AndroidManifest.xml và apktool.yml. Chỉnh sửa các tệp trong thư mục đó, rồi dựng lại bằng apktool b với cùng tên thư mục. Hãy giữ bản decode nguyên vẹn riêng để so sánh.

Làm sao để biên dịch lại bằng APKTool?

Chạy apktool b app-folder và gói đã dựng lại nằm trong app-folder/dist/. Lỗi nêu tên tệp đã hỏng: hãy sửa Smali hoặc tài nguyên mà nó báo, dựng lại lần nữa, và đừng chuyển sang ký cho tới khi lần build sạch.

Làm sao để ký bằng APKTool?

APKTool không ký đầu ra của nó. Hãy dùng apksigner với keystore của bạn, ví dụ apksigner sign --ks my.keystore app.apk, rồi chạy apksigner verify trước khi cài. Hãy sao lưu khóa và đừng phân phối các bản build kiểm thử mà chưa xác minh chữ ký của chúng.

apktool.yml là gì?

apktool.yml lưu metadata decode: phiên bản APK, cài đặt nén, SDK tối thiểu và các tham chiếu framework. Chính nó cho phép apktool b tái tạo hành vi đóng gói ban đầu, nên đừng xóa hoặc tự sửa tệp này một cách tùy tiện. Hãy coi nó là chỉ đọc.

Vì sao APKTool thất bại?

Phần lớn các thất bại là do thiếu tệp framework cho ứng dụng hệ thống, lỗi cú pháp trong Smali đã sửa, hoặc xung đột tài nguyên. Lỗi nêu tên tệp: framework cần apktool if, Smali cần một bản sửa, tài nguyên cần một xung đột bị gỡ. Hãy sửa một thứ mỗi vòng.

APKTool có cần root không?

Không. Nó thao tác trên các tệp trong máy tính của bạn, và APK bạn đưa cho nó có thể lấy ra từ điện thoại qua ADB mà không cần root. Root không liên quan gì đến chính chu trình decode - biên dịch lại. Một tài khoản người dùng thường là đủ cho mọi bước.

APKTool có hợp pháp không?

Các quy định về giải mã một gói khác nhau theo khu vực pháp lý, mục đích và giấy phép, gồm một số ngoại lệ cho nghiên cứu hay tương thích. Crack ứng dụng trả phí, phân phối các gói đã dựng lại, hoặc thay đổi client của dịch vụ đang vận hành có thể gây ra vấn đề về bản quyền, hợp đồng hoặc tài khoản. Hãy kiểm tra luật địa phương và điều khoản của ứng dụng.

APKTool và MT Manager khác nhau thế nào?

APKTool chạy trên máy tính, giải mã các dự án đầy đủ và hỗ trợ script cùng version control. MT Manager chạy trên điện thoại và hợp cho từng chỉnh sửa riêng lẻ. Hãy chọn APKTool cho công việc bàn máy lặp lại được và MT Manager cho các tác vụ trên thiết bị; cả hai đều hữu ích trong cùng một quy trình.

APKTool có thể mod game không?

Nó có thể đổi mọi thứ trong tệp, kể cả mã gameplay trong Smali, nhưng game trực tuyến xác thực phía máy chủ và cấm client đã chỉnh sửa. Với các tựa ngoại tuyến nó hoạt động tốt, miễn là thay đổi sống sót qua lần dựng lại và một lần thử trên thiết bị thật. Hãy thử ngoại tuyến trước.

Làm sao để cập nhật APKTool?

Tải tệp jar từ trang phát hành chính thức trên GitHub, thay bản cũ, và xóa các tệp framework cũ bằng apktool empty-framework-dir nếu lần decode thất bại sau khi cập nhật. Xác nhận phiên bản đã cài bằng apktool --version trước khi mở dự án của bạn.

Thuộc hướng dẫn đầy đủ

Cách mod APK (Game): Phương pháp, công cụ và rủi ro (2026)

Cũng trong APK modding: