<div dir="ltr">Hi Xueliang,<div><br></div><div>Have you solved those problems now? I meet the same problems as you. Could you please help me<br><br>在 2014年10月29日星期三 UTC+8下午6:12:19,Xueliang Li写道:<blockquote class="gmail_quote" style="margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">
<div style="word-wrap:break-word;color:rgb(0,0,0);font-size:14px;font-family:Calibri,sans-serif">
<div>Hi all,</div>
<div><br>
</div>
<div>I am now constructing the cll graph of an Android app, a game app. The main code in as below:</div>
<div><br>
</div>
<div><br>
</div>
<div><span style="white-space:pre"></span>public static void main(String[] args) {</div>
<div><br>
</div>
<div><span style="white-space:pre"></span>// TODO Auto-generated method stub</div>
<div><br>
</div>
<div><span style="white-space:pre"></span>SetupApplication app = new SetupApplication("/Users/<wbr>xueliang/Documents/tools/<wbr>sootpackages/android-4.0.3_r1.<wbr>jar","/Users/xueliang/<wbr>Documents/tools/<wbr>AndroidInstrument/cocos2d_<wbr>android.apk");</div>
<div><span style="white-space:pre"></span>try {</div>
<div><br>
</div>
<div><span style="white-space:pre"></span>app.<wbr>calculateSourcesSinksEntrypoin<wbr>ts("/Users/xueliang/Documents/<wbr>workspace/soot-infoflow-<wbr>android/SourcesAndSinks.txt");</div>
<div><br>
</div>
<div><span style="white-space:pre"></span>} catch (IOException e) {</div>
<div><br>
</div>
<div><span style="white-space:pre"></span>// TODO Auto-generated catch block</div>
<div><br>
</div>
<div><span style="white-space:pre"></span>e.printStackTrace();</div>
<div><br>
</div>
<div><span style="white-space:pre"></span>} catch (XmlPullParserException e) {</div>
<div><br>
</div>
<div><span style="white-space:pre"></span>// TODO Auto-generated catch block</div>
<div><br>
</div>
<div><span style="white-space:pre"></span>e.printStackTrace();</div>
<div><br>
</div>
<div> }</div>
<div><br>
</div>
<div> soot.G.reset();</div>
<div><br>
</div>
<div><span style="white-space:pre"></span>Options.v().set_src_prec(<wbr>Options.src_prec_apk);</div>
<div><br>
</div>
<div><span style="white-space:pre"></span>Options.v().set_process_dir(<wbr>Collections.singletonList("/<wbr>Users/xueliang/Documents/<wbr>tools/AndroidInstrument/<wbr>cocos2d_android.apk"));</div>
<div><br>
</div>
<div><span style="white-space:pre"></span>Options.v().set_android_jars("<wbr>/Users/xueliang/Documents/<wbr>tools/sootpackages");</div>
<div><br>
</div>
<div><span style="white-space:pre"></span>Options.v().set_whole_program(<wbr>true);</div>
<div><br>
</div>
<div><span style="white-space:pre"></span>Options.v().set_allow_phantom_<wbr>refs(true);</div>
<div><br>
</div>
<div><span style="white-space:pre"></span>Options.v().set_output_format(<wbr>Options.output_format_none);</div>
<div><br>
</div>
<div><span style="white-space:pre"></span>Options.v().setPhaseOption("<wbr>cg.spark", "on");</div>
<div><br>
</div>
<div> Scene.v().<wbr>loadNecessaryClasses(); </div>
<div><br>
</div>
<div> SootMethod entryPoint = app.getEntryPointCreator().<wbr>createDummyMain();</div>
<div><br>
</div>
<div> Options.v().set_main_class(<wbr>entryPoint.getSignature());</div>
<div><br>
</div>
<div> Scene.v().setEntryPoints(<wbr>Collections.singletonList(<wbr>entryPoint));</div>
<div><br>
</div>
<div><span style="white-space:pre"></span> System.out.println(<wbr>entryPoint.getActiveBody());</div>
<div><br>
</div>
<div> PackManager.v().runPacks();</div>
<div><br>
</div>
<div><span style="white-space:pre"></span>System.out.println(Scene.v().<wbr>getCallGraph().size());</div>
<div><br>
</div>
<div> }</div>
<div><br>
</div>
<div>However, I still cannot get the expected result, a call graph. The information shown in console is a large amount, I summarise it as the steps below:</div>
<div><br>
</div>
<div>1. The message is </div>
<div><br>
</div>
<div> “[Call Graph] For information on where the call graph may be incomplete, use the verbose option to the cg phase.</div>
<div> [Spark] Pointer Assignment Graph in 0.4 seconds.</div>
<div> [Spark] Type masks in 0.1 seconds.</div>
<div> [Spark] Pointer Graph simplified in 0.0 seconds.</div>
<div> [Spark] Propagation in 5.1 seconds.</div>
<div> [Spark] Solution found in 5.1 seconds.</div>
<div> Callback analysis done.</div>
<div> Found 0 layout controls</div>
<div> Using '/Users/xueliang/Documents/<wbr>tools/sootpackages/android-4.<wbr>0.3_r1.jar' as android.jar"</div>
<div><br>
</div>
<div>2. A large list of warnings displays all the phantom classes, like</div>
<div><br>
</div>
<div> Warning: java.lang.NoClassDefFoundError is a phantom class!</div>
<div> Warning: java.lang.StringBuffer is a phantom class!</div>
<div> Warning: java.lang.Boolean is a phantom class!</div>
<div> Warning: java.lang.Long is a phantom class!</div>
<div> Warning: java.lang.Integer is a phantom class!</div>
<div> Warning: java.lang.Short is a phantom class!</div>
<div> …………………………….</div>
<div> </div>
<div>3. The generated main method, like</div>
<div><br>
</div>
<div> public static void dummyMainMethod()</div>
<div> {</div>
<div> int $i0;</div>
<div> org.cocos2d.tests.<wbr>SoundEngineTest $r0;</div>
<div> ……………………………………</div>
<div><br>
</div>
<div>4. Repeat steps 1 to 3 for three times, exactly the same message.</div>
<div><br>
</div>
<div>5. Transform all the classes in the app, like</div>
<div><br>
</div>
<div>
<div> Transforming org.cocos2d.tests.ActionsTest$<wbr>ActionProperty... </div>
<div> Transforming com.badlogic.gdx.physics.<wbr>box2d.joints.MouseJointDef... </div>
<div> Transforming org.cocos2d.nodes.CCLabel... </div>
<div> Transforming org.cocos2d.utils.collections.<wbr>ConcNodeCachingLinkedQueue... </div>
<div> Transforming org.cocos2d.transitions.<wbr>CCRadialCCWTransition… </div>
</div>
<div> ………………………..</div>
<div>6. End with a number “30606” in the last line.</div>
<div><br>
</div>
<div>Could anyone tell me what happened? And how to fix it to get the desired call graph? Thank you!!</div>
<div><br>
</div>
<div>Best wishes</div>
<div>Xueliang</div>
<div><br>
</div>
<div><br>
</div>
<div> </div>
</div>
</blockquote></div></div>