Revision control
Copy as Markdown
# Using locally published components in Fenix
It's often important to test work-in-progress changes to Application Services components against a real-world
consumer project. The most reliable method of performing such testing is to publish your
components to a local Maven repository, and adjust the consuming project to install them
from there.
With support from the upstream project, it's possible to do this in a single step using
our auto-publishing workflow.
# Using the auto-publishing workflow
mozilla-central has support for automatically publishing and including a local development version of application-services in the build.
This is supported for most of the Android targets available in mozilla-central including Fenix - this
doc will focus on Fenix, but the same general process is used for all. The workflow is:
## Pre-requisites:
1. Ensure you have a regular [build of application-services working](../building.md).
1. Disable the gradle cache in mozilla-central - edit `./gradle.properties`, comment out `org.gradle.configuration-cache=true`
1. Ensure you have a regular build of Fenix from mozilla-central testable in Android Studio or an emulator.
## Setup 2 x `local.properties`
Edit (or create) the file `local.properties` in each of the repos:
### app-services
In the root of the app-services repo:
Please be sure you have read [our guide to building Fenix](../building.md#building-for-fenix) and successfully built
using the instructions there. In particular, this may lead you to adding `sdk.dir` and `ndk.dir` properties, and/or
set environment variables `ANDROID_SDK_ROOT` and `ANDROID_HOME`.
In addition to those instructions, you will need:
#### rust.targets
Both the auto-publishing and manual workflows can be sped up significantly by
using the `rust.targets` property which limits which architectures the Rust
code gets build against. Adding a line like
`rust.targets=x86,linux-x86-64`. The trick is knowing which targets to put in
that comma separated list:
- Use `x86` for running the app on most emulators on Intel hardware (in rare cases, when you have a 64-bit emulator, you'll want `x86_64`).
- Use `arm64` for emulators running on Apple Silicon Macs.
- If you're running the `android-components` or `fenix` unit tests, then you'll need the architecture of your machine:
- OSX running Intel chips: `darwin-x86-64`
- OSX running M1 chips: `darwin-aarch64`
- Linux: `linux-x86-64`
eg, on a Mac your `local.properties` file will have a single line, `rust.targets=darwin-aarch64,arm64`
### mozilla-central
`local.properties` can be in the root of the mozilla-central checkout,
or in the project specific directory (eg, `mobile/android/fenix`) and you tell it where to
find your local checkout of application-services by adding a line like:
`autoPublish.application-services.dir=path/to/your/checkout/of/application-services`
Note that the path can be absolute or relative from `local.properties`. For example, if `application-services`
and `mozilla-central` are at the same level, and you are using a `local.properties` in the root of mozilla-central,
the relative path would be `../application-services`
## Build and test your Fenix again.
After configuring as described above, build and test your Fenix again.
If all goes well, this should automatically build your checkout of `application-services`, publish it
to a local maven repository, and configure the consuming project to install it from there instead of
from our published releases.
# Other notes
### Using Windows/WSL
Good luck! This implies you are also building mozilla-central in a Windows/WSL environment;
please contribute docs if you got this working.
However, there's an excellent chance that you will need to execute
`./automation/publish_to_maven_local_if_modified.py` from your local `application-services` root.
### Caveats
1. This assumes you are able to build both Fenix and application-services directly before following any of these instructions.
2. Make sure you're fully up to date in all repos, unless you know you need to
not be.
4. [Contact us](../README.md#contact-us) if you get stuck.