private bool FindBootClassPathFile(string name, CrcsProject project, string missingClassName)
 {
     foreach (string location in project.LocationsOfDependencies)
     {
         string[] files = Directory.GetFiles(location, missingClassName + ".smali", SearchOption.AllDirectories);
         if (files.Length > 0)
         {
             string folder = files[0].Substring(location.Length).TrimStart(Path.DirectorySeparatorChar).Substring(7).TrimStart(Path.DirectorySeparatorChar);
             folder = folder.Split(Path.DirectorySeparatorChar)[0];
             return project.AddDependency(name, folder);
         }
     }
     return false;
 }
        protected bool FindMissingDependency(string name, CrcsProject project, string baksmaliOutput)
        {
            string[] bootClassPathArray = GetBootClassPath(baksmaliOutput);
            if (bootClassPathArray.Length == 0) return false;
            if (bootClassPathArray[0].Equals("junit", StringComparison.OrdinalIgnoreCase) &&
                project.LocationsOfDependencies.FirstOrDefault(x => File.Exists(Path.Combine(x, "core-junit.jar"))) !=
                null)
            {
                return project.AddDependency(name, "core-junit.jar");
            }

            string missingClassName = bootClassPathArray[bootClassPathArray.Length - 1];
            if (FindBootClassPathFile(name, project, missingClassName)) return true;

            int start = 0;
            int count = bootClassPathArray.Length - 1;
            while (count > 0)
            {
                string bootClassPath = string.Join(".", bootClassPathArray, start, count) + ".jar";
                if (project.LocationsOfDependencies.FirstOrDefault(x => File.Exists(Path.Combine(x, bootClassPath))) !=
                    null)
                {
                    return project.AddDependency(name, bootClassPath);
                }
                start++;
                count--;
            }
            return false;
        }