http://www.sable.mcgill.ca/soot/tutorial/profiler2/profiler2.htmlの Java 計測の例に従って、ヘルパー クラスを使用して Android アプリケーションを計測しています。
私の BodyTransformer には、MyCounter クラスをロードするための静的ブロックがあります。
counterClass = Scene.v().loadClassAndSupport("MyCounter");
私の引数を処理する Soot.Main.main(args) (-android-jars を提供する) は、MyCounter のロード中に実行されないため、Soot は私の Android jar を見つけることができず、エラーが発生します。
Caused by: java.lang.RuntimeException: You are analyzing an Android application but did not define android.jar. Options -android-jars or -force-android-jar should be used.
at soot.Scene.defaultClassPath(Scene.java:455)
at soot.Scene.getSootClassPath(Scene.java:224)
at soot.SootResolver.<init>(SootResolver.java:81)
at soot.Singletons.soot_SootResolver(Singletons.java:802)
at soot.SootResolver.v(SootResolver.java:91)
at soot.Scene.loadClass(Scene.java:667)
at soot.Scene.loadClassAndSupport(Scene.java:653)
at MyBodyTransformer.<clinit>(MyBodyTransformer.java:26)
... 1 more
解決策として、BodyTransformer を作成する前に、メイン クラスにコマンド ライン引数 (android jar、soot クラスパス、プリペンド クラスパス、およびプロセス ディレクトリ) を指定しました。今、それは動作します。
この問題を解決するためのより適切な方法があるかどうかを尋ねたいと思います。