デスクトップとモバイル (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アプリでほぼ同じことを行うにはどうすればよいですか?
1 つのアイデアは、Android マニフェストを変更して既存のアクティビティを「ラッパー」アクティビティに置き換え、クラス ローダーをインストールして、元の基になるアクティビティを呼び出すことです。より良い方法はありますか?