[TOC]
Chromium's way to pull prebuilt .jar / .aar files from Maven.
There are 3 roots for libraries:
-
//third_party/androidx- Contains all androidx libraries listed in
//third_party/androidx/build.gradle.template - Pulls from daily snapshots hosted on https://androidx.dev
- Libraries are combined into a single CIPD instance by android-androidx-packager
- Auto-rolled by androidx-chromium
- Contains all androidx libraries listed in
-
//third_party/android_deps/autorolled- Contains deps reachable from
//third_party/android_deps/autorolled/build.gradle.template - All libraries are combined into a single CIPD instance by android-androidx-packager (out of convenience).
- Auto-rolled by android-deps-chromium
- Contains deps reachable from
-
//third_party/android_deps- This was the original root, and thus contains scripts used by the other two
- Contains deps reachable from
//third_party/android_deps/build.gradle - Each library is packaged into its own CIPD package
- Not auto-rolled
This system supports deps between roots, but since they roll separately,
such deps can require manually rolling multiple roots atomically, and sometimes
explicitly adding dependent libraries to build.gradle{.template} files.
See first: //docs/adding_to_third_party.md.
For AndroidX libries, see //third_party/androidx/README.md
- Add the gradle entry for the desired target to
//third_party/android_deps/autorolled/build.gradle.template - Do a trial run (downloads files locally):
third_party/android_deps/autorolled/fetch_all_autorolled.py --local - Assuming it works fine, upload & submit your change to
build.gradle.template - Wait for the android-androidx-packager and android-deps-chromium to run (or trigger the packager manually to expedite)
- Add the gradle entry for the desired target to
//third_party/android_deps/build.gradle - Do a trial run (downloads files locally):
third_party/android_deps/fetch_all.py --local - Assuming it works fine, upload & submit you changes to
build.gradleand everything inlibs/.- Revert your local changes to
DEPSandBUILD.gn
- Revert your local changes to
- Wait for the 3pp-linux-amd64-packager to run (or trigger it manually to expedite)
- Run
fetch_all.py --localagain, and this time commit all the changes.
-
Update
build.gradlewith the new dependency or the new versions. -
Run
fetch_all.py --localto update your current workspace with the changes. This will update, among other things, your top-levelDEPSfile. If this is a new library, you can skip directly to step 5 since the next step is not going to work for you. -
Run
gclient syncto make sure that cipd has access to the versions you are trying to roll. This might fail with a cipd error failing to resolve a tag. -
If the previous step works, upload your cl and you are done, if not continue with the steps.
-
Add a
overrideLatestproperty override to your package inChromiumDepGraph.groovyin thePROPERTY_OVERRIDESmap, set it totrue. -
Run
fetch_all.py --localagain. -
git addall the 3pp related changes and create a CL for review. Keep the3pp/,.gradle,OWNERS,.groovychanges in the CL and revert the other files. The other files should be committed in a follow up CL. Example git commands:git add third_party/android_deps{*.gradle,*.groovy,*3pp*,*OWNERS,*README.md}git commit -m commit_messagegit restore third_party/android_deps DEPSgit clean -id
-
Land the first CL in the previous step and wait for the corresponding 3pp packager to create the new CIPD packages. The 3pp packager runs every 6 hours. You can see the latest runs here. See
//docs/cipd_and_3pp.mdfor how it works. Anyone on the Clank Commons team and any trooper can trigger the bot on demand for you. -
If your follow up CL takes more than a day please revert the original CL. Once the bot uploads to cipd there is no need to keep the modified 3pp files. The bot runs 4 times a day. When you are ready to land the follow up CL, you can land everything together since the cipd packages have already been uploaded.
-
Remove your
overrideLatestproperty override entry inChromiumDepGraph.groovyso that the 3pp bot goes back to downloading and storing the latest versions of your package so that it is available when you next try to roll. -
Run
fetch_all.py --localagain. Create a CL with the changes and land it.
E.g. missing license, HTML in license, missing URL or description:
- Add an entry to
PROPERTY_OVERRIDES
- For AndroidX, add an entry to
//third_party/androidx/customizations.gni - For others, add an entry to
addSpecialTreatment()
The script invokes a Gradle plugin to leverage its dependency resolution features. An alternative way to implement it is to mix gradle to purely fetch dependencies and their pom.xml files, and use Python to process and generate the files. This approach was not as successful, as some information about the dependencies does not seem to be available purely from the POM file, which resulted in expecting dependencies that gradle considered unnecessary. This is especially true nowadays that pom.xml files for many dependencies are no longer maintained by the package authors.
The groovy code in //third_party/android_deps/buildSrc/src/main/groovy is best
edited using Android Studio (ASwB works too). This code can be auto-formatted by
using Android Studio's code formatting actions.
The easiest way to find these actions is using Ctrl+Shift+A and then typing
the name of the action to be performed (e.g. reformat). Another easy way is
setting up Settings>Tools>Actions on Save>Reformat code and
..>Optimize imports.
The current code is formatted using a specific code style, you can import
//third_party/android_deps/Chromium_Groovy.xml via
Settings>Editor>Code Style>[settings gear]>Import Scheme....