message: Support cases where there is no jni.json and only a registered_natives.json
  Summary:
  At the moment there is no jni.json (though it'll be coming back) so
  don't fail if it doesn't exist.
diff: @@ -53,6 +53,13 @@ void get_compilation_units_impl(
  return;
  }
  + if (fs::is_regular_file(path / "registered_natives.json")) {
  + // We found a compilation unit.
  + compilation_units.emplace(location_prefix,
  + CompilationUnit{location_prefix, path});
  + return;
  + }
  +
  std::string separator = location_prefix.empty() ? "" : "/";
  for (const auto& item : fs::directory_iterator(path)) {
  @@ -74,8 +81,7 @@ void CompilationUnit::populate_functions(
  auto jni_json_path = (m_infodir_path / "jni.json").string();
  auto jni_json_opt = read_json_from_file(jni_json_path);
  - always_assert_log(jni_json_opt, "Cannot find file %s", jni_json_path.c_str());
  -
  + if (jni_json_opt) {
  for (Json::Value::ArrayIndex i = 0; i < jni_json_opt->size(); i++) {
  std::string function_name = (*jni_json_opt)[i].asString();
  auto decl_it = expected_names_to_decl.find(function_name);
  @@ -84,6 +90,7 @@ void CompilationUnit::populate_functions(
  m_name_to_functions.emplace(function_name,
  Function{this, function_name, decl});
  }
  + }
  // Alternatively, native methods can be registered with RegisterNatives calls.
  // Use specific analyses to extract information.
  