我需要修改现有的APK,修改源代码然后重新编译它。
我可以使用dex2jar或apktool对它进行反编译,它工作得很好
从jar文件中我可以获得java源码(使用jd-gui)
然后我可以修改java文件
但是现在我想知道如何重新编译java文件并将它们放回到jar文件中! (jar部分应该很简单,主要问题似乎是如何为android重新编译java文件)
我知道另一种解决方案是使用apktool然后修改smali文件,但是当我们想要添加大量代码时,它似乎真的很复杂!
我的应用程序是一个基本的HelloWorld whitout混淆。
当然,您使用Android SDK以任何Android开发人员的方式构建Java文件。
感谢Chris Jester-Young,我设法让它成功!
我认为我设法做到的方式只适用于非常简单的项目:
用Dex2jar我获得了Jar。
使用jd-gui我将我的Jar转换回Java文件。
使用apktool我得到了android清单和ressources文件
在Eclipse中,我使用与旧项目相同的设置创建一个新项目(检查清单文件中的所有信息)
创建项目时,我将所有的资源和清单替换为我使用apktool获得的资源
我将我从jar中提取的java文件粘贴到src中(尊重包)
我用我需要的东西修改这些文件
一切都在编译!
/!一定要从设备中删除旧的apk,会抛出错误,说明apk签名与旧签名不一样!
这不适用于复杂的应用程序(Dex2jar并不完美 - 也有一些开发人员设法通过使用proguard或siilar技术来锁定他们的应用程序)。但对某些人来说,它可能有用
是的,你是对的,这就是为什么我说"我认为我设法做到的方式只适用于非常简单的项目"
对不起我没看过
我设法在一个非常庞大的应用程序上使用这种方式,我认为它也适用于一些复杂的应用程序
@MuhammedRefaat你有没有在你庞大的应用程序上工作?
@loveisbug是的,我做了,应用程序不是我的,这种方式设法反编译apk但其代码很小,因为应用程序使用混合技术编码而不是本机编码所以将其转换为原生不会给我完美的结果,但在至少我可以查看我想看到的类和方法
@MuhammedRefaat谢谢你,在我的情况下,有许多不可读的变量和函数,我认为它不能直接重新编译。 :(
@loveisbug是的,我认为这只取决于apk类型而不是它的大小,很好地解决你的问题
可能是使用职业卫士的创造者。这是一个工具,您可以在将代码打包到apk之前对其进行模糊处理:developer.android.com/tools/help/proguard.html
这真的是当前反编译,编辑和重新编译应用程序的方法吗?应该有一个脚本来组合这些工具。
有没有办法让smali文件可读?
可以吗?我已经搜索了很久。并且Jadx中的问题提到它不起作用,因为从jadx反编译的java文件不是1:1映射到apk。
我知道这个问题仍然得到了解答,我想传递一个信息,如何从没有dexjar的apk获取源代码。
Android apks有一个在线反编译器
从本地机器上传apk
等一会儿
以zip格式下载源代码
我不知道这有多可靠。
@darkheir答案是做反编译apk的手动方式。它帮助我们理解Apk创建中的不同阶段。
获得源代码后,请按照接受的答案中提到的步骤操作
另一个在线Apk De-compiler @Andrew Rukin:http://www.javadecompilers.com/apk
仍然值得。向创作者致敬。
它停止工作,总是出错。
试试这个:javadecompilers.com/apk
这工作:链接:)
But now I would like to know how to recompile the java files and put them back into a jar file!是核心问题吗?这不是回答它。
首先从以下链接下载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代码
9.最后一步在java反编译工具中打开文件classes_dex2jar.jar现在你可以看到apk代码。如何在修改类文件后从这里反向创建apk文件
@DarioDias我认为可以
@loveisbug DarioDias询问如何,如果可能的话
我知道这个问题已得到解答,我不想在这里给出更好的答案。我将分享我在这个主题上的经验。
一旦我丢失了代码,我只有apk文件。我使用下面的工具反编译它,它使我的一天。
这些工具必须在这种情况下使用,否则,它是不道德的,甚至有时它是非法的(窃取其他人的努力)。所以请明智地使用它。
这些是我最喜欢的工具:
javadecompilers.com
并从谷歌播放获取apk你可以谷歌或查看这些网站:
apk-dl??.com
apkpure.com
在发布此答案的日期,我测试了所有链接,它对我来说非常适合。
注意:Apk反编译在有代码的情况下无效。因为Proguard缩小和混淆代码并将类重命名为无意义的名称,这使得理解代码变得相当困难。
奖金:
使用Proguard的基础教程:
dex2jar与jd-gui会给出所有的java源文件,但它们并不完全相同。它们几乎是等效的.class文件(不是100%)。
因此,如果您想更改apk文件的代码:
使用apktool反编译
apktool将为每个具有相同名称的java文件生成smali(汇编版本的dex)文件。
smali是人类可以理解的,在相关文件中进行更改,
使用相同的apktool重新编译(apktool b Nw.apk)
apktool是废话解决方案。不生成java文件。
我知道这个问题仍然得到了回答,我并不想在这里变得聪明。我只想分享关于这个主题的另一种方法。
使用apk grail下载应用程序
APK Grail提供应用程序的免费zip文件。
这是一种方式:
使用apktool进行解码:
$ apktool d -f {apkfile} -o {output folder}
接下来,使用JADX(在github.com/skylot/jadx)
$ jadx -d {output folder} {apkfile}
2个工具提取和反编译器到同一输出文件夹。
简单方法:使用在线APK Decompiler
https://apk.tools/tools/apk-decompiler/(推荐)
http://www.javadecompilers.com/apk
https://www.apkdecompilers.com
小心! Flag -f删除整个文件夹。
使用luckypatcher
并删除您的许可证验证比您没有签署apk。使用WINRAR替换修改后的源代码而不反编译apk。
应该将文件扩展名从.apk更改为.zip。然后提取文件,修改它们,然后将它们压缩到.zip并记住将扩展名重命名为.apk。
为此,我们甚至不必使用任何计算机。我更喜欢ES文件浏览器,它也可以帮助查看和编辑源代码。
根据您的描述,您无法修改应用程序的Java源代码