| # Context Hub Runtime Environment (CHRE) | 
 |  | 
 | This project contains the AOSP reference implementation of the Context Hub | 
 | Runtime Environment (CHRE), which is Android’s platform for developing always-on | 
 | applications, called *nanoapps*. CHRE runs in a vendor-specific processor that | 
 | is independent of the main applications processor that runs Android. This | 
 | enables CHRE and its nanoapps to be more power-efficient for use cases that | 
 | require frequent background processing of contextual data, like sensor inputs. | 
 | Nanoapps are written to the CHRE API, which is standardized across all | 
 | platforms, enabling them to be code-compatible across different devices. | 
 |  | 
 | The CHRE reference implementation (“CHRE framework”) is designed to be portable | 
 | across hardware and software platforms. While Android does not require a | 
 | particular implementation (only compliance to the contracts given in the CHRE | 
 | API) using the reference implementation helps to reduce the work needed to | 
 | support CHRE, while also ensuring more consistent behavior for scenarios that | 
 | can be difficult to enforce via testing. | 
 |  | 
 | ## Navigating the docs | 
 |  | 
 | Use the navigation bar at the top and/or the links below to move through the | 
 | documentation. Raw files can also be found in the `/doc` folder. | 
 |  | 
 | * Documentation related to the CHRE framework: | 
 |   * [Framework Overview](/doc/framework_overview.md) | 
 |   * [Porting Guide](/doc/porting_guide.md) | 
 |   * [Build System](/doc/framework_build.md) | 
 |   * [Debugging](/doc/framework_debugging.md) | 
 |   * [Testing](/doc/framework_testing.md) | 
 |   * [Vendor Extensions](/doc/vendor_extensions.md) | 
 | * Documentation related to nanoapps: | 
 |   * [Nanoapp Overview](/doc/nanoapp_overview.md) | 
 |   * [Developer Guide](/doc/nanoapp_developer_guide.md) | 
 |   * [Interacting with Nanoapps](/doc/nanoapp_clients.md) | 
 | * General documentation: | 
 |   * [Compatibility Design](/doc/compatibility.md) | 
 |   * [Contributing](/doc/contributing.md) | 
 |  | 
 | The CHRE API and PAL API are also extensively documented using Doxygen syntax. | 
 | Run `doxygen` in the same folder as `Doxyfile` to generate a browseable HTML | 
 | version of the documentation. | 
 |  | 
 | ## Navigating the code | 
 |  | 
 | This repository (system/chre) contains an assortment of code, structured as | 
 | follows: | 
 |  | 
 | - ``apps/``: Public nanoapp source code, including sample nanoapps intended to | 
 |   showcase how to use the CHRE APIs, and test nanoapps used to validate API | 
 |   functionality | 
 | - ``build/``: Files related to CHRE’s Makefile-based build system, which | 
 |   supports building the CHRE framework and nanoapps using a configurable | 
 |   toolchain | 
 | - ``chpp/``: Context Hub Peripheral Protocol (CHPP) source code - see the nested | 
 |   README and associated documentation for details | 
 | - ``chre_api/``: Contains the official definition of the CHRE API (current and | 
 |   past versions), which all CHRE implementations must adhere to | 
 | - ``core/``: Common CHRE framework code, which is applicable to every platform | 
 |   (contrast to ``platform/``) | 
 | - ``doc/``: Contains documentation for the CHRE framework and associated topics | 
 | - ``external/``: Code developed primarily outside of AOSP which (can be) | 
 |   leveraged by CHRE, and is potentially customized for CHRE (e.g. flatbuffers) | 
 | - ``host/``: Reference code which supports the CHRE implementation, but runs on | 
 |   the applications processor (“host”), for example the Context Hub HAL | 
 | - ``java/``: Java test code used in conjunction with test nanoapps | 
 | - ``pal/``: The binary-stable Platform Abstraction Layer (PAL) C API definitions | 
 |   and tests (these PALs may optionally be used by the platform implementation) | 
 | - ``platform/``: Code related to the implementation of CHRE on a particular | 
 |   platform/device (compare to ``core/``), divided into sub-folders as follows: | 
 |    - ``platform/include``: The interface between common code in ``core/`` and | 
 |      platform-specific code implemented elsewhere in ``platform/`` | 
 |    - ``platform/shared``: Code that may apply to multiple platforms, but is not | 
 |      necessarily applicable to _all_ platforms (as in ``core/``). For example, | 
 |      multiple platforms may choose to use the binary-stable PAL interface - this | 
 |      folder contains source files translating from the C++ platform abstractions | 
 |      to the C PAL APIs. | 
 |    - ``platform/<platform_name>``: Code specific to the platform indicated by | 
 |      ``platform_name`` | 
 | - ``util/``: Utility code that is not platform-specific, but not part of the | 
 |   core framework implementation. Includes code that is usable by nanoapps. | 
 | - ``variant/``: Code/configuration that is specific to a particular device (more | 
 |   detail on variants can be found below). For example, multiple generations of a | 
 |   given chip may use the same platform code, but the code may be configured on a | 
 |   per-device basis in the build via ``variant.mk``. | 
 |  | 
 | Code related to CHRE also exists in other parts of the Android tree, including: | 
 |  | 
 | - ``hardware/interfaces/contexthub/``: The Context Hub HAL definition | 
 | - ``frameworks/base/core/java/android/hardware/location/ContextHub*.java``: The | 
 |   APIs used by privileged apps to interact with CHRE and nanoapps | 
 | - ``frameworks/base/services/core/java/com/android/server/location/ContextHub*.java``: | 
 |   The Context Hub service implementation in system server | 
 |  | 
 | # Have Questions? | 
 |  | 
 | If you’re unable to find the answers you’re looking for in CHRE documentation | 
 | or are looking for specific guidance for your platform, device, or nanoapp, | 
 | please reach out to the CHRE team via your TAM or through the [Google Issue | 
 | Tracker](https://developers.google.com/issue-tracker). |