我有一个MyFile.jar文件。我使用JD-GUI对其进行反编译,并使用其“保存所有源代码”选项将文件保存到.zip文件中。现在提取.zip文件并编辑.java文件。
提取.zip文件后的文件夹结构是这样的
_____ META-INF(folder)
source(folder) -------|
------com(folder)-->example--->App---> all .java files
Run Code Online (Sandbox Code Playgroud)
现在如何将其重新编译回.jar文件?
我正在使用 AspectJ 1.8.8 编译时编织,并且我有一个像这样的块
@SomeAnnotation(value="someValue")
public List doSomething(String someArg) {
...
}
Run Code Online (Sandbox Code Playgroud)
where@SomeAnnotation是通过“Around”建议实现的。
使用 JD-GUI 查看字节码,我看到以下生成的代码(略有格式):
public class SomeClass {
private static Annotation ajc$anno$5;
...
@SomeAnnotation(value="someValue")
public List doSomething(String someArg)
{
String str = someArg;
JoinPoint localJoinPoint = Factory.makeJP(ajc$tjp_5, this, this, str);
Object[] arrayOfObject = new Object[3];
arrayOfObject[0] = this;
arrayOfObject[1] = str;
arrayOfObject[2] = localJoinPoint;
Annotation tmp56_53 = ajc$anno$5;
if (tmp56_53 == null) {
tmp56_53;
}
return (List)new SomeClass.AjcClosure11(arrayOfObject).linkClosureAndJoinPoint(69648).around(tmp56_53, (SomeAnnotation)(ajc$anno$5 = SomeClass.class.getDeclaredMethod("doSomething", new Class[] { String.class }).getAnnotation(SomeAnnotation.class))); …Run Code Online (Sandbox Code Playgroud) 我好几次遇到过这个问题.每当我使用JD-GUI反编译并保存所有源时,它会在每行前面加上一个块注释,并在方法体中插入代码的行号.这是一个我刚刚反编译的jar的例子:
/* */ public void onEnable()
/* */ {
/* 25 */ List DropList = new ArrayList();
/* 26 */ DropList.add(Integer.valueOf(264));
/* 27 */ DropList.add(Integer.valueOf(57));
/* 28 */ DropList.add(Integer.valueOf(278));
/* */
/* 30 */ this.config = getConfig();
/* */
/* 32 */ this.config.addDefault("GiftDrops", DropList);
/* 33 */ this.config.addDefault("DropRate", Integer.valueOf(0));
/* 34 */ this.config.addDefault("GiftBoxPlayerSkin", "lol768");
/* 35 */ this.config.addDefault("CraftingRecipe.LineOne", "339,339,339");
/* 36 */ this.config.addDefault("CraftingRecipe.LineTwo", "339,264,339");
/* 37 */ this.config.addDefault("CraftingRecipe.LineThree", "339,339,339");
/* */
/* 39 */ this.config.options().copyDefaults(true);
/* 40 */ saveConfig();
/* …Run Code Online (Sandbox Code Playgroud) 我想反编译一个apk文件以查看其源代码的一部分,但是当我进入其中的部分时,JD-GUI会给出以下反编译的代码
/* Error */
public void loginV2(Context paramContext, String paramString1, int paramInt, String paramString2, String paramString3, String paramString4, AsyncHttpResponseHandler paramAsyncHttpResponseHandler)
{
// Byte code:
// 0: new 20 java/lang/StringBuilder
// 3: dup
// 4: getstatic 91 com/ipanel/join/homed/mobile/myt/Config:SERVER_ACCESS Ljava/lang/String;
// 7: invokestatic 32 java/lang/String:valueOf (Ljava/lang/Object;)Ljava/lang/String;
// 10: invokespecial 35 java/lang/StringBuilder:<init> (Ljava/lang/String;)V
// 13: ldc_w 491
// 16: invokevirtual 41 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder;
// 19: invokevirtual 45 java/lang/StringBuilder:toString ()Ljava/lang/String;
// 22: astore 10
// 24: new 226 cn/ipanel/android/net/http/AsyncHttpClient
// 27: dup
// 28: …Run Code Online (Sandbox Code Playgroud) 我正在尝试打开 jd gui。我在 Windows 上使用 .jar 版本。当我双击罐子时,屏幕上会出现一个咖啡图标,但没有其他任何反应。我之前尝试重新安装java,但结果相同。顺便说一句,我可以正确运行我的其他可执行 jar 文件。然后我尝试通过命令提示符运行它。这就是我得到的错误报告
C:\Users\HP\Desktop>java -jar jd-gui.jar
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.reflection.CachedClass$3$1 (file:/C:/Users/HP/Desktop/jd-gui.jar) to method java.lang.Object.finalize()
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.reflection.CachedClass$3$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Exception in thread "main" java.lang.reflect.InaccessibleObjectException: Unable to make jdk.internal.loader.ClassLoaders$AppClassLoader(jdk.internal.loader.ClassLoaders$PlatformClassLoader,jdk.internal.loader.URLClassPath) accessible: module java.base does not "opens jdk.internal.loader" …Run Code Online (Sandbox Code Playgroud) 我有一个旧的.JAR文件。我可以使用JD-GUI对其进行反编译,但这为我提供了一组类文件。我正在尝试遵循代码,但是各个类之间的联系有限。
我可以手动遵循代码,但是有一种方法可以“重新链接”或创建项目,以便我可以更轻松地导航。
JD-GUI在强调某些类时会部分执行此操作,但只会带我进入该类。我想直接进行声明或查看所有用法。
我安装了JD-GUI来从jar文件中检索我的代码.一切正常,除了JD-GUI自动添加这样烦人的评论:

我可以用任何方式删除它们吗?我不懂正则表达式.
jd-gui ×7
java ×5
aop ×1
apk ×1
aspectj ×1
bytecode ×1
comments ×1
compilation ×1
crash ×1
decompiler ×1
decompiling ×1
eclipse ×1
jad ×1
jar ×1
jvm-bytecode ×1
recompile ×1