我也跟着在下面的帖子中給出的具體步驟:動態地從一個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.AndroidCCL.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();
}
}
}
請發佈您的代碼:) – JesusFreke
嗨,歡迎來到Stack Overflow - 請嘗試通過添加一些代碼來改善此答案,例如解釋其中斷的位置以及您嘗試解決問題的方法。 –
@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