2012-11-23 41 views
0

我有一個Android應用程序需要能夠加載外部Jar文件。我知道罐子的位置。Android:通過ClassLoader加載外部Jar文件

我一直在玩Android API提供的PathClassLoader類無濟於事。我使用下面的代碼從活動中:

String jarPath = "/sdcard/jars/testjar.jar"; 

PathClassLoader myClassLoader = new PathClassLoader(jarPath, ClassLoader.getSystemClassLoader()); 

     try 
    { 
     Class<?> clazz = Class.forName("com.test.Class1", true, myClassLoader); 
    } 
    catch(Exception ex) 
    { 
     ex.printStackTrace(); 
    } 

在實例化PathClassLoader實例,Dalvik的消息輸出到logcat的告訴我,它無法找到「classes.dex」文件。之後,'Class.forName'拋出'ClassNotFoundException'。

我想找到一種方法來加載外部Jar文件中的類,而不需要'classes.dex'文件。 Jar文件不包含這個文件,但是當其他應用程序在類路徑中使用Jar構建時,Dalvik可以非常高興地加載這些類。

簡而言之:如何在不需要'classes.dex'的情況下從外部Jar文件加載類?

非常感謝, P

更新 通過的Dalvik記錄的消息是

Zip是好的,但沒有classes.dex內,並在同一目錄中沒有有效.odex文件

回答

0

我發現瞭解決方案。發佈這個問題時,我可能太匆忙了。

當然.dex文件是必需的,因爲這正是Dalvik執行的。

要解決我的問題,我已經dex'd外部Jar文件,所以他們現在包括他們自己的'classes.dex'。幸運的是,這是我們持續集成環境的一部分,因此一旦我們檢出並構建了Android庫,通過dx.exe生成一個額外的中間步驟就會生成'classes.dex',並最終允許我在運行時從Jar加載類,時間。

+0

嗨@protectedmember,我處於類似的情況。您能否告訴我要採取的措施?我實際上已經使用dex2jar將apk轉換爲jar文件。現在,當我使用dexclassloader加載這個類時,有一個錯誤,例如'Zip很好,但沒有classes.dex,並且在同一個目錄下沒有有效的.odex文件。 – Lal

1

有一個名爲「dx」的工具,該工具可以將Java二進制代碼轉換爲Android Dalvik二進制代碼。在Android中,Java二進制代碼無法識別。