通过DexClassLoader加载apk
可以先做一个简单的app,建立一个类
public class MyString {
public String getString(){
return "this is MyString";
}
}
然后生成apk文件,将其命名为test.apk
将test.apk放在要运行项目的assets中,再将test.apk复制到file文件下
于是就可以假设apk文件在file文件下了
File destination=new File(getFilesDir(),"test.apk"); //apk文件
//三个参数分别是:apk文件目录,从apk解压出的dex放置位置,LibrarySearchPath,类加载器
DexClassLoader dexClassLoader=new DexClassLoader(destination.getPath(),getFilesDir().getPath(),null,getClassLoader());
然后可以通过反射获取MyString.getString
Class clazz=dexClassLoader.loadClass("com.kyousuke.aidl.MyString");
Object o=clazz.newInstance();
Method method=clazz.getMethod("getString");
String s=(String)method.invoke(o);
Log.d("my",s);