我正在编写一个我想在桌面和移动设备(Android)上工作的工具库。
它的功能是:
像这样:
// Expects args[0] to contain the name of the INNER main
public static void main(String[] args) throws Throwable {
String className = args[0];
String [] newArgs = new String[0];
if(args.length > 1) {
newArgs = Arrays.copyOfRange(args, 1, args.length-1);
}
System.out.println("Bootstrapping " + className);
Loader s = new Loader(ClassLoader.getSystemClassLoader().getParent());
Class<?> c = s.loadClass(className);
c.getDeclaredMethod("main", new Class[] { String[].class }).invoke(
null, new Object[] { newArgs });
}
问题是:
我如何为Android应用程序做同样的事情?
一个想法是修改android清单,用“wrapper”活动替换现有活动,然后安装类加载器并调用原始底层活动。还有更好的方法吗?
答案 0 :(得分:5)
有一个名为droidbox的项目来检测Android恶意软件。有一个代码可以帮助你很多。
package com.loader;
import dalvik.system.DexClassLoader;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class LoaderActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DexClassLoader dLoader = new DexClassLoader("/sdcard/DroidBoxTests.apk","/sdcard/", null, ClassLoader.getSystemClassLoader().getParent());
Class calledClass = null;
try {
calledClass = dLoader.loadClass("droidbox.tests.DroidBoxTests");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Intent it=new Intent(this, calledClass);
it.setClassName("droidbox.tests", "droidbox.tests.DroidBoxTests");
startActivity(it);
}
}