2012-09-28 10 views
6

Ich brauche das App-Symbol aus einer Apk-Datei extrahieren. Ich brauche nur ein Symbol, ich möchte nicht alles andere in der apk extrahieren. Die Dateien sind leicht zu erreichen, aber wie finde ich heraus, welche Icon-Datei das richtige App-Icon ist? Ich denke, das ist in der Ressourcentabelle gespeichert? Also ich denke, was ich brauche, ist eigentlich die Ressourcentabelle zu lesen, und ich hoffe, dass ich aus der Ressourcentabelle die Icon-Datei namne bestimmen kann, die ich dann aus der App extrahieren kann.App-Symbol aus der APK-Datei extrahieren

Ich brauche ein einfaches Werkzeug für diese, ich weiß über apktool, die die gesamte apk-Datei extrahieren kann, aber das ist nicht das, was da ich will

  • es ein lof andere Sachen tut, die ich nicht brauchen (dekompilieren, dekomprimieren andere Dateien usw.)

  • es viel Zeit in Anspruch nimmt

gibt es irgendein anderes Werkzeug, das ich gerade Weg habhaft die Symboldatei verwenden können, laufen?

Alle Vorschläge sind

EDIT geschätzt: Um zu klären, ich versuche, dies nicht auf dem Gerät zu tun. Ich versuche das auf einem PC zu machen.

+0

Eigentlich ein Sie das App-Symbol als ziehbar programmatische nach bekommen, dass Sie es zu Bitmap umwandeln und es auf Ihrem Gerät speichern. – Dharmendra

+0

@dharmendra, ich versuche tatsächlich, dies auf einem Web-Service zu tun, nicht auf dem eigentlichen Gerät. Ich werde dies in der Frage –

Antwort

10

aapt Tool ausgeliefert mit Android SDK, gefunden unter platform-tools sollte Ihnen die Details, die Sie benötigen. apktool ships with aapt.

aapt d --values badging payload.apk

diesen Ausgang verwenden, können Sie die Symboldatei aus apk extrahieren (das ist eine ZIP-Datei ist).

0

Die Quelle von apktool ist verfügbar. Da die Ressourcenextraktion und die Dekompilierung von Code ziemlich unterschiedlich sind, vermute ich, dass es leicht wäre, sie so zu modifizieren, dass die Code-Dekompilierung entfernt wird, um sie so zu minimieren, wie sie benötigt wird.

In Bezug auf das Symbol Dateinamen zu bestimmen, stützen Sie, dass auf den Inhalt AndroidManifest.xml, aber Sie können für mehrere Versionen des Symbols basierend auf Rasterdichte, Orientierung, Sprache Konfiguration usw.

+0

klären Danke für die Antwort. Ich habe auch in diesen Begriffen gedacht und ich habe die Arbeit begonnen, um den manifesten Dekompilierungsteil von apktool zu extrahieren. Aber es wäre sehr schön, ein paar Werkzeuge zu finden, die das aus der Box heraus tun würden. Ich hatte gehofft, dass es irgendwo ein solches Werkzeug gibt. –

5
berücksichtigen müssen

Nach meinem Wissen (und nach Wikipedia auch), APK-Dateien sind ZIP-Datei formatierte Pakete. Also ich denke, Sie können einfach jedes Entpacken Werkzeug verwenden, um die apk-Datei zu entpacken und das gewünschte Symbol zu nehmen. Öffnen Sie für das Launcher-Symbol einfach die AndroidManifest.xml Datei und schauen Sie sich die android:icon Eigenschaft des <application> an. Es sieht wohl so etwas wie so:

android:icon="@drawable/ic_launcher"

Die Icon-Datei dann res/drawable-<dim>/ic_launcher.png sein würde, wo <dim> jeder ldpi, mdpi, hdpi, xhdpi sein können, die für unterschiedliche Auflösungen stehen. Das größte Bild wäre in xhdpi oder hdpi.

+0

Danke für die Antwort, aber leider ist die Datei AndroidManisfest.xml in ein Binärformat kompiliert. Wenn jemand ein kleines Dienstprogramm finden kann, das AndroidManifest.xml dekompiliert, wäre das eine gute Lösung. –

7
  • Benennen Sie die APK-Datei
  • Dekomprimieren es mit einem Tool wie 7zip
  • Finden Sie die Icons als PNG-Dateien unter in .zip: /res/drawable-hdpi/icon.png

Edit: Beachten Sie, dass diese Datei ist nicht in allen apk-Dateien vorhanden, aber in den meisten von ihnen. Ich konnte selbst keine bessere Lösung finden, außer alle .png-Dateien zu extrahieren und eine aus der Liste auszuwählen.

+0

Dies ist nicht die richtige Lösung, da Sie den Symbolnamen nicht bestimmen können und es viele Symbole in einer App geben kann. icon.png bedeutet nicht unbedingt, dass es sich um das App-Symbol handelt. –

+0

Ja, ich habe meine Antwort bearbeitet. Ich denke, es gibt keinen Weg, den richtigen zu finden. Für meinen persönlichen Gebrauch entpacke ich alle Dateien auf dem Server und listet alle .png-Dateien auf, dann wähle ich eine davon aus. – 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); 

können Sie diesen Link verweisen

Get-apk icon

0

Sie auch APK Icon Editor für diesen Zweck verwenden können.

Obwohl es den gesamten Inhalt der APK in einen temporären Ordner extrahiert, können Sie die Symbole nur bearbeiten, ersetzen oder extrahieren. APK Icon Editor verwendet aapt (erwähnt in kxb Antwort), fungiert als eine vereinfachte Wrapper darüber.

Das Tool ist Open-Source, geschrieben in C++/Qt. Binärdateien für Windows sind verfügbar.

1

Diese bash Funktion wird das Symbol extrahieren und es mit preview anzeigen. Wenn Sie nicht auf einem Mac sind, können Sie den Befehl display von ImageMagick verwenden.

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

es wie folgt verwendet:

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