答案已经有点过时或不完整。这可能适用于不受保护的 apk(没有 Proguard),但现在没有人部署不受保护的 apk。我能够修改(我的)受到良好保护的apk(Proguard,检查“黑客工具”的安全检查,检查应用程序是否以调试模式重新打包的安全检查,...)的方式是通过apktool作为这里的其他人已经提到过。但没有人解释,你必须再次签署该应用程序。
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.
在我的测试中,原始版本的 apk 没有日志记录。在我用 apktool 反编译后,我交换了一个完整的字节代码文件,而不用一个完整的字节代码文件记录,重新编译并签名它,我能够将它安装在我的设备上。之后,当我将应用程序连接到它时,我能够在 Android Studio 中看到日志。
在我看来,使用dex2jar
andJD-GUI
进行反编译只会有助于更好地理解类在做什么,只是为了阅读目的。但是由于一切都是预先保护的,我不确定你是否可以将这个半生不熟的 Java 代码重新编译成一个可以工作的 apk。如果是这样,请告诉我。我认为,唯一的方法是操纵字节码本身,如本例中所述。