Lint Aosp App With SonarQube

Jun 6, 2017
fix SonarQube lint error on AOSP App


Third-party apps can directly use Lint to display results in Android Studio. When compiling the source code, running lint packages/apps/Calendar/ in the project root directory after "make" can also lint. However, when actually using lint vendor/letv/apps/Camera/, it prompts No bytecode found: Has the project been built? (Camera), and there are also false positives for resource usage.


Analyzing the lint source code reveals that
Lint will try to find ModuleName_intermediates/classes.jar in the out directory. If it cannot be found, it will report "No bytecode found".
For example, /letv/workspace/DEMETER_FINAL/out/target/common/obj/APPS/StvCamera_intermediates
However, there are two reasons for not finding it:
  1. Starting from Android M, AOSP uses Jack for compilation (JaCoCo starting from Android N?), and classes.jar is not generated during Jack compilation. Instead, classes.jack / classes.dex are generated.
  1. In the getIntermediateDirs() method, moduleName = mDir.getName() instead of LOCAL_PACKAGE_NAME specified in vendor/letv/app/**/

Disabling Jack / dex2jar

For problem 1, either disable Jack to prevent the generation of classed.jar during make, or convert classes.dex to classes.jar.
Disabling Jack for the entire project will cause make to fail. Disabling at the module level has been tried, but it does not work.
Testing dex2jar is feasible.

Modifying lint-api.jar

For problem 2, modifying lint-api.jar is simpler than compiling the entire lint tool. The method is similar to modifying CrossWalk.jar.
The modification process is described in
In addition, the lint used in the source code environment is an older version from DEMETER_FINAL/prebuilts/devtools/tools/lint. Using the latest lint-api for modification directly, but the latest lint requires jre8 to execute.


Take DEMETER_FINAL/vendor/letv/apps/Camera/ as an example.
Modify line 92 of bin/lint to set JAVACMD="/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java" to the appropriate jre8 path.
Make the entire AOSP project.
Download dex2jar from and extract it to a suitable path.

Afterwards, run SonarScanner specifying


Using SonarQube with Jenkins Continuous Integration and GitHub to Improve Code Review -

© likaci 2013 - 2024