Apk Dependency Graph (ADG)
The repo is not supported anymore
Class dependency visualizer. Only apk
file is needed.
Class coupling is one of the significant code metrics that shows how easy is to change, maintain and test the code. This tool helps to view whole picture of the project.
Table of contents
Usage
Some helpful scripts are prepared for you. All you need to do is to download and unpack the latest release and type the next command in your command line:
For Windows:
run.bat full\path\to\the\apk\app-release.apk full\path\to\the\filterset.json
Where:
run.bat
is a path to script in your local repositoryfull\path\to\the\apk\app-release.apk
is a full path to the apk file you want to analizefull\path\to\the\filterset.json
is a full path to the filterset file
The tool is provided with the default filterset. However, you're highly encouraged to customize it. Read filter instructions for the details.
For Unix:
./run.sh full/path/to/the/apk/app-release.apk full/path/to/the/filterset.json
Wait until the command finishes:
Baksmaling classes.dex...
Analyzing dependencies...
Success! Now open index.html in your browser.
It will decompile your apk and create output/apk-file-name
folder in the same folder where the script is. After this it will analyze the smali code and generate gui/analyzed.js
file which contains all dependencies.
Now open gui/index.html
in your browser and enjoy!
Compile
At least Java 8 is needed to compile and run the jar
file.
Ways to compile build/jar/apk-dependency-graph.jar
:
>> gradle build
(Gradle 5.0 or newer)
>> gradlew build
(Gradle Wrapper)
Classes will be generated to build/classes
folder and jar file will appear onto build/libs
folder.
To get more information please check our wiki page.
Examples
Here is the sample of good architecture with low class coupling:
And this one looks like a spaghetti:
Does your project look like the first or the second picture? :)
Demo
Watch demo video.
Contributors
I want to say thank you to all the people who made even tiny pull request. This project is intended to improve current state of Android architecture all over the world so each detail is important. In the contributors page you can find a list of people who have found some time to improve this tool.
Credits
There is the same tool for iOS: https://github.com/PaulTaykalo/objc-dependency-visualizer
I have used gui/index.html
of that project. Thanks Paul for the great tool.