# HostStubGen

## Overview

HostStubGen is a tool built for ravenwood. It can read an Android framework jar file
(such as `framework-minus-apex.jar` or `framework-all.jar`) and
converts them, so that they can be used on the Ravenwood environment.

This directory contains the HostStubGen source code, tests and some library source files
used at runtime.

- HostStubGen itself is design to be agnostic to Android. It doesn't use any Android APIs
(hidden or not). But it may use Android specific knowledge -- e.g. as of now,
AndroidHeuristicsFilter has hardcoded heuristics to detect AIDL generated classes.

- `test-tiny-framework/` contains basic tests that are agnostic to Android.

- More Android specific build files and code are stored in `frameworks/base/Ravenwood.bp`
  `frameworks/base/ravenwood`.

## Directories and files

- `src/`

  HostStubGen tool source code.

- `annotations-src/` See `Android.bp`.
- `helper-framework-buildtime-src/` See `Android.bp`.
- `helper-framework-runtime-src/` See `Android.bp`.
- `helper-runtime-src/` See `Android.bp`.

- `test-tiny-framework/` See `README.md` in it.

- `scripts`
  - `dump-jar.sh`

    A script to dump the content of `*.class` and `*.jar` files.

  - `run-all-tests.sh`

    Run all tests. Many tests may fail, but at least this should run til the end.
    (It should print `run-all-tests.sh finished` at the end)

## Build and run

### Building `HostStubGen` binary

```
m hoststubgen
```

### Run the tests

- Run all relevant tests and test scripts. All of it is expected to pass, and it'll print
  "Ready to submit" at the end.

  However, because some of the script it executes depend on internal file paths to Soong's
  intermediate directory, some of it might fail when something changes in the build system.

  We need proper build system integration to fix them.
```
$ ./scripts/run-all-tests.sh
```

- See also `README.md` in `test-*` directories.

## TODOs, etc

 - Make sure the parent's visibility is not smaller than the member's.

- @HostSideTestNativeSubstitutionClass should automatically add class-keep to the substitute class.
  (or at least check it.)

 - The `HostStubGenTest-framework-test-host-test-lib` jar somehow contain all ASM classes? Figure out where the dependency is coming from.

- At some point, we can move or delete all Android specific code to `frameworks/base/ravenwood`.
  - `helper-framework-*-src` should be moved to `frameworks/base/ravenwood`
  - `test-framework` should be deleted.
