soot icon indicating copy to clipboard operation
soot copied to clipboard

Default classpath for android not considering src_prec_apk_class_jimple

Open am009 opened this issue 3 years ago • 0 comments

In src\main\java\soot\Scene.java Scene.defaultClassPath, the if statement doesn't consider the case for Options.src_prec_apk_class_jimple. So when I set it to Options.src_prec_apk_class_jimple, it seems that I always get a phantom class for android framework related classes. eg: android.content.Context.

Related source code in src\main\java\soot\Scene.java:

  public String defaultClassPath() {
    if (Options.v().src_prec() != Options.src_prec_apk) { // here
      // If we have an apk file on the process dir and do not have a src-prec
      // option that loads APK files, we give a warning
      for (String entry : Options.v().process_dir()) {
        if (entry.toLowerCase().endsWith(".apk")) {
          System.err.println("APK file on process dir, but chosen src-prec does not support loading APKs");
          break;
        }
      }
      String path = defaultJavaClassPath();
      if (path == null) {
        throw new RuntimeException("Error: cannot find rt.jar.");
      }
      return path;
    } else {
      return defaultAndroidClassPath();
    }
  }

am009 avatar Apr 26 '22 09:04 am009