修改jar包
1.如何用cmd命令到達指定資料夾
https://jingyan.baidu.com/article/60ccbceb60202c64cab1972c.html
2.java 檢視class檔案位元組碼
https://blog.csdn.net/qq_22494029/article/details/79385090
3.jclasslib修改class檔案(位元組碼檔案)----java檔案仍不變,程式編譯的是class檔案,所以結果會改變
https://blog.csdn.net/qq_25900743/article/details/79379596
4.直接修改別人jar包裡面的class檔案 工具:jclasslib
5.jclasslib工具下載:
https://blog.csdn.net/wuhenzhangxing/article/details/73294509
6.jclasslib相關外掛下載
https://plugins.jetbrains.com/plugin/9248-jclasslib-bytecode-viewer
第三點的補充:
安裝好jclasslib Bytecode viewer,之後在C:\Users\Administrator.AndroidStudio3.1\config\plugins\jclasslib\lib路徑下將jclasslib-library.jar包複製到app下的libs資料夾下。
import org.gjt.jclasslib.io.ClassFileWriter; import org.gjt.jclasslib.structures.ClassFile; import org.gjt.jclasslib.structures.Constant; import org.gjt.jclasslib.structures.constants.ConstantStringInfo; import org.gjt.jclasslib.structures.constants.ConstantUtf8Info; import java.io.DataInput; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; public class TestModify { public static void main(String[] args) throws Exception { String filePath = "E:\\KangYingPDA\\TestClass\\HelloWorld.class";//新建的需要進行操作的資料夾 FileInputStream fis = new FileInputStream(filePath); DataInput di = new DataInputStream(fis); ClassFile cf = new ClassFile(); cf.read(di); Constant[] infos = cf.getConstantPool(); int count = infos.length; for(int i = 0; i < count; i++) { if(infos[i] != null) { System.out.print(i); System.out.print(" = "); System.out.print(infos[i].getVerbose()); System.out.print(" = "); // System.out.println(infos[i].getVerbose() != ""); System.out.println(infos[i].getVerbose() != "" ? infos[i].getConstantType() : ""); if(i == 03) { //解決cast錯誤 ConstantStringInfo sInfo = (ConstantStringInfo) infos[i]; int strIndex = sInfo.getStringIndex(); ConstantUtf8Info uInfo = (ConstantUtf8Info)infos[strIndex];; uInfo.setString("要修改的變數字串"); infos[i]=sInfo; } } } cf.setConstantPool(infos); fis.close(); File f = new File(filePath); ClassFileWriter.writeToFile(f, cf); } }
注意:如果直接在AS的Terminal視窗操作java命令,會報錯:java執行顯示“找不到或無法載入主類”!
解決方法:
將java檔案及class檔案放在新建的資料夾下,並把java檔案的package刪去!再用javac命令生成class檔案,java命令編譯class檔案
原理說明:
java程式執行class檔案,對於有包名的類,java把包名當成資料夾處理."包名+類名"相當於"資料夾目錄+類名"來尋找類。