如何在java类文件中动态重写静态代码块

如何在java类文件中动态重写静态代码块,java,class,overriding,Java,Class,Overriding,原始类类似于: public class Test{ static { System.loadLibrary("hello"); } ... } 公开课考试{ 静止的{ System.loadLibrary(“你好”); } ... } 我想将其更改为: public class Test{ static { System.load("/home/abc/libhello.so"); } ...

原始类类似于:

public class Test{ static { System.loadLibrary("hello"); } ... } 公开课考试{ 静止的{ System.loadLibrary(“你好”); } ... } 我想将其更改为:

public class Test{ static { System.load("/home/abc/libhello.so"); } ... } 公开课考试{ 静止的{ System.load(“/home/abc/libhello.so”); } ... }
Test.class位于jar文件中。我无法更改jar文件。有什么办法吗?

没有。如果需要更改代码的行为方式,则需要更改代码。为什么不能更改jar文件?

否。如果需要更改代码的行为方式,则需要更改代码。为什么不能更改jar文件?

无法覆盖

您可以随时更改jar文件。使用反编译器并获取源代码,修改它并将其打包回来

无法覆盖


您可以随时更改jar文件。使用反编译器并获取源代码,修改它并将其打包回去。

Test.class
是您
Test.java
文件的编译版本。如果要更改程序的行为,必须在
Test.java
文件中更改它并重新编译。

Test.class
Test.java
文件的编译版本。如果您想更改程序的行为,您必须在
Test.java
文件中更改它并重新编译它。

我想他只有.classfiles@damluar:这要看情况而定。可能这是一个经过签名/验证的jar文件。也许还有其他原因,OP无法更改jar文件。你所说的不涉及更改jar文件的“字节码级别”是什么?我认为更改jar意味着反编译->更改->再次编译。或者你打算直接更改.class?@damluar:不管怎样,如果OP的jar被签名,而他不能重新签名,这将是一个问题。我们需要遵循这个过程,不能更改任何第三方jar,并且反编译代码对libhello.so文件不起作用。我正在寻找一些动态修改类文件的方法,比如使用cglib或其他方法files@damluar:这要看情况而定。可能这是一个经过签名/验证的jar文件。也许还有其他原因,OP无法更改jar文件。你所说的不涉及更改jar文件的“字节码级别”是什么?我认为更改jar意味着反编译->更改->再次编译。或者你打算直接更改.class?@damluar:不管怎样,如果OP的jar被签名,而他不能重新签名,这将是一个问题。我们需要遵循这个过程,不能更改任何第三方jar,并且反编译代码对libhello.so文件不起作用。我正在寻找一些动态修改类文件的方法,比如使用cglib或其他。这是公司政策,jar文件由另一个组提供,他们不会为usit做任何自定义。这是公司政策,jar文件由另一个组提供,他们不会为usit做任何自定义。这是公司政策,jar文件由另一个组提供,他们不会为usit进行任何自定义。这是公司的政策,jar文件由另一个组提供,他们不会为我们进行任何自定义