我需要修改现有的APK,修改源代码然后重新编译它 .
-
我可以使用dex2jar或apktool对它进行反编译,它工作得很好
-
从jar文件中我可以获取java源码(使用jd-gui)
-
然后我可以修改java文件
但是现在我想知道如何重新编译java文件并将它们放回到jar文件中! (jar部分应该很简单,主要问题似乎是如何为android重新编译java文件)
我知道另一种解决方案是使用apktool然后修改smali文件,但是当我们想要添加大量代码时,它似乎真的很复杂!
我的应用程序是一个基本的HelloWorld whitout混淆 .
9 回答
应该将文件扩展名从
.apk
更改为.zip
. 然后解压缩文件,修改它们,然后将它们压缩为.zip
并记住将扩展名重命名为.apk
.为此,我们甚至不必使用任何计算机 . 我更喜欢ES文件浏览器,它也可以帮助查看和编辑源代码 .
感谢Chris Jester-Young,我设法让它成功!
我认为我设法做到的方式只适用于非常简单的项目:
用Dex2jar我获得了Jar .
使用jd-gui我将我的Jar转换回Java文件 .
使用apktool我得到了android清单和ressources文件
在Eclipse中,我使用与旧项目相同的设置创建一个新项目(检查清单文件中的所有信息)
创建项目时,我将所有资源和清单替换为我使用apktool获取的资源
我将我从jar中提取的java文件粘贴到src中(尊重包)
我用我需要的东西修改这些文件
一切都在编译!
/!\一定要从设备中删除旧的apk,会抛出错误,说明apk签名与旧签名不一样!
我知道这个问题仍然得到了解答,我想传递一个信息,如何从没有dexjar的apk获取源代码 .
有an online decompiler for android apks
从本地机器上传apk
等一下
以zip格式下载源代码
我不知道这有多可靠 .
@darkheir 答案是做反编译apk的手动方式 . 它帮助我们理解Apk创建中的不同阶段 .
获得源代码后,请按照接受的答案中提到的步骤操作
另一个在线Apk De-compiler @Andrew Rukin :http://www.javadecompilers.com/apk
仍然值得 . 向创作者致敬 .
首先从以下链接下载dex2jar工具http://code.google.com/p/dex2jar/downloads/list
解压缩它创建的文件
dex2jar
文件夹现在你选择你的apk文件并在更改扩展名后将其扩展名.apk更改为.zip它似乎是zip文件然后提取你找到的这个zip文件
classes.dex
文件现在选择classes.dex文件并将其放入
dex2jar
文件夹中现在打开cmd窗口并键入
dex2jar
文件夹的路径现在输入命令
dex2jar.bat classes.dex
并按Enter键现在打开找到
classes_dex2jar.jar
文件的dex2jar
文件夹接下来从以下链接下载java反编译工具http://java.decompiler.free.fr/?q=jdgui
上一步打开java反编译工具中的文件
classes_dex2jar.jar
,现在可以看到apk代码我知道这个问题已得到解答,我不想在这里给出更好的答案 . 我将分享我在这个主题上的经验 .
一旦我丢失了我的代码,我只有
apk
文件 . 我使用下面的工具反编译它,它使我的一天 .这些工具必须在这种情况下使用,否则,它是不道德的,甚至有时它是非法的(窃取其他人的努力) . 所以请明智地使用它 .
这些是我最喜欢的工具:
javadecompilers.com
并从谷歌播放获取apk你可以谷歌或查看这些网站:
apk-dl.com
apkpure.com
在发布此答案的日期,我测试了所有链接,它对我来说非常适合 .
NOTE: Apk在编译代码时,反编译无效 . 因为Proguard缩小并混淆代码并将类重命名为无意义的名称,这使得理解代码变得相当困难 .
Bonus:
Basic tutorial of Using Proguard:
带有jd-gui的dex2jar会给出所有的java源文件,但它们并不完全相同 . 它们几乎是等效的.class文件(不是100%) . 因此,如果您想更改apk文件的代码:
使用apktool反编译
apktool将为每个具有相同名称的java文件生成smali(汇编版本的dex)文件 .
smali是人类可以理解的,在相关文件中进行更改,使用相同的apktool重新编译(
apktool b Nw.apk <Folder Containing Modified Files>
)这是一种方式:
apktool
进行解码:2工具提取和反编译器到同一输出文件夹 .
简单方法:使用在线APK Decompiler
https://apk.tools/tools/apk-decompiler/(推荐)
http://www.javadecompilers.com/apk
https://www.apkdecompilers.com
我知道这个问题仍然得到了回答,我并不想在这里变得聪明 . 我只想分享关于这个主题的另一种方法 .
使用apk grail下载应用程序
APK Grail提供应用程序的免费zip文件 .
使用luckypatcher并删除您的许可证验证,而不是您必须签署apk . 使用WINRAR替换修改后的源代码而不反编译apk .