<html><head></head><body><div class="ydpd741e5d2yahoo-style-wrap" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;"><div id="ydpd741e5d2yiv4772106652" style=""><div style=""><div style="" class="ydpd741e5d2yiv4772106652ydpa0b58f3ayahoo-style-wrap"><div style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;"></div>
        <div dir="ltr" data-setdir="false" style="">Dear Prof. Dr. Arzt</div><div dir="ltr" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;"><br clear="none"></div><div dir="ltr" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;">Regarding the solutions you mentioned:</div><div dir="ltr" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;"><br></div><div dir="ltr" data-setdir="false" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;"><div><div style="color: rgb(0, 0, 0); font-family: Helvetica Neue, Helvetica, Arial, sans-serif;">b) Implement an imprecise mode that picks up all fragments, regardless of whether they are used or not. This would, however, increase the size and complexity of the dummy main method, because you would need to associate each fragment with each activity.</div><div dir="ltr" data-setdir="false" style="color: rgb(0, 0, 0); font-family: Helvetica Neue, Helvetica, Arial, sans-serif;">> Yes, I agree this might be too imprecise. I was thinking of possibly treating all fragments as independent components (e.g like activities) for which  lifecycles would be modelled resolved by default, then only when used by some activity, they would be integrated within that activity lifecycle. </div><div dir="ltr" data-setdir="false" style="color: rgb(0, 0, 0); font-family: Helvetica Neue, Helvetica, Arial, sans-serif;">But this might defeat the purpose of having the dummy main as a single entrypoint, so I'll focus on option a) instead.</div></div><br></div><div dir="ltr" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;"><br clear="none"></div><div dir="ltr" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;"><div><span style="color:rgb(0, 0, 0);font-family:Helvetica Neue, Helvetica, Arial, sans-serif;">> a) Find the code or XML that references the fragment and check why FlowDroid doesn't recognize it. Extend FlowDroid to detect this reference.</span></div><br clear="none"></div><div dir="ltr" data-setdir="false" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;">I started looking into the fragment identification to figure out what was going wrong on my example. It seems the issue occurs when resolving the type of the fragment in AbstractCallbackAnalyzer.<span>analyzeMethodForFragmentTransaction</span><br clear="none"></div><div dir="ltr" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;"><div><pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'JetBrains Mono', monospace;font-size:8pt;">Value br = stmt.getInvokeExpr().getArg(i)<span style="color:#cc7832;">;<br clear="none"></span><span style="color:#cc7832;"><br clear="none"></span><span style="color:#808080;">// Is this a fragment?<br clear="none"></span><span style="color:#cc7832;">if </span>(br.getType() <span style="color:#cc7832;">instanceof </span>RefType) {<br clear="none">   RefType rt = (RefType) br.getType()<span style="color:#cc7832;">;</span></pre></div>Here, only the static type of the fragment is retained, independently from the context, which will default to parameter types for method invocations. </div><div dir="ltr" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;">For e.g:</div><div dir="ltr" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;"><br></div><div dir="ltr" data-setdir="false" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;">void createFragment(android.app.Fragment fragment){</div><div dir="ltr" data-setdir="false" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;">    fragmentManager.beginTransaction().add(fragment)<br></div><div dir="ltr" data-setdir="false" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;">}</div><div dir="ltr" data-setdir="false" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;"><br></div><div dir="ltr" data-setdir="false" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;">might be invoked with different types of fragments, but only android.app.Fragment will be returned here. </div><div dir="ltr" data-setdir="false" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;"><br></div><div dir="ltr" data-setdir="false" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;">I thought of using PointsToAnalysis.reachingObjects, then add all possible types as fragments of that activity. However, the pointer analysis is only set after the callgraph is constructed and is still a DumbPointerAnalysis in this stage.</div><div dir="ltr" data-setdir="false" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;"><br></div><div dir="ltr" data-setdir="false" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;">Thus, I think a solution would either be to set the pointer analysis earlier than when applying the "cg" pack or to perform a backward data-flow analysis for definitions of the fragment object. </div><div dir="ltr" data-setdir="false" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;">Would you recommend one over the other?</div><div dir="ltr" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;"><div><span style="font-family:Helvetica Neue, Helvetica, Arial, sans-serif;"><br clear="none"></span></div><div><br></div><div dir="ltr" data-setdir="false">Best regards,</div><div dir="ltr" data-setdir="false">Faridah Akinotcho</div></div><div style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;"><br clear="none"></div>
        
        </div></div></div></div><div id="yiv4772106652yqt00122" class="yiv4772106652yqt3412460006"><div id="yiv4772106652yahoo_quoted_2545680926" class="yiv4772106652yahoo_quoted">
            <div style="font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;color:#26282a;">
                
                <div>
                    Le vendredi 13 mai 2022, 14:14:15 UTC−7, Arzt, Steven <steven.arzt@sit.fraunhofer.de> a écrit :
                </div>
                <div><br clear="none"></div>
                <div><br clear="none"></div>
                <div><div dir="ltr">Dear Faridah,<br clear="none"><br clear="none">FlowDroid integrates fragments into its dummy main method if it detects that the fragment is actually used in some activity. This allows FlowDroid to precisely associate fragments with their respective parent activity. Therefore, if the fragment is there, but FlowDroid cannot find code that instantiates it, or XML files that reference it, the fragment is missed. I see two possible solutions:<br clear="none"><br clear="none">a) Find the code or XML that references the fragment and check why FlowDroid doesn't recognize it. Extend FlowDroid to detect this reference.<br clear="none"><br clear="none">b) Implement an imprecise mode that picks up all fragments, regardless of whether they are used or not. This would, however, increase the size and complexity of the dummy main method, because you would need to associate each fragment with each activity.<br clear="none"><br clear="none">Best regards,<br clear="none">  Steven<br clear="none"><br clear="none"><br clear="none">-----Original Message-----<br clear="none">From: Faridah Akinotcho <<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:faridath.akinotcho@yahoo.fr" target="_blank" href="mailto:faridath.akinotcho@yahoo.fr">faridath.akinotcho@yahoo.fr</a>> <br clear="none">Sent: Freitag, 13. Mai 2022 21:10<br clear="none">To: Eric Bodden <<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:eric.bodden@uni-paderborn.de" target="_blank" href="mailto:eric.bodden@uni-paderborn.de">eric.bodden@uni-paderborn.de</a>>; Arzt, Steven <<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:steven.arzt@sit.fraunhofer.de" target="_blank" href="mailto:steven.arzt@sit.fraunhofer.de">steven.arzt@sit.fraunhofer.de</a>><br clear="none">Cc: Soot-list <<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:soot-list@cs.mcgill.ca" target="_blank" href="mailto:soot-list@cs.mcgill.ca">soot-list@cs.mcgill.ca</a>><br clear="none">Subject: Re: [Soot-list] Missing callgraph edges with Spark<br clear="none"><br clear="none">Hello Prof. Dr. Arzt, Prof.Dr.Bodden,<br clear="none"><br clear="none">I reproduced the issue of edges missing for fragment lifecycles using Flowdroid 2.11-SNAPSHOT as well. <br clear="none">Looking into AndroidEntryPointCreator, as you recommended, it seems method active bodies (and thus outgoing edges), will only be resolved for added fragments (i.e for which transactions and the correct type were identified by the CallbackAnalyzer ) but not for any other fragment class i.e classes within the app's namespace which extend android.app.Fragment or Support Library fragments.<br clear="none"><br clear="none"><br clear="none">Is this assumption correct? <br clear="none"><br clear="none"><br clear="none">If that is the case, I guess one would either need to refine the fragment identifcation for those missing fragments or somehow modify the analysis to resolve active bodies for any fragment lifecycle as long as the fragment is within the app package.<br clear="none"><br clear="none">Best regards,<br clear="none">Faridah Akinotcho<br clear="none"><br clear="none">Le mardi 10 mai 2022, 12:31:51 UTC−7, Arzt, Steven <<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:steven.arzt@sit.fraunhofer.de" target="_blank" href="mailto:steven.arzt@sit.fraunhofer.de">steven.arzt@sit.fraunhofer.de</a>> a écrit : <br clear="none"><br clear="none"><br clear="none">Dear Faridah,<br clear="none"><br clear="none">FlowDroid applies a precise model for app components including fragments. You may want to look into the "AndroidEntryPointCreator" to identify any missing parts. Maybe there is a bug. Feel free to open merge request if you find something.<br clear="none"><br clear="none">Best regards,<br clear="none">  Steven<br clear="none"><br clear="none"><br clear="none">-----Original Message-----<br clear="none">From: Faridah Akinotcho <<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:faridath.akinotcho@yahoo.fr" target="_blank" href="mailto:faridath.akinotcho@yahoo.fr">faridath.akinotcho@yahoo.fr</a> <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:faridath.akinotcho@yahoo.fr" target="_blank" href="mailto:faridath.akinotcho@yahoo.fr">faridath.akinotcho@yahoo.fr</a>> > <br clear="none">Sent: Dienstag, 10. Mai 2022 21:28<br clear="none">To: Eric Bodden <<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:eric.bodden@uni-paderborn.de" target="_blank" href="mailto:eric.bodden@uni-paderborn.de">eric.bodden@uni-paderborn.de</a> <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:eric.bodden@uni-paderborn.de" target="_blank" href="mailto:eric.bodden@uni-paderborn.de">eric.bodden@uni-paderborn.de</a>> >; Arzt, Steven <<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:steven.arzt@sit.fraunhofer.de" target="_blank" href="mailto:steven.arzt@sit.fraunhofer.de">steven.arzt@sit.fraunhofer.de</a> <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:steven.arzt@sit.fraunhofer.de" target="_blank" href="mailto:steven.arzt@sit.fraunhofer.de">steven.arzt@sit.fraunhofer.de</a>> ><br clear="none">Cc: Soot-list <<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:soot-list@cs.mcgill.ca" target="_blank" href="mailto:soot-list@cs.mcgill.ca">soot-list@cs.mcgill.ca</a> <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:soot-list@cs.mcgill.ca" target="_blank" href="mailto:soot-list@cs.mcgill.ca">soot-list@cs.mcgill.ca</a>> ><br clear="none">Subject: Re: [Soot-list] Missing callgraph edges with Spark<br clear="none"><br clear="none">Hi Prof. Dr. Arzt, Prof. Dr. Bodden,<br clear="none"><br clear="none">I followed your recommendations of using Flowdroid and preprocessors, instead of Soot, for which I thank you once again.<br clear="none"><br clear="none">While it did provide me with a much more precise callgraph on the example I showed before, some of the edges that were found previously by Soot are now missing, and from a first look, it seems those are all within fragment lifecycles (e.g onViewCreated). Is there anything regarding how fragment classes are handled by Flowdroid which you believe could explain this behavior?<br clear="none"><br clear="none">Best regards,<br clear="none">Faridah Akinotcho <br clear="none"><br clear="none">Le lundi 9 mai 2022, 19:27:11 UTC−7, Faridah Akinotcho <<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:faridath.akinotcho@yahoo.fr" target="_blank" href="mailto:faridath.akinotcho@yahoo.fr">faridath.akinotcho@yahoo.fr</a> <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:faridath.akinotcho@yahoo.fr" target="_blank" href="mailto:faridath.akinotcho@yahoo.fr">faridath.akinotcho@yahoo.fr</a>> > a écrit : <br clear="none"><br clear="none"><br clear="none">Thank you for clarifying this! I'll try setting up my analysis within this Flowdroid callback instead.<br clear="none"><br clear="none"><br clear="none">Best regards,<br clear="none">Faridah Akinotcho<br clear="none"><br clear="none"><br clear="none">Le lundi 9 mai 2022, 12:12:00 UTC−7, Arzt, Steven <<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:steven.arzt@sit.fraunhofer.de" target="_blank" href="mailto:steven.arzt@sit.fraunhofer.de">steven.arzt@sit.fraunhofer.de</a> <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:steven.arzt@sit.fraunhofer.de" target="_blank" href="mailto:steven.arzt@sit.fraunhofer.de">steven.arzt@sit.fraunhofer.de</a>> > a écrit : <br clear="none"><br clear="none"><br clear="none">Dear Faridah,<br clear="none"><br clear="none">You can call SetupApplication.addPreprocessor() to add a callback that gets invoked once the callgraph construction is done in FlowDroid. The interface has two methods, one before and one after callgraph construction. You just need to use the FlowDroid API, i.e., the SetupApplication class. That should be fairly simple.<br clear="none"><br clear="none">Best regards,<br clear="none">  Steven<br clear="none"><br clear="none">-----Original Message-----<br clear="none">From: Soot-list <<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:soot-list-bounces@CS.McGill.CA" target="_blank" href="mailto:soot-list-bounces@CS.McGill.CA">soot-list-bounces@CS.McGill.CA</a> <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:soot-list-bounces@CS.McGill.CA" target="_blank" href="mailto:soot-list-bounces@CS.McGill.CA">soot-list-bounces@CS.McGill.CA</a>>  <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:soot-list-bounces@CS.McGill.CA" target="_blank" href="mailto:soot-list-bounces@CS.McGill.CA">soot-list-bounces@CS.McGill.CA</a> <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:soot-list-bounces@CS.McGill.CA" target="_blank" href="mailto:soot-list-bounces@CS.McGill.CA">soot-list-bounces@CS.McGill.CA</a>> > > On Behalf Of Faridah Akinotcho<br clear="none">Sent: Montag, 9. Mai 2022 21:11<br clear="none">To: Eric Bodden <<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:eric.bodden@uni-paderborn.de" target="_blank" href="mailto:eric.bodden@uni-paderborn.de">eric.bodden@uni-paderborn.de</a> <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:eric.bodden@uni-paderborn.de" target="_blank" href="mailto:eric.bodden@uni-paderborn.de">eric.bodden@uni-paderborn.de</a>>  <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:eric.bodden@uni-paderborn.de" target="_blank" href="mailto:eric.bodden@uni-paderborn.de">eric.bodden@uni-paderborn.de</a> <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:eric.bodden@uni-paderborn.de" target="_blank" href="mailto:eric.bodden@uni-paderborn.de">eric.bodden@uni-paderborn.de</a>> > ><br clear="none">Cc: Soot-list <<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:soot-list@cs.mcgill.ca" target="_blank" href="mailto:soot-list@cs.mcgill.ca">soot-list@cs.mcgill.ca</a> <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:soot-list@cs.mcgill.ca" target="_blank" href="mailto:soot-list@cs.mcgill.ca">soot-list@cs.mcgill.ca</a>>  <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:soot-list@cs.mcgill.ca" target="_blank" href="mailto:soot-list@cs.mcgill.ca">soot-list@cs.mcgill.ca</a> <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:soot-list@cs.mcgill.ca" target="_blank" href="mailto:soot-list@cs.mcgill.ca">soot-list@cs.mcgill.ca</a>> > ><br clear="none">Subject: Re: [Soot-list] Missing callgraph edges with Spark<br clear="none"><br clear="none">Hi Prof. Dr. Bodden,<br clear="none"><br clear="none">Thank you for the reply! I am using bare Soot because I am trying to add a wjtp subphase and I couldn't figure out how to do with Flowdroid without having to extend it and override constructCallgraph. Would there be a way for me to this with Flowdroid?<br clear="none"><br clear="none">Best regards,<br clear="none">Faridah Akinotcho<br clear="none"><br clear="none">Le lundi 9 mai 2022, 05:20:22 UTC−7, Eric Bodden <<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:eric.bodden@uni-paderborn.de" target="_blank" href="mailto:eric.bodden@uni-paderborn.de">eric.bodden@uni-paderborn.de</a> <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:eric.bodden@uni-paderborn.de" target="_blank" href="mailto:eric.bodden@uni-paderborn.de">eric.bodden@uni-paderborn.de</a>>  <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:eric.bodden@uni-paderborn.de" target="_blank" href="mailto:eric.bodden@uni-paderborn.de">eric.bodden@uni-paderborn.de</a> <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:eric.bodden@uni-paderborn.de" target="_blank" href="mailto:eric.bodden@uni-paderborn.de">eric.bodden@uni-paderborn.de</a>> > > a écrit : <br clear="none"><br clear="none"><br clear="none">Hi Faridah. <br clear="none"><br clear="none"><br clear="none">When creating callgraphs for Android you should be using our Soot-extension FlowDroid because it models Android’s lifecycle. When you use bare Soot then the callgraph will be very incomplete. Are you using FlowDroid already?<br clear="none"><br clear="none"><br clear="none">Cheers<br clear="none">Eric<br clear="none"><br clear="none"><br clear="none"><br clear="none">    On 9. May 2022, at 00:11, Faridah Akinotcho <<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:faridath.akinotcho@yahoo.fr" target="_blank" href="mailto:faridath.akinotcho@yahoo.fr">faridath.akinotcho@yahoo.fr</a> <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:faridath.akinotcho@yahoo.fr" target="_blank" href="mailto:faridath.akinotcho@yahoo.fr">faridath.akinotcho@yahoo.fr</a>>  <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:faridath.akinotcho@yahoo.fr" target="_blank" href="mailto:faridath.akinotcho@yahoo.fr">faridath.akinotcho@yahoo.fr</a> <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:faridath.akinotcho@yahoo.fr" target="_blank" href="mailto:faridath.akinotcho@yahoo.fr">faridath.akinotcho@yahoo.fr</a>> >  <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:faridath.akinotcho@yahoo.fr" target="_blank" href="mailto:faridath.akinotcho@yahoo.fr">faridath.akinotcho@yahoo.fr</a> <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:faridath.akinotcho@yahoo.fr" target="_blank" href="mailto:faridath.akinotcho@yahoo.fr">faridath.akinotcho@yahoo.fr</a>>  <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:faridath.akinotcho@yahoo.fr" target="_blank" href="mailto:faridath.akinotcho@yahoo.fr">faridath.akinotcho@yahoo.fr</a> <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:faridath.akinotcho@yahoo.fr" target="_blank" href="mailto:faridath.akinotcho@yahoo.fr">faridath.akinotcho@yahoo.fr</a>> > > > wrote:<br clear="none"><br clear="none">    Hi,<br clear="none"><br clear="none">    I am using Soot (org.soot.oss 4.2.1) to perform an interprocedural analysis on Android methods (in the wjtp phase). To this end, I am extracting reachable methods from Android lifecycles using Scene.v().getCallgraph().edgesOutOf(method). However, I noticed that some virtual and special edges seem to always be missing from the returned set. For e.g, given:<br clear="none"><br clear="none">    class B extends A{<br clear="none">        void onCreate(...){<br clear="none">            setContentView(C0027R.layout.merge);<br clear="none">            super.onCreate(bundle);<br clear="none">            setNextActivity(C.class);<br clear="none">        }<br clear="none">    }<br clear="none">    <br clear="none">    class A{<br clear="none">        public void setNextActivity(){<br clear="none">            ...<br clear="none">        }<br clear="none">    }<br clear="none"><br clear="none">    When computing the reachable methods for B.onCreate(), neither setContentView, super.onCreate or setNextActivity are included as targets for the outgoing edges (only clinit is returned). However, when using CHA instead of Spark, these are part of the returned set (along other overapproximations), so I am assuming there might be some issue when performing the points-to analysis. Here are the options I am using:<br clear="none"><br clear="none">    Options.v().set_src_prec(Options.src_prec_apk);<br clear="none">    Options.v().set_output_format(Options.output_format_none);<br clear="none"><br clear="none">    Options.v().set_no_bodies_for_excluded(true);<br clear="none">    Options.v().set_allow_phantom_refs(true);<br clear="none">    Options.v().set_android_jars(androidJar);<br clear="none"><br clear="none">    Options.v().set_process_dir(Collections.singletonList(apkPath));<br clear="none">    Options.v().set_soot_classpath(androidJar);<br clear="none">    Options.v().set_process_multiple_dex(true);<br clear="none"><br clear="none">    Options.v().set_whole_program(true);<br clear="none">    Options.v().setPhaseOption("cg", "all-reachable:true");<br clear="none">    Options.v().setPhaseOption("cg.spark", "on");<br clear="none">    Options.v().setPhaseOption("cg.spark", "verbose:true");<br clear="none">    Options.v().setPhaseOption("cg.spark", "string-constants:true");<br clear="none"><br clear="none">    Options.v().setPhaseOption("jb.ulp", "off");<br clear="none">    <br clear="none">    Main.v().autoSetOptions();<br clear="none">    Scene.v().loadNecessaryClasses();<br clear="none"><br clear="none"><br clear="none"><br clear="none">    I would greatly appreciate any pointers about what I might be missing (maybe an option that wasn't set properly) or what the problem could be.<br clear="none"><br clear="none">    Best regards,<br clear="none">    Faridah Akinotcho<br clear="none"><br clear="none">    _______________________________________________<br clear="none">    Soot-list mailing list<br clear="none">    <a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:Soot-list@CS.McGill.CA" target="_blank" href="mailto:Soot-list@CS.McGill.CA">Soot-list@CS.McGill.CA</a> <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:Soot-list@CS.McGill.CA" target="_blank" href="mailto:Soot-list@CS.McGill.CA">Soot-list@CS.McGill.CA</a>>  <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:Soot-list@CS.McGill.CA" target="_blank" href="mailto:Soot-list@CS.McGill.CA">Soot-list@CS.McGill.CA</a> <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:Soot-list@CS.McGill.CA" target="_blank" href="mailto:Soot-list@CS.McGill.CA">Soot-list@CS.McGill.CA</a>> >  <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:Soot-list@CS.McGill.CA" target="_blank" href="mailto:Soot-list@CS.McGill.CA">Soot-list@CS.McGill.CA</a> <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:Soot-list@CS.McGill.CA" target="_blank" href="mailto:Soot-list@CS.McGill.CA">Soot-list@CS.McGill.CA</a>>  <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:Soot-list@CS.McGill.CA" target="_blank" href="mailto:Soot-list@CS.McGill.CA">Soot-list@CS.McGill.CA</a> <mailto:<a rel="nofollow noopener noreferrer" shape="rect" ymailto="mailto:Soot-list@CS.McGill.CA" target="_blank" href="mailto:Soot-list@CS.McGill.CA">Soot-list@CS.McGill.CA</a>> > > <div id="yiv4772106652yqtfd16695" class="yiv4772106652yqt5020423576"><br clear="none"><br clear="none"><br clear="none">    <a rel="nofollow noopener noreferrer" shape="rect" target="_blank" href="https://mailman.CS.McGill.CA/mailman/listinfo/soot-list">https://mailman.CS.McGill.CA/mailman/listinfo/soot-list</a><br clear="none">    <br clear="none"><br clear="none"><br clear="none"><br clear="none"><br clear="none"></div></div></div>
            </div>
        </div></div></body></html>