public
class
MainActivity
extends
AppCompatActivity {
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addClassLoader(
this
,
"/sdcard/2.dex"
);
}
public
void
addClassLoader(Context context, String DexFilePath) {
Log.d(
"测试"
,
"lado: ============成功加载lado"
);
File fIleDex = context.getDir(
"oopt_dex"
,
0
);
File fileLib = context.getDir(
"lib_path"
,
0
);
Log.d(
"测试"
,
"lado: ============开始创建类加载器"
);
ClassLoader pathClassLoader= MainActivity.
this
.getClassLoader();
ClassLoader boootClassLoader= MainActivity.
this
.getClassLoader().getParent();
DexClassLoader dexClassLoader =
new
DexClassLoader(DexFilePath, fIleDex.getAbsolutePath(), fileLib.getAbsolutePath(), boootClassLoader);
try
{
Field parentField = ClassLoader.
class
.getDeclaredField(
"parent"
);
parentField.setAccessible(
true
);
parentField.set(pathClassLoader,dexClassLoader);
}
catch
(NoSuchFieldException e) {
e.printStackTrace();
}
catch
(IllegalAccessException e) {
e.printStackTrace();
}
Class<?> clazz =
null
;
try
{
clazz = dexClassLoader.loadClass(
"com.playgame.demooo.MainActivity"
);
if
(clazz !=
null
) {
context.startActivity(
new
Intent(context,clazz));
}
}
catch
(ClassNotFoundException e) {
e.printStackTrace();
}
}
}