2012-09-28 36 views
6

我需要從apk文件中提取應用圖標。 我只需要一個圖標,我不想在apk中提取其他所有內容。這些文件很容易保留,但是如何確定哪個圖標文件是正確的應用程序圖標。我猜這是存儲在資源表中?所以我想我需要的實際上是閱讀資源表,我希望從資源表中我可以確定圖標文件namne,然後我可以從應用程序中提取。從apk文件中提取應用圖標

我需要爲這個簡單的工具,我知道apktool,可以提取整個apk文件,但是這不是我想要的,因爲

  • 它做其他的東西一個LOF,我不需要(反編譯,解壓縮其他文件等)

  • 需要花費大量的時間來運行

是否有任何其他工具,我可以用剛拿到的圖標文件的路徑保持?

所有的建議表示讚賞

編輯:爲了澄清,我不是試圖做到這一點的設備上。我正試圖在PC上執行此操作。

+0

其實你的獲取應用程序圖標,您可以將其轉換爲位圖,並將其保存到您的設備內存繪製程序之後。 – Dharmendra

+0

@dharmendra,我實際上是試圖在Web服務上做到這一點,而不是在實際的設備上。我將在問題 –

回答

10

aapt工具附帶的Android SDK,發現在platform-tools應該給你你需要的細節。 apktool ships with aapt

aapt d --values badging payload.apk

使用這個輸出,可以提取圖標文件出來的apk的(這是一個zip文件)。

0

apktool的源碼可用。由於資源提取和代碼反編譯有很大不同,我懷疑可以很容易地修改它以刪除代碼反編譯,以將其最小化爲您所需的。

至於確定的圖標文件名,你基礎上AndroidManifest.xml中的內容,但你可能需要考慮基於屏幕密度,定向,語言配置圖標的多個版本,等

+0

中澄清這一點感謝您的答覆。我也一直在想這些術語,並且我已經開始了從apktool中提取清單反編譯部分的工作。但是,找到一些可以開箱即用的工具是非常好的。我希望有某個地方有這樣的工具。 –

5

至於我的知識(並根據維基百科),APK文件是ZIP文件格式的包。所以我認爲你可以使用任何解壓縮工具來解壓縮apk文件,並採取你想要的圖標。對於啓動器圖標,只需打開AndroidManifest.xml文件並查看<application>android:icon屬性。它可能看起來像這樣:然後

android:icon="@drawable/ic_launcher"

圖標文件將res/drawable-<dim>/ic_launcher.png,其中<dim>可以是任何的ldpi, mdpi, hdpi, xhdpi這代表不同的分辨率。最大的圖像將在xhdpihdpi

+0

感謝您的回覆,但不幸的是,AndroidManisfest.xml文件被編譯爲二進制格式。如果有人可以找到一個能夠反編譯AndroidManifest.xml的小工具,這將是一個很好的解決方案。 –

7
  • 重命名.apk文件爲.zip
  • 解壓它像7zip的
  • 工具查找下的圖標爲PNG文件: /res/drawable-hdpi/icon.png

編輯:請注意,這個文件是不存在於所有apk文件中,但在大多數中。 除了提取所有.png文件並從列表中選取一個文件外,我自己找不到更好的解決方案。

+0

這不是正確的解決方案,因爲您無法確定圖標名稱,並且應用程序中可能有很多圖標。 icon.png並不一定意味着它是應用程序圖標。 –

+0

是的,我編輯了我的答案。我認爲沒有辦法找到合適的人;爲我個人使用,我提取服務器上的所有文件並列出所有.p​​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); 

你可以參考這個鏈接

Get-apk icon

0

您還可以使用APK Icon Editor用於此目的。

雖然它會將整個APK內容提取到臨時文件夾,但它允許您輕鬆編輯,替換或僅提取圖標。 APK圖標編輯器使用aapt(提及kxb的答案),作爲一個簡化的包裝。

該工具是開源的,用C++/Qt編寫。 Windows的二進制文件可用。

1

bash函數將提取圖標並顯示它與preview。如果您不在Mac上,那麼您可以使用ImageMagick中的display命令。

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

使用方法如下:

preview-android-icon /path/to/your.apk