Nota: non fornirò alcun link. Dovresti essere a tuo agio a sporcarti le mani da solo quando ti stai tuffando in un compito del genere.
Definirei vari livelli basati sulla quantità di sbirciate che puoi fare in un APK.
Livello 1: Base: usato per modificare le immagini, cambiare le icone e alcune altre cose minori di layout.
Decompilazione/ricompilazione usando APK manager. A condizione che non abbiate fatto casini, molto probabilmente un APK funzionerà anche dopo aver ricompilato e apportato modifiche alle immagini/layout.
Livello 2: Modifica delle librerie APK, ovvero decompilazione del file classes.dex e modifiche ai file smali.
Utilizzando smali/backsmali si decompila il file classes.dex all'interno di un apk per ottenere i file delle librerie smali che si modificano per cambiare alcune funzionalità davvero importanti dell'app stessa (si può tranquillamente chiamare pasticciare con il codice sorgente dell'app e cambiarlo proprio alla sua base). Tuttavia, se hai fatto questa domanda, dubito che sarai in grado di fare questo passo da solo (a meno che tu non sia spoon-fed codice smali da qualche tutorial) perché il linguaggio smali è davvero vicino all'assembly ed è altamente offuscato pezzo di codice. Comunque, se siete interessati, potete leggere su Dalvic Opcodes se volete iniziare su questo. Questo è difficile.
Ancora una volta, a condizione che tu non abbia incasinato il codice sorgente, puoi ricompilare il classes.dex usando smali/backsmali e rimetterlo nell'apk e dovrebbe funzionare.
Dovresti essere in grado di trovare classes.dex aprendo l'apk con qualche archiviatore come winrar. Tuttavia, si raccomanda un decompilatore apk (ne avrete bisogno se volete apportare modifiche a classes.dex e rimetterlo nell'apk).
Livello 3: Tentare di leggere il codice sorgente dell'applicazione in formato java.
Ora questo è interessante. Ma prima di iniziare, devo avvertirvi: Questo è puramente educativo per natura, non è possibile apportare modifiche al codice java e ricompilare l'applicazione. Perché non esiste una cosa del genere che possa ottenere un codice java perfettamente funzionante dal codice smali. Tuttavia, se volete solo controllare il codice in superficie per capire come funziona l'app, continuate a leggere.
Ottenete dex2jar. Come nel passo precedente, ottenete il file classes.dex dentro l'apk e convertitelo in jar con dex2jar. Ora basta usare qualsiasi convertitore da classe java a java e si dovrebbe ottenere un codice java parzialmente accurato. Dovrebbe essere abbastanza buono per motivi educativi, tuttavia, poiché non avrete il codice java esatto, la ricompilazione di classes.dex non funzionerà e l'applicazione andrà sicuramente in crash. Non c'è modo di aggirare questo problema.
Ora dubito fortemente che possiate immergervi più a fondo di così in un APK compilato. Buona fortuna!