Met this error: Multiple application classes in app
Gao-Chuan opened this issue · comments
- 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
I'm using this version of FlowDroid:
implementation("de.fraunhofer.sit.sse.flowdroid:soot-infoflow:2.12.0")
implementation("de.fraunhofer.sit.sse.flowdroid:soot-infoflow-summaries:2.12.0")
implementation("de.fraunhofer.sit.sse.flowdroid:soot-infoflow-android:2.12.0")
implementation("de.fraunhofer.sit.sse.flowdroid:soot-infoflow-integration:2.12.0")
implementation("de.fraunhofer.sit.sse.flowdroid:soot-infoflow-cmd:2.12.0")
Here is my code that triggered the error:
// 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();
Here's the SourceAndSink.txt
#### SOURCES
<class: void method(boolean, android.content.Context)>:0 -> _SOURCE_
#### SINKS
# Shared Preferences
<android.content.SharedPreferences$Editor: android.content.SharedPreferences$Editor putInt(java.lang.String,int)> -> _SINK_
<android.content.SharedPreferences$Editor: android.content.SharedPreferences$Editor putLong(java.lang.String,long)> -> _SINK_
<android.content.SharedPreferences$Editor: android.content.SharedPreferences$Editor putString(java.lang.String,java.lang.String)> -> _SINK_
<android.content.SharedPreferences$Editor: android.content.SharedPreferences$Editor putBoolean(java.lang.String,boolean)> -> _SINK_
# File I/O
<java.io.FileOutputStream: void write(byte[])> -> _SINK_
<java.io.Writer: void write(java.lang.String)> -> _SINK_
# Network operations
<java.net.HttpURLConnection: java.io.OutputStream getOutputStream()> -> _SINK_
<okhttp3.OkHttpClient: okhttp3.Call newCall(okhttp3.Request)> -> _SINK_
More context log:
[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
hi. I've encountered the same issue as you. Have you resolved it?