#import "../lib.typ": jfl-note, etal, APKs
#import "X_var.typ": tool_info
#import "X_lib.typ": ok

== Futur Works <sec:rasta-futur>

A first extension to this work would obviously be to study more tools.
We restricted ourselves to the tools listed by Li #etal, but it would be interesting to compare our result to the finishing rate of recently released tools.
It would be interesting to see if they are better at handling large #APKs, but also to see if older applications are more challenging for them due to discontinued features.

Another avenue would be to define a benchmark to check the ability of tools to handle real-world applications.
Our dataset is too large for a simple benchmark and is sampled to have a variety of application sizes and years of publication.
Hence, the first step would be to sample a dataset for this benchmark.
Current benchmark datasets focus on the accuracy of the tested tools, with difficult-to-analyse applications.
It could be interesting to extract from our results some of the applications that the most tools failed to analyse, and either use them directly or study them to craft simpler applications reproducing the same challenges as those applications.
Such datasets would need to be updated regularly: we saw that there is a trend for newer applications to be harder to analyse, a frozen dataset would ignore this factor.

In addition to the finishing rate, it would be both interesting and useful to have reference values.
@tab:rasta-rec-deps list common Android-related dependencies we encountered when packaging the tools.
We can see that each tools use at least one of those dependencies.
It would be reasonable to consider the best finishing ratio a tool can have to be the finishing ratio of a tool that would perform an "empty analysis" using the same dependencies.
Considering the prevalence of those dependencies, having those theoretical minimums could also guide future tool developers when choosing their dependencies.

#figure({
  //show table: set text(size: 0.80em)
  let ko = []
  table(
    columns: 4,
    inset: (x: 0% + 5pt, y: 0% + 2pt),
    stroke: none,
    align: center+horizon,
    table.hline(),
    table.header(
      table.cell(colspan: 4, inset: 3pt)[],
      [Tool],
      table.vline(end: 3),
      table.vline(start: 4),
      [Soot],
      [Androguard],
      [Apktool],
    ),
    table.cell(colspan: 4, inset: 3pt)[],
    table.hline(),
    table.cell(colspan: 4, inset: 3pt)[],
    ..tool_info
    .map(entry => (
      [#entry.tool_name],
      if entry.use_soot { ok } else { ko },
      if entry.use_androguard { ok } else { ko },
      if entry.use_apktool { ok } else { ko },
    )).flatten(),
    table.cell(colspan: 4, inset: 3pt)[],
    table.hline(),
  )
  },
  placement: none, // small section: floating figure makes this table go in another section
  caption: [Commonly found dependencies],
) <tab:rasta-rec-deps>

