在某些情况下,因为没有代码环境,所以在部署代码时必须修改Java编译后的class文件的内容。 (小部分修改)。
jclasslib显示class文件的内容
在的常量池中找到了要修改的代码。 请记住数组的下标
代码修改
使用UpdateClass修改中的class文件地址(25行,数组下标) 43行,要修改的内容(46行) )
添加代码
打包广告;
importorg.gjt.jclasslib.io.class filewriter;
importorg.gjt.jclasslib.structures.class file;
importorg.gjt.jclasslib.structures.constant;
importorg.gjt.jclasslib.structures.constants.constant utf8 info;
import java.io.DataInput;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
//*
* @ClassName UpdateClasses
* @更改描述3360 class文件的内容
* @Author Lgd
* @Date 2020/9/25
* @版本v 1.0
*/
公共类更新类{
publicstaticvoidmain (字符串[ ] args ) throws Exception { )。
//class文件地址
string file path=' d :loginsuccesslistener.class ';
fileinputstreamfis=new file inputstream (文件路径);
datainputdi=new data inputstream (fis );
ClassFile cf=new ClassFile (;
cf.read(di;
constant [ ] infos=cf.getconstantpool (;
int count=infos.length;
for(intI=0; I计数; I ) {
if(infos[I]!=空) {
系统. out.print (I;
system.out.print('=';
系统. out.print (infos [ I ].get verbose ();
system.out.print('=';
system.out.println (infos [ I ].get verbose (!='? infos[i].getConstantType () : ' );
//包含要替换的字符串的数组的下标在jclasslib中查看
//https://github.com/Ingo Kegel/jclasslib/releases
if(I==186 ) {
常数utf8 info uinfo=(常数utf8 info ) infos[i];
//替换后的字符串
uInfo.setString ('我是最后的要字符串');
infos[i]=uInfo;
}
}
}
cf.setconstantpool(infos );
fis.close (;
filef=new file (文件路径;
classfilewriter.writetofile(f,cf;
}
}