Source code for anadroid.results_analysis.OldAnaDroidAnalyzer

import os

from anadroid.results_analysis.AbstractAnalyzer import AbstractAnalyzer
#from src.results_analysis.ApkAPIAnalyzer import ApkAPIAnalyzer
#from src.results_analysis.ApkAPIAnalyzer import ApkAPIAnalyzer
#from src.results_analysis.ApkAPIAnalyzer import ApkAPIAnalyzer
from anadroid.results_analysis.ApkAPIAnalyzer import ApkAPIAnalyzer
from anadroid.results_analysis.SCCAnalyzer import SCCAnalyzer
from anadroid.utils.Utils import execute_shell_command, get_resources_dir
from shutil import copy, copyfile

DEFAULT_JAR_PATH = os.path.join(get_resources_dir(), "jars", "AnaDroidAnalyzer.jar")


[docs]class OldAnaDroidAnalyzer(AbstractAnalyzer): """Implements AbstractAnalyzer interface to allow analyze profiled results with Trepn profiler. Calculate statistics about the produced results to analyze, validate and characterize executions. """ def __init__(self, profiler, jarpath=None, remote_url=None): super(OldAnaDroidAnalyzer, self).__init__(profiler) self.bin_cmd = "java -jar " + (DEFAULT_JAR_PATH if jarpath is None else jarpath) self.remote_url = "NONE" if remote_url is None else remote_url self.inner_analyzers = [] #[ApkAPIAnalyzer(profiler)]
[docs] def setup(self, **kwargs): pass
[docs] def show_results(self, app_list): pass
[docs] def inner_analyze(self, app, output_log_file="AnaDroidAnalyzer.out", **kwargs): instr_proj = app.proj test_orient = kwargs.get("instr_type") for analyzer in self.inner_analyzers: if isinstance(analyzer, SCCAnalyzer): analyzer.analyze(instr_proj.proj_dir, test_orient, output_log_file=os.path.join(app.local_res, "scc.json")) elif isinstance(analyzer, ApkAPIAnalyzer): filename = analyzer.analyze(app.apk, app.package_name) target_dir = os.path.join(app.local_res, "all") copyfile(filename, os.path.join(target_dir, os.path.basename(filename)))
[docs] def analyze(self, app, **kwargs): test_framework = kwargs.get("testing_framework") test_orient = kwargs.get("instr_type") output_log_file = kwargs.get("output_log_file") if 'output_log_file' in kwargs else "oldanadroid_output.log" self.inner_analyze(app, **kwargs) cmd = "{bin_prefix} -{test_orient} \"{input_dir}\" -{test_framework} {remote_repo_url} > {output_log_file}".format( bin_prefix=self.bin_cmd, test_orient=test_orient.value, input_dir=app.local_res, test_framework=test_framework.id.value, remote_repo_url=self.remote_url, output_log_file=output_log_file ) # java -jar $GD_ANALYZER $trace "$projLocalDir/" $monkey $GREENSOURCE_URL 2>&1 | tee "$temp_folder/analyzerResult.out" print(cmd) res = execute_shell_command(cmd) res.validate(Exception("Analyzer error"))
#print(res)
[docs] def get_val_for_filter(self, filter_name, add_data=None): return super().get_val_for_filter(filter_name, add_data)
[docs] def analyze_tests(self, app=None, results_dir=None, **kwargs): self.analyze(app, **kwargs)
[docs] def analyze_test(self, app, test_id, **kwargs): pass
[docs] def validate_test(self, app, arg1, **kwargs): if app is None: return True for inn in self.inner_analyzers: if not inn.validate_test(app, arg1): return False return True
[docs] def validate_filters(self): for inn in self.inner_analyzers: if not inn.validate_filters(): return False return True
[docs] def clean(self): pass