Ⅰ 求E語言通過java支持庫調用jar包時參數傳遞教程
Java載入jar文件並調用jar文件當中有參數和返回值的方法
在工作當中經常遇到反編譯後的jar文件,並要傳入參數了解其中的某些方法的輸出,想到Java裡面的反射可以實現載入jar文件並調用其中的方法來達到自己的目的。就寫了個Demo代碼。
Ⅱ 如何使用URLClassLoader載入本地的Class文件
在Java裡面,我們可以把一些類放到.jar文件裡面,然後用ClassLoader動態載入。例如:[java]viewplainURLClassLoaderucl=URLClassLoader.newInstance(newURL[]{newURL("file:/sdcard/files/test.jar")});Classclazz=ucl.loadClass("com.test.TestClass");但是在Android上面,情況有所不同。首先第一個是jar文件的製作,Java裡面直接把.class文件打包到.jar文件裡面就可以了,但是Android的DalvikVM是不認Java的bytecode的,所以不能直接這么打包,而要用dx工具轉成Dalvikbytecode才可以。當然,dx工具轉了之後,jar包裡面就不是.class文件了,而是.dex文件。第二個是,Android裡面雖然也提供了URLClassLoader的實現,但是並不能用。要動態載入其它類,可以用的ClassLoader有:DexClassLoaderPathClassLoader其中,DexClassLoader可以載入apk,jar或者dex文件,例如:[java]viewplainFilejarFile=newFile("/sdcard/test.dex");if(jarFile.exists()){DexClassLoadercl=newDexClassLoader(jarFile.toString(),"/sdcard/test",null,ClassLoader.getSystemClassLoader());Classc=cl.loadClass("com.qihoo360.test.Test");}但是DexClassLoader要求指定一個可寫的目錄,即DexClassLoader構造函數的第二個參數,在上例中是/sdcard/test這個參數的含義是:因為Dalvik在載入dex文件時,會動態進行優化,DexClassLoader要求指定優化後dex文件存放的位置。PathClassLoader的限制要一些,它只能載入已經安裝到Android系統中的apk文件,也就是/data/app目錄下的apk文件。其它位置的文件載入的時候都會出現ClassNotFoundException.例如:[java]viewplainPathClassLoadercl=newPathClassLoader(jarFile.toString(),"/data/app/",ClassLoader.getSystemClassLoader());為什麼有這個限制呢?我認為這其實是當前Android的一個bug,因為PathClassLoader會去讀取/data/dalvik-cache目錄下的經過Dalvik優化過的dex文件,這個目錄的dex文件是在安裝apk包的時候由Dalvik生成的。例如,如果包的名字是com.qihoo360.test,Android應用安裝之後都保存在/data/app目錄下,即/data/app/com.qihoo360.test-1.apk,那麼/data/dalvik-cache目錄下就會生成data@[email protected]@classes.dex文件。在調用PathClassLoader時,它就會按照這個規則去找dex文件,如果你指定的apk文件是/sdcard/test.apk,它按照這個規則就會去讀/data/dalvik-cache/[email protected]@classes.dex文件,顯然這個文件不會存在,所以PathClassLoader會報錯。在Google修正這個問題之前,我們要麼就只能用DexClassLoader,要麼就只能用PathClassLoader載入已安裝的apk了。
Ⅲ eclipse中的java工程項目如何引用外部jar包和dll動態鏈接庫
1、引用jar包
絕對路徑引用:右鍵工程-->properties-->Java Build Path-->Libraries-->Add external JARs... ,在彈出的對話框中選擇要引入的jar包,OK即可。
相對路徑引用:首先在工程目錄下,新建一個libs文件夾,將要導入的jar包放入其中,然後右鍵工程-->properties-->Java Build Path-->Libraries-->Add JARs... ,在彈出的對話框中選擇libs文件夾下的jar包即可。
2、引用dll動態鏈接庫
絕對路徑引用:右鍵工程-->properties-->java Build Path-->Source,點開工程,選擇Native libraries location....,點擊右側的edit..-->external Folder...,選擇要引入的dll文件所在文件夾即可。
相對路徑引用:首先在工程目錄下,新建一個libs文件夾,將要導入的dll文件包放入其中,右鍵工程-->properties-->java Build Path-->Source,點開工程,選擇Native libraries location....,點擊右側的edit..-->Workspace..,選擇libs文件夾即可。