2014-05-30 3 views
1

http://www.sable.mcgill.ca/soot/tutorial/profiler2/profiler2.html의 Java 계측에 대한 예제에 따라 도우미 클래스를 사용하여 Android 애플리케이션을 계측하고 있습니다. 제 BodyTransformer에서 헬퍼 클래스를 사용하여 Soot로 Android 앱을 계측

, 난 MyCounter 클래스

counterClass = Scene.v().loadClassAndSupport("MyCounter"); 

(I는 -android-병을 제공하는) 내 인수를 처리 Soot.Main.main (인수)이 실행되지 않기 때문에로드 정적 블록을 이 MyCounter를로드하는 동안, 그을음 내 안드로이드 항아리를 발견하고 오류 제공 할 수 없습니다 솔루션으로

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를 만들기 전에 이제 작동합니다.

이 문제를 해결하는 더 적절한 방법이 있는지 묻고 싶습니다.

답변

0

loadClassAndSupport는 충분하지 않습니다. 여기 당신이해야 할 일이 있습니다. 분석의 기본 방법에서, Soot의 main 메소드를 호출하기 전에 다음을 추가하십시오 :

Scene.v(). addBasicClass ("MyCounter");

다음 분석에서 간단하게 Scene.v(). getSootClass ("MyCounter")를 사용하십시오.