2012-09-28 26 views
6

Tôi cần trích xuất biểu tượng ứng dụng từ tệp APK. Tôi chỉ cần một biểu tượng, tôi không muốn trích xuất mọi thứ khác trong apk. Các tệp dễ dàng nắm giữ, nhưng làm cách nào để xác định tệp biểu tượng nào là biểu tượng ứng dụng chính xác. Tôi đoán điều này được lưu trữ trong bảng tài nguyên? Vì vậy, tôi đoán những gì tôi cần là thực sự để đọc bảng tài nguyên và tôi hy vọng rằng từ bảng tài nguyên tôi có thể xác định tên tập tin biểu tượng mà tôi có thể trích xuất từ ​​ứng dụng.Trích xuất biểu tượng ứng dụng từ tệp APK

Tôi cần một công cụ đơn giản cho điều này, tôi biết về apktool mà có thể trích xuất toàn bộ tập tin apk nhưng đây không phải là những gì tôi muốn kể từ

  • nó một lof thứ khác mà tôi không cần (biên soạn lại, giải nén các file khác vv)

  • phải mất rất nhiều thời gian để chạy

có bất kỳ công cụ khác mà tôi có thể sử dụng chỉ để có được giữ của các đường dẫn tập tin biểu tượng?

Tất cả các đề xuất được đánh giá cao

EDIT: Để làm rõ, tôi không cố gắng thực hiện điều này trên thiết bị. Tôi đang cố gắng làm điều này trên PC.

+0

Trên thực tế bạn một được biểu tượng ứng dụng như sau khi chương trình drawable mà bạn có thể chuyển nó sang bitmap và lưu nó vào bộ nhớ điện thoại. – Dharmendra

+0

@dharmendra, tôi thực sự đang cố gắng thực hiện điều này trên dịch vụ web chứ không phải trên thiết bị thực tế. Tôi sẽ làm rõ điều này trong câu hỏi –

Trả lời

10

aapt tàu công cụ có SDK Android, được tìm thấy dưới platform-tools sẽ cung cấp cho bạn chi tiết bạn cần. apktool ships with aapt.

aapt d --values badging payload.apk

Sử dụng sản lượng này, bạn có thể trích xuất các tập tin biểu tượng ra khỏi apk (mà là một tập tin zip).

0

apkcó sẵn nguồn của công cụ. Kể từ khi khai thác tài nguyên và giải mã tài nguyên là khá khác nhau, tôi nghi ngờ nó sẽ dễ dàng để sửa đổi nó để loại bỏ decompilation mã để giảm thiểu nó vào những gì bạn cần.

Như để xác định tên tập tin biểu tượng, bạn căn cứ rằng về nội dung của AndroidManifest.xml, nhưng bạn có thể cần phải giải thích cho nhiều phiên bản của biểu tượng dựa trên mật độ màn hình, định hướng, cấu hình ngôn ngữ, vv

+0

Cảm ơn bạn đã trả lời. Tôi cũng đã suy nghĩ trong những điều khoản này và tôi đã bắt đầu công việc để trích xuất phần giải mã biểu hiện từ apktool. Nhưng nó sẽ rất tốt đẹp để tìm thấy một số công cụ mà có thể làm điều này ra khỏi hộp. Tôi đã hy vọng có một công cụ như vậy ở đâu đó. –

5

Theo kiến ​​thức của tôi (và theo Wikipedia), Tệp APK là gói định dạng tệp ZIP. Vì vậy, tôi nghĩ bạn chỉ có thể sử dụng bất kỳ công cụ giải nén nào để giải nén tệp apk và lấy biểu tượng bạn muốn. Đối với biểu tượng trình khởi chạy, chỉ cần mở tệp AndroidManifest.xml và xem xét thuộc tính android:icon của <application>. Nó có thể trông giống như vậy:

android:icon="@drawable/ic_launcher"

Các tập tin biểu tượng sau đó sẽ là res/drawable-<dim>/ic_launcher.png, nơi <dim> có thể là bất kỳ ldpi, mdpi, hdpi, xhdpi mà đứng cho độ phân giải khác nhau. Hình ảnh lớn nhất sẽ là xhdpi hoặc hdpi.

+0

Cảm ơn bạn đã trả lời nhưng tiếc là tệp AndroidManisfest.xml được biên dịch sang định dạng nhị phân. Nếu ai đó có thể tìm thấy một tiện ích nhỏ có thể dịch ngược tệp AndroidManifest.xml thì đây sẽ là một giải pháp tốt. –

7
  • Đổi tên tập tin .apk để .zip
  • Giải nén nó với một công cụ như 7zip
  • Tìm các biểu tượng như file png dưới: /res/drawable-hdpi/icon.png

Chỉnh sửa: Lưu ý rằng tập tin này là không có trong tất cả các tập tin apk nhưng trong hầu hết chúng. Tôi không thể tự tìm ra giải pháp tốt hơn ngoài việc trích xuất tất cả các tệp .png và chọn một tệp từ danh sách.

+0

Đây không phải là giải pháp chính xác vì bạn không thể xác định tên biểu tượng và có thể có nhiều biểu tượng trong ứng dụng. icon.png không nhất thiết có nghĩa là biểu tượng ứng dụng. –

+0

Có, tôi đã chỉnh sửa câu trả lời của mình. Tôi nghĩ rằng không có cách nào để tìm đúng; để sử dụng cá nhân, tôi trích xuất tất cả các tệp trên máy chủ và liệt kê tất cả các tệp .png, sau đó tôi chọn một trong số chúng. – adrianTNT

5
//if your apk is not installed ..only having .apk on sdcard 
    String APKFilePath = "mnt/sdcard/myapkfile.apk"; //For example... 
    PackageManager pm = getPackageManager(); 
    PackageInfo pi = pm.getPackageArchiveInfo(APKFilePath, 0); 

    // the secret are these two lines.... 
    pi.applicationInfo.sourceDir  = APKFilePath; 
    pi.applicationInfo.publicSourceDir = APKFilePath; 
    // 

    Drawable APKicon = pi.applicationInfo.loadIcon(pm); 
    String AppName = (String)pi.applicationInfo.loadLabel(pm); 

bạn có thể tham khảo link này

Get-apk icon

0

Bạn cũng có thể sử dụng APK Icon Editor cho mục đích này.

Mặc dù nó trích xuất toàn bộ nội dung APK vào thư mục tạm thời, nó cho phép bạn dễ dàng chỉnh sửa, thay thế hoặc chỉ trích xuất biểu tượng. Trình chỉnh sửa biểu tượng APK sử dụng aapt (được trả lời trong câu trả lời của kxb), hoạt động như một trình bao bọc đơn giản hóa trên đó.

Công cụ này là mã nguồn mở, được viết bằng C++/Qt. Binaries cho Windows có sẵn.

1

Chức năng bash này sẽ trích xuất biểu tượng và hiển thị biểu tượng đó với preview. Nếu bạn không sử dụng máy Mac, bạn có thể sử dụng lệnh display từ ImageMagick.

preview-android-icon() { unzip -p $1 $(aapt d --values badging $1 | sed -n "/^application: /s/.*icon='\([^']*\).*/\1/p") > /tmp/$$.png && preview /tmp/$$.png; } 

Sử dụng nó như thế này:

preview-android-icon /path/to/your.apk 
Các vấn đề liên quan