As part of Chrome Modularization, this directory contains various tools for analyzing the dependencies contained within the Chrome Android project.
If you'd like to just view the graph, the simplest way is to use the script:
tools/android/dependency_analysis/start_server.sh
Start by generating a JSON dependency file with a snapshot of the dependencies for your JAR files using the JSON dependency generator command-line tool.
This snapshot file can then be used as input for various other analysis tools listed below.
See the visualization js/README.md for details on how to start a local server to view your local dependency graphs.
The usage information for any of the following tools is also accessible via toolname -h
or toolname --help
.
Runs jdeps (dependency analysis tool) on all JARs a root build target depends on and writes the resulting dependency graph into a JSON file. The default root build target is chrome/android:monochrome_public_bundle.
usage: generate_json_dependency_graph.py [-h] -o OUTPUT [-C BUILD_OUTPUT_DIR] [-p PREFIX] [-t TARGET] [-d CHECKOUT_DIR] [-j JDEPS_PATH] [-g GN_PATH] [--skip-rebuild] [--show-ninja] [-v] Runs jdeps (dependency analysis tool) on all JARs and writes the resulting dependency graph into a JSON file. options: -h, --help show this help message and exit -C BUILD_OUTPUT_DIR, --build_output_dir BUILD_OUTPUT_DIR Build output directory, will attempt to guess if not provided. -p PREFIX, --prefix PREFIX If any package prefixes are passed, these will be used to filter classes so that only classes with a package matching one of the prefixes are kept in the graph. By default no filtering is performed. -t TARGET, --target TARGET If a specific target is specified, only transitive deps of that target are included in the graph. By default all known javac jars are included. -d CHECKOUT_DIR, --checkout-dir CHECKOUT_DIR Path to the chromium checkout directory. By default the checkout containing this script is used. -j JDEPS_PATH, --jdeps-path JDEPS_PATH Path to the jdeps executable. -g GN_PATH, --gn-path GN_PATH Path to the gn executable. --skip-rebuild Skip rebuilding, useful on bots where compile is a separate step right before running this script. --show-ninja Used to show ninja output. -v, --verbose Used to display detailed logging. required arguments: -o OUTPUT, --output OUTPUT Path to the file to write JSON output to. Will be created if it does not yet exist and overwrite existing content if it does.
Given a JSON dependency graph, output the class-level dependencies for a given list of classes.
An example is given at the end of this page. To see the options:
tools/android/dependency_analysis/print_class_dependencies.py -h
Given a JSON dependency graph, output the package-level dependencies for a given package and the class dependencies comprising those dependencies.
An example is given at the end of this page. To see the options:
tools/android/dependency_analysis/print_package_dependencies.py -h
Given a JSON dependency graph, counts package cycles up to a given size.
To see the options:
tools/android/dependency_analysis/count_cycles.py -h
This Linux example assumes Chromium is contained in a directory ~/cr
and that Chromium has been built as per the instructions here, although the only things these assumptions affect are the file paths.
$ tools/android/dependency_analysis/generate_json_dependency_graph.py -C out/Debug -o ~/graph.json >>> Running jdeps and parsing output... >>> Parsed class-level dependency graph, got 3239 nodes and 19272 edges. >>> Created package-level dependency graph, got 500 nodes and 4954 edges. >>> Dumping JSON representation to ~/graph.json. tools/android/dependency_analysis/print_class_dependencies.py -f ~/graph.json -c AppHooks >>> Printing class dependencies for org.chromium.chrome.browser.AppHooks: >>> 35 inbound dependency(ies) for org.chromium.chrome.browser.AppHooks: >>> org.chromium.chrome.browser.AppHooksImpl >>> org.chromium.chrome.browser.ChromeActivity >>> ... tools/android/dependency_analysis/print_package_dependencies.py -f ~/graph.json -p chrome.browser >>> Printing package dependencies for org.chromium.chrome.browser: >>> 121 inbound dependency(ies) for org.chromium.chrome.browser: >>> org.chromium.chrome.browser.about_settings -> org.chromium.chrome.browser >>> 1 class edge(s) comprising the dependency: >>> AboutChromeSettings -> ChromeVersionInfo >>> ...