将.Java文件转换为.Smali文件。

24
我使用APKTool对一款Android应用程序进行了反向工程,并获得了.Smali文件作为源代码输出。我使用一个应用程序将.Smali文件转换成.Java文件。我成功地编辑了.Java文件,但现在我想将它们转换回.Smali文件,以便可以重新编译具有新.Smali文件的应用程序。当我只留下.Java文件时,它不会重新编译并显示错误。我在互联网上找不到有关将.Java编译为.Smali的任何信息,所以希望你们能帮助我。

谢谢您提前。

2个回答

30
您可以使用普通的Java编译器编译Java类,然后使用Android的“dx”工具将编译的.class文件转换为dex文件。然后对dex文件运行baksmali以生成smali文件。
例如,假设您在名为“HelloWorld.java”的Java文件中有以下代码:
public class HelloWorld {
    public static void main(String[] args) {
         System.out.println("Hello World!");
    }
}

将其转换为smali:

javac HelloWorld.java
dx --dex --output=classes.dex HelloWorld.class
baksmali d classes.dex

2
谢谢,对我也有帮助。我已经制作了一个小的Windows批处理文件来完成这个任务: https://gist.github.com/houtianze/fc9f158fd86bb0b58c485139ddc32ece - ibic
3
请注意,您需要使用 Java 7(而不是 Java 8)来完成此任务! - z3ntu
最后一行不应该是 baksmali d classes.dex 吗?你改变了命令行格式吗? - user202729
1
@user202729 谢谢,已修复。是的,命令格式在此帖子最初发布时和现在有所改变。 - JesusFreke
但是这在带有导入的类上不起作用。有解决办法吗? - Aidan

18

这是一个IntelIJ插件。我需要一个独立的程序。 - user3830316
请参见:https://dev59.com/RFXTa4cB1Zd3GeqP3Z4K - Dermot Blair
是的,我也找到了那篇帖子,但它将 .Java 文件转换为 .class 文件或 .dex 文件,而我需要一个 .Smali 转换器,因为 APKTool 可以将 .Smali > .Dex 进行转换。 - user3830316
3
哦!我之前不知道这个插件。真赞! - JesusFreke
2
需要将Java格式的所有包转换为smali格式才能将2-3个类转换回smali吗? 我只有2-3个Java类使用了一些库。 这些库已经是.smali格式(而不是.java),我只需要将这2-3个类转换为.smali格式。这可能吗? - Alireza Mohamadi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接