將已經編譯好的.class或者.dex檔案放在sdcard中,供一個已安裝的程式動態調用:
首先將.class檔案轉換成.dex檔案:
package com.dynamic;
public interface IDynamic {
public String helloWorld();
}
package com.dynamic;
public class DynamicTest implements IDynamic {
@Override
public String helloWorld() {
return "Hello World!";
}
}
將com.dynamic打包成dynamic.jar
將jar包dynamic.jar放到D:\soft\sdk\sdk\platform-tools目錄下,dos命令切換到此目錄下,輸入dx --dex --output=dynamic.dex dynamic.jar,將此目錄下產生的dynamic.dex檔案放到sdcard裡面。
[java]
final File optimizedDexOutputPath = new File(Environment.getExternalStorageDirectory().toString()+File.separator +"wftech"+
File.separator+"dex"+File.separator+ "dynamic.dex");//將dynamic.dex放到/mnt/wftech目錄下
DexClassLoader cl = new DexClassLoader(optimizedDexOutputPath.getAbsolutePath(),
<STRONG><SPAN style="COLOR: #ff0000">MainActivity.this.getDir("dex", 0).getAbsolutePath()</SPAN></STRONG>,//一定不能寫錯
null, getClassLoader());
Class libProviderClazz = null;
try {
libProviderClazz = cl.loadClass("com.dynamic.DynamicTest");
IDynamic lib = (IDynamic)libProviderClazz.newInstance();
Toast.makeText(MainActivity.this, lib.helloWorld(), Toast.LENGTH_SHORT).show();
} catch (Exception exception) {
exception.printStackTrace();
}
final File optimizedDexOutputPath = new File(Environment.getExternalStorageDirectory().toString()+File.separator +"wftech"+
File.separator+"dex"+File.separator+ "dynamic.dex");//將dynamic.dex放到/mnt/wftech目錄下
DexClassLoader cl = new DexClassLoader(optimizedDexOutputPath.getAbsolutePath(),
MainActivity.this.getDir("dex", 0).getAbsolutePath(),//一定不能寫錯
null, getClassLoader());
Class libProviderClazz = null;
try {
libProviderClazz = cl.loadClass("com.dynamic.DynamicTest");
IDynamic lib = (IDynamic)libProviderClazz.newInstance();
Toast.makeText(MainActivity.this, lib.helloWorld(), Toast.LENGTH_SHORT).show();
} catch (Exception exception) {
exception.printStackTrace();
}