2013-07-26 39 views
0

我也跟着在下面的帖子中給出的具體步驟:動態地從一個Android應用程序在運行時加載庫

Is it possible to dynamically load a library at runtime from an Android application?

我使用和Android 2.2手機進行測試並獲得這帶動了我一個錯誤瘋狂:(

1月7日至27日:24:55.692:W/System.err的(14319):拋出java.lang.ClassNotFoundException:com.shoaib.A​​ndroidCCL.MyClass在裝載機[email protected]

有人可以幫我現在做什麼..我已經在不同的崗位

我想知道這是否是可行的嘗試了各種建議的解決方案,所以我寫了下面的類:

package org.shoaib.androidccl; 

import android.util.Log; 

public class MyClass { 
    public MyClass() { 
     Log.d(MyClass.class.getName(), "MyClass: constructor called."); 
    } 

    public void doSomething() { 
     Log.d(MyClass.class.getName(), "MyClass: doSomething() called."); 
    } 
} 

而且我在我保存在我的設備的一個DEX文件,它打包SD卡爲/sdcard/testdex.jar

然後我寫了下面的程序,從我的Eclipse項目在去除MyClass後並清除它:

public class Main extends Activity { 

    @SuppressWarnings("unchecked") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     try { 
      final String libPath = Environment.getExternalStorageDirectory() + "/testdex.jar"; 
      final File tmpDir = getDir("dex", 0); 

      final DexClassLoader classloader = new DexClassLoader(libPath, tmpDir.getAbsolutePath(), null, this.getClass().getClassLoader()); 
      final Class<Object> classToLoad = (Class<Object>) classloader.loadClass("org.shoaib.androidccl.MyClass"); 

      final Object myInstance = classToLoad.newInstance(); 
      final Method doSomething = classToLoad.getMethod("doSomething"); 

      doSomething.invoke(myInstance); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

請發佈您的代碼:) – JesusFreke

+0

嗨,歡迎來到Stack Overflow - 請嘗試通過添加一些代碼來改善此答案,例如解釋其中斷的位置以及您嘗試解決問題的方法。 –

+0

@JesusFreke。感謝您的回覆。我只是遵循[鏈接]中給出的步驟(http://stackoverflow.com/questions/6857807/is-it-possible-to-dynamically-load-a-library-at-runtime-from-an-android-應用/ 17890525#17890525)在Android 2.2和2.3上試過了,但仍然收到相同的錯誤 – Shoaib

回答

0

我猜你的問題在於你在DEX MyClass的打包方式。你是怎樣做的?

我跟着Shlublu的線程,並試圖自己,併成功。我不知道如何「在包DEX包MyClass」,所以我只是建立一個android apk並把它放在SD卡。代碼工作。

你是否將MyClass封裝在classes.dex中? DexClassLoader只會在jar/dex中查找classes.dex。也許你可以先嚐試我所做的(建立一個簽名的apk而不是jar,但你不需要安裝apk),然後看它是否正常工作。希望這可以幫助!

相關問題