Dekompilieren und Theme von Android APKs

Haben Sie jemals eine Android-App geöffnet und das verwendete Farbthema nicht gemocht? Was wäre, wenn Sie beispielsweise einen weißen Hintergrund in einer App in Schwarz ändern möchten? Heute werde ich Ihnen zeigen, wie Sie eine .APK-Datei dekompilieren, damit Sie die darin enthaltenen Dateien bearbeiten, neu kompilieren und auf Ihrem Android-Telefon installieren können.

Hinweis: Einige Apps sind schwieriger zu thematisieren als andere. Facebook Messenger zum Beispiel ist bekanntermaßen schwer zu thematisieren. Ich werde Sie anhand der Dropbox-App als Beispiel durch diese Anleitung führen, da sie zu den am einfachsten zu bearbeitenden gehört.

Bedarf

  1. Editor ++
  2. APKTool + neueste AAPT
  3. APKMulti Tool Script
  4. Ein Bildbearbeitungsprogramm wie Photoshop / GIMP
  5. [Optional] Dropbox .apk (um dieser Anleitung zu folgen)

Laden Sie alle erforderlichen Tools herunter und installieren Sie sie auf Ihrem PC, einschließlich der oben bereitgestellten test.apk. Dropbox ist eine der am einfachsten zu thematisierenden Apps, daher verwenden wir sie für dieses Tutorial.

Sie sollten die Datei framework-res.apk auch von Ihrem Telefon auf Ihren PC übertragen. Sie befindet sich in / system / framework / auf Ihrem internen Speicher.

Legen Sie das APKTool und das AAPT im Ordner „Other“ im Hauptverzeichnis des APK Multi Tool ab.

Ziehen Sie die Datei test.apk in den Ordner “Place-apk-here-for-modding” im Verzeichnis APK Multi Tool, und Sie werden mit einem Befehlsterminal begrüßt.

Wenn Sie eine beliebige Taste drücken, um fortzufahren, wird ein Terminalmenü mit einer Reihe von Optionen angezeigt. Wählen Sie Option 24.

Sie kehren zum Hauptbildschirm des Terminals zurück, aber “test.app” ist Ihr Projekt. Drücken Sie also 9, um die apk zu dekompilieren, und drücken Sie dann 12, um einen Testbuild auszuführen. Dies ist eine gute Methode, um festzustellen, ob etwas falsch eingerichtet wurde. Wenn die App korrekt erstellt wurde, drücken Sie 2 und minimieren Sie das angezeigte Skript.

Nachdem der Testbuild ausgecheckt ist, wollen wir uns mit der Bearbeitung des XML-Codes der apk befassen. Bitte folgen Sie genau.

Gehen Sie im extrahierten APK-Ordner in den Ordner “res” und öffnen Sie “AndroidManifest.xml” mit Notepad ++. Drücken Sie nun STRG + F, um die folgende Zeichenfolge zu finden:

Android: Hintergrund

Verwenden Sie die Option “Alle suchen”, und es sollten ungefähr 190 Zeichenfolgen gefunden werden. Jetzt müssen Sie jede hervorgehobene Zeichenfolge durchgehen, um sicherzustellen, dass Sie keine verpassen, wenn wir die Hintergrundfarbe der App ändern.

Scrollen Sie durch, bis Sie “Camera_upload_grid.xml” finden, das die Zeichenfolge “android: background =” @ * android: color / white “enthält. Kopieren Sie die gesamte Zeichenfolge und drücken Sie STRG + H, damit der Dialog „Ersetzen“ angezeigt wird. Fügen Sie die Zeichenfolge in die oberen und unteren Zeilen ein, aber wir müssen sie ändern.

Gehen Sie im dekompilierten .apk-Ordner in /res/values/colors.xml und öffnen Sie ihn in Notepad ++. Suchen Sie nach der Zeile “abs__background_holo_dark”, die definitiv ein Hintergrund ist. Kopieren Sie nun diese Zeichenfolge und kehren Sie zu der ersten geöffneten XML-Datei zurück, wobei das Feld Ersetzen noch geöffnet ist. Fügen Sie in die untere Zeile die gerade kopierte Zeichenfolge ein. Sie sollten nun in der unteren Zeile des Dialogs “Ersetzen” Folgendes angeben:

android: background = ”@ color / abs__background_holo_dark

Klicken Sie nun auf “Alle ersetzen” und es werden alle @android: color / white’s geändert, um stattdessen den background_holo_dark zu verwenden. Scrollen Sie nun weiter durch die gesamte XML-Datei und suchen Sie nach Android: Hintergrundzeichenfolgen, die einen Hex-Wert (#fffffff) oder etwas anderes als das verwenden, durch das wir sie gerade ersetzt haben. Ändern Sie für diejenigen, die Sie finden, die Zeichenfolgen, um die neue zu verwenden (abs__background_holo_dark).

Also haben wir den Hintergrund geändert, jetzt werden wir die Textfarbe ändern. Befolgen Sie also das gleiche Verfahren wie zuvor, führen Sie diesmal jedoch STRG + F für „android: textColor“ aus. Sie werden ungefähr 166 Zeilen finden.

Sie werden Dinge wie “android: textColor =” # ffbbbbbb “usw. sehen. Schauen Sie also noch einmal in die Colors.xml und wir müssen herausfinden, welche Zeilen für die Textfarbe ersetzt werden sollen.

Sie können den Android sehen: textColor = “# ffbbbbbb”, “#ffffffff”, “# ff717171” und “#ffcccccc” im Screenshot und in Ihren Suchergebnissen in Note ++. Öffnen Sie jetzt Ihre Colors.xml erneut, um herauszufinden, welche Zeile wir für die Textfarbe verwenden möchten.

Kehren Sie also zur ersten XML-Datei zurück und führen Sie erneut STRG + H für den Dialog Ersetzen aus. Kopieren Sie nun die Zeichenfolge “android: textColor =” # ffbbbbbb “oben und unten und ändern Sie die untere Zeile in” android: textColor = “@ color / text”.

Durchsuchen Sie jetzt noch einmal alle android: textColor-Zeilen und ändern Sie alles, was einen Hex-Wert in der Zeichenfolge hat. Wenn Sie schließlich zur Datei styles.xml gelangen, möchten Sie die Umkehrung von einigen Zeilen entfernen, beginnend bei Zeile 260 und einige Zeilen nach unten. Löschen Sie also das “Inverse” aus diesen Zeichenfolgen.

Als nächstes sehen Sie einige Hex-Werte in den Zeilen 527, 536, 573, 579, 585, 601 und einigen anderen. Ersetzen Sie das von ( # ffffffff ) durch ( @ color / text ).

Drücken Sie STRG + F, um in Notepad ++ nach zu suchen cacheColorHint, Teiler, @ * android: color /, und Invers.

Der cacheColorHint ist der scrollende Hintergrund, daher müssen wir sicherstellen, dass sie unsere Hintergrundfarbe verwenden. Die Teiler sind selbsterklärend und wir können ihre Hex-Werte ändern, wenn Sie möchten. Das einzige ist, dass Sie nichts berühren dürfen, was auf @drawable verweist. Dies sind normalerweise Bilder, die als PNG-Dateien an anderer Stelle im APK-Ordner gespeichert sind.

Wenn Sie nach „invers ”zeigt Verweise auf textAppearanceInverse an. Sie müssen auf jede dieser Zeichenfolgen doppelklicken und die Umkehrung aus diesen Zeichenfolgen löschen.

Schließlich wird bei der Suche nach @ * android: color / nur überprüft, ob Framework-Änderungen verpasst wurden. Wenn Sie etwas finden, das “android: popupBackground”> ​​@ * android: color / white “sagt, müssen Sie es in” android: popupBackground “> @ color / abs__background_holo_dark ändern. Dies schließt Zeile 911 ein, was verwirrend sein kann, da es bereits auf Android zeigt: Farbe / Schwarz.

Als nächstes öffnen wir res / values ​​/ colours.xml und ändern es so, dass es so aussieht:

Als nächstes res / values ​​/ styles.xml und scrollen Sie nach unten zu Zeile 328. Ändern Sie es wie folgt:

(

'));h.each(function(){function k(){b.fixedScrollTop=0;b.sidebar.css({"min-height":"1px"});b.stickySidebar.css({position:"static",width:"",transform:"none"})}function n(a){var f=a.height();a.children().each(function(){f=Math.max(f,d(this).height())});return f}var b={};b.sidebar=d(this);b.options=c||{};b.container=d(b.options.containerSelector);0==b.container.length&&(b.container=b.sidebar.parent());b.sidebar.parents().css("-webkit-transform","none");b.sidebar.css({position:b.options.defaultPosition,overflow:"visible","-webkit-box-sizing":"border-box","-moz-box-sizing":"border-box","box-sizing":"border-box"});b.stickySidebar=b.sidebar.find(".theiaStickySidebar");if(0==b.stickySidebar.length){var y=/(?:text|application)\/(?:x-)?(?:javascript|ecmascript)/i;b.sidebar.find("script").filter(function(a,f){return 0===f.type.length||f.type.match(y)}).remove();b.stickySidebar=d("
").addClass("theiaStickySidebar").append(b.sidebar.children());b.sidebar.append(b.stickySidebar)}b.marginBottom=parseInt(b.sidebar.css("margin-bottom"));b.paddingTop=parseInt(b.sidebar.css("padding-top"));b.paddingBottom=parseInt(b.sidebar.css("padding-bottom"));var r=b.stickySidebar.offset().top,t=b.stickySidebar.outerHeight();b.stickySidebar.css("padding-top",1);b.stickySidebar.css("padding-bottom",1);r-=b.stickySidebar.offset().top;t=b.stickySidebar.outerHeight()-t-r;0==r?(b.stickySidebar.css("padding-top",0),b.stickySidebarPaddingTop=0):b.stickySidebarPaddingTop=1;0==t?(b.stickySidebar.css("padding-bottom",0),b.stickySidebarPaddingBottom=0):b.stickySidebarPaddingBottom=1;b.previousScrollTop=null;b.fixedScrollTop=0;k();b.onScroll=function(a){if(a.stickySidebar.is(":visible"))if(d("body").width()a.container.width())k();else{var f=d(document).scrollTop(),l="static";if(f>=a.sidebar.offset().top+(a.paddingTop-a.options.additionalMarginTop)){var g=a.paddingTop+c.additionalMarginTop,u=a.paddingBottom+a.marginBottom+c.additionalMarginBottom,p=a.sidebar.offset().top,e=a.sidebar.offset().top+n(a.container);l=0+c.additionalMarginTop;g=a.stickySidebar.outerHeight()+g+u{if(2==sticky_widget_mode)a=b.querySelector("."+ai_block_class_def),null!=a&&(a.style.position="sticky",a.style.position="-webkit-sticky",a.style.top=sticky_widget_margin+"px"),a=b.querySelector(".ai-sticky-space"),null!=a&&(a.style.height=window.innerHeight+"px");else{var c=b.clientWidth,f=!1;for(a=b.parentElement;"BODY"!=a.tagName;){if(a.classList.contains("theiaStickySidebar")){f=!0;break}var g=a.parentElement,h=g.clientWidth;if(h>1.2*c||h>e/2)break;a=g}if(!f)if(c=a.getBoundingClientRect(),b=b.getBoundingClientRect(),b=c.top-b.top+sticky_widget_margin,0==sticky_widget_mode){if("sticky"!=a.style.position||isNaN(parseInt(a.style.top))||a.style.top1.5*a.clientWidth||b.clientWidth>e/2)&&b.clientHeight>a.clientHeight){c=b.clientHeight;a.parentElement.style.height=c+"px";a.parentElement.style.height=c-(b.clientHeight-c)+"px";break}}else 1==sticky_widget_mode&&(window.jQuery&&window.jQuery.fn?jQuery(a).theiaStickySidebar({additionalMarginTop:b,sidebarBehavior:"stick-to-top"}):console.error("AI STICKY WIDGET MODE Javascript USES jQuery","- jQuery not found"))}})};"undefined"==typeof ai_sticky_sidebar_delay&&(ai_sticky_sidebar_delay=200);setTimeout(function(){d()},ai_sticky_sidebar_delay)});ai_js_code=!0