Saturday, January 7, 2012

adepends.py, utility for analysing android module dependency

There are thousands of modules within android system. They form a very complicated dependency graph. When we want to learn about a particular module in android system, it's not easy to find out where modules that are dependent on by the module we mainly focus on are located. To make this task easier, I wrote adepends.py, which can be used to analysis dependency relationship between modules. It's capable of:
  1. List modules defined within a directory
  2. Generate a graphviz dot based diagram file to show dependency relationship
To show which modules are defined in a directory, we can use this command: "adepends.py -l DIRECTORY_NAME". For example, if we run "adepends.py -l external/protobuf/" command, we get below output:
libprotobuf-java-2.3.0-micro
libprotobuf-cpp-2.3.0-lite
host-libprotobuf-java-2.3.0-micro
libprotobuf-cpp-2.3.0-full
host-libprotobuf-java-2.3.0-lite
aprotoc
libprotobuf-java-2.3.0-lite

To generate a dependency diagram for a particular module, we can use this command: "adepends.py -o output.dot -m module_name". For example, if we're interested in the dependency diagram for charger module,  we can use this command: "adepends.py -o output.dot -m charger". After the command finished, we have output.dot in current directory. Then we run "dot -Tpng -ooutput.png output.dot" to generate a png file for the diagram. And the diagram is shown below:

Each ellipse represents a module, the top line shows the module name, and the bottom line shows the directory that the module is defined. The arrowed edge represents the dependency relationship between two modules.

3 comments:

pfalcon said...

That's very cool utility, thanks! I actually doing a bit of hacking on it, will submit if anything useful comes out.

pfalcon said...

Ok, I git-svn'ed your repo as https://github.com/pfalcon/android-depends , changes I did so far is allow multiple --module's, and add option to ignore specific modules and/or their dependencies. Commit log (master vs upstream branch) should show my changes with info in commit messages.

Ah, and if you considered migrating your repo to git (and splitting so community could easier reuse them), then +1 ;-)

rx wen said...

Thanks.

I'm glad you find this idea helpful and very pleased to see your improvements made on it.