从反射中执行其他app方法

时间:2013-02-13 06:41:35

标签: android

我有一个应用A,将其安装到设备

public class A1 extends Activity {
    void onCreate() ...
    void onResume() ...
    void showToast() {
        Toast.makeText(this, "showA1", Toast.LENGTH_SHORT).show();
    }
}

我写了另一个应用B,想要执行A1.showToast(),但在A1.showToast()处遇到NullPointerException。

@SuppressWarnings("unchecked")
@Override
public void onClick(View v) {
    String packagePath = "A";
    String classPath = "A.A1";

    try {
        String apkName = getPackageManager().getApplicationInfo(
                packagePath, 0).sourceDir;
        PathClassLoader pathClassLoader = new PathClassLoader(apkName,
                ClassLoader.getSystemClassLoader());
        Class<Activity> handler = (Class<Activity>) Class.forName(
                classPath, true, pathClassLoader);
        Method[] mm = handler.getDeclaredMethods();

        for (Method m : mm) {
            Log.d("Method", m.getName());
        }

        Method method = handler.getDeclaredMethod("showToast",
                (Class[]) null);

        method.setAccessible(true);
        method.invoke(handler.newInstance(), (Object[]) null);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我知道A1没有初始化,所以“this”为null。有人可以帮我解决这个问题吗?

0 个答案:

没有答案