I've checked with the jadx that the apk file to be analyzed only has one application in the manifest.xml
I've checked with the jadx that the apk file to be analyzed only has one activity that has this attribute: <category android:name="android.intent.category.LAUNCHER"/>
The call graph is constructed successfully.
I called app.runInfoflow() after call graph constructed
// Run the data flow analysis
InfoflowResults infoflow_results = app.runInfoflow();
Here is how I set the soot:
// Start to init flowdroid
File file = new File(apk_path);
String apkPath = file.getAbsolutePath();
final InfoflowAndroidConfiguration config = new InfoflowAndroidConfiguration();
config.getAnalysisFileConfig().setTargetAPKFile(apkPath);
config.getAnalysisFileConfig().setAndroidPlatformDir(platform_path);
// To provide single view to analysis
config.setMergeDexFiles(true);
// Write analysis result to files for further analysis
config.setWriteOutputFiles(true);
config.getAnalysisFileConfig().setSourceSinkFile("res/SourcesAndSinks.txt");
Options.v().set_whole_program(true);
Options.v().set_process_multiple_dex(true);
Options.v().set_allow_phantom_refs(true);
// Less debug info
// Options.v().set_verbose(false);
Scene.v().loadNecessaryClasses();
SetupApplication app = new SetupApplication(config);
app.constructCallgraph();
[main] INFO soot.jimple.infoflow.android.SetupApplication - Initializing Soot...
[main] INFO soot.jimple.infoflow.android.SetupApplication - Loading dex files...
[main] INFO soot.jimple.infoflow.android.SetupApplication - ARSC file parsing took 0.0270868 seconds
[main] INFO soot.jimple.infoflow.memory.MemoryWarningSystem - Registered a memory warning system for 7,236 MiB
[main] INFO soot.jimple.infoflow.android.entryPointCreators.AndroidEntryPointCreator - Creating Android entry point for 74 components...
[main] WARN soot.jimple.infoflow.android.entryPointCreators.AndroidEntryPointCreator - Cannot generate constructor for phantom class androidx.startup.InitializationProvider
[main] ERROR soot.jimple.infoflow.android.SetupApplication - Could not calculate callback methods
java.lang.RuntimeException: Multiple application classes in app
at soot.jimple.infoflow.android.entryPointCreators.AndroidEntryPointCreator.initializeApplicationClass(AndroidEntryPointCreator.java:344)
at soot.jimple.infoflow.android.entryPointCreators.AndroidEntryPointCreator.createDummyMainInternal(AndroidEntryPointCreator.java:148)
at soot.jimple.infoflow.entryPointCreators.BaseEntryPointCreator.createDummyMain(BaseEntryPointCreator.java:154)
at soot.jimple.infoflow.android.entryPointCreators.AbstractAndroidEntryPointCreator.createDummyMain(AbstractAndroidEntryPointCreator.java:32)
at soot.jimple.infoflow.android.SetupApplication.createMainMethod(SetupApplication.java:1127)
at soot.jimple.infoflow.android.SetupApplication.calculateCallbackMethods(SetupApplication.java:719)
at soot.jimple.infoflow.android.SetupApplication.calculateCallbacks(SetupApplication.java:528)
at soot.jimple.infoflow.android.SetupApplication.calculateCallbacks(SetupApplication.java:475)
at soot.jimple.infoflow.android.SetupApplication.processEntryPoint(SetupApplication.java:1566)
at soot.jimple.infoflow.android.SetupApplication.runInfoflow(SetupApplication.java:1532)
at soot.jimple.infoflow.android.SetupApplication.runInfoflow(SetupApplication.java:1479)
at org.example.Main.main(Main.java:156)
[main] INFO soot.jimple.infoflow.memory.MemoryWarningSystem - Shutting down the memory warning system...
Exception in thread "main" java.lang.RuntimeException: Multiple application classes in app
at soot.jimple.infoflow.android.entryPointCreators.AndroidEntryPointCreator.initializeApplicationClass(AndroidEntryPointCreator.java:344)
at soot.jimple.infoflow.android.entryPointCreators.AndroidEntryPointCreator.createDummyMainInternal(AndroidEntryPointCreator.java:148)
at soot.jimple.infoflow.entryPointCreators.BaseEntryPointCreator.createDummyMain(BaseEntryPointCreator.java:154)
at soot.jimple.infoflow.android.entryPointCreators.AbstractAndroidEntryPointCreator.createDummyMain(AbstractAndroidEntryPointCreator.java:32)
at soot.jimple.infoflow.android.SetupApplication.createMainMethod(SetupApplication.java:1127)
at soot.jimple.infoflow.android.SetupApplication.calculateCallbackMethods(SetupApplication.java:719)
at soot.jimple.infoflow.android.SetupApplication.calculateCallbacks(SetupApplication.java:528)
at soot.jimple.infoflow.android.SetupApplication.calculateCallbacks(SetupApplication.java:475)
at soot.jimple.infoflow.android.SetupApplication.processEntryPoint(SetupApplication.java:1566)
at soot.jimple.infoflow.android.SetupApplication.runInfoflow(SetupApplication.java:1532)
at soot.jimple.infoflow.android.SetupApplication.runInfoflow(SetupApplication.java:1479)
at org.example.Main.main(Main.java:156)
> Task :Main.main() FAILED
<category android:name="android.intent.category.LAUNCHER"/>
app.runInfoflow()
after call graph constructedI'm using this version of FlowDroid:
Here is my code that triggered the error:
Here is how I set the soot:
Here's the SourceAndSink.txt
More context log: