Les réponses sont déjà quelque peu dépassées ou incomplètes. Cela fonctionne peut-être pour des apk non protégées (pas de Proguard), mais de nos jours personne ne déploie une apk non protégée. La façon dont j'ai pu modifier une (ma) apk bien protégée (Proguard, security check qui vérifie les "hacking tools", security check qui vérifie si l'application est repackagée avec le mode debug,...) est via apktool comme déjà mentionné par d'autres ici. Mais personne n'a expliqué qu'il fallait à nouveau signer l'application.
apktool d app.apk
//generates a folder with smali bytecode files.
//Do something with it.
apktool b [folder name] -o modified.apk
//generates the modified apk.
//and then
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore modified.apk androiddebugkey
//signs the app the the debug key (the password is android)
//this apk can be installed on a device.
Dans mon test, la version originale de l'apk n'avait pas d'enregistrement. Après avoir décompilé avec apktool, j'ai échangé un fichier complet de byte code sans logging par un fichier complet de byte code avec logging, je l'ai recompilé et signé et j'ai pu l'installer sur mon appareil. Ensuite, j'ai pu voir les logs dans Android Studio lorsque j'y ai connecté l'application.
À mon avis, la décompilation avec dex2jar
y JD-GUI
n'est utile que pour mieux comprendre ce que font les classes, à des fins de lecture. Mais comme tout est protégé, je ne suis pas sûr que vous puissiez un jour recompiler ce code Java mal foutu pour en faire un apk fonctionnel. Si c'est le cas, faites-le moi savoir. Je pense que la seule façon est de manipuler le code byte lui-même comme mentionné dans cet exemple.