# CodeAnalyzer **Repository Path**: thoseyears/code-analyzer ## Basic Information - **Project Name**: CodeAnalyzer - **Description**: 分析java/android项目的源代码, 生成调用与依赖关系至json文件内, 反映了哪些类被继承被实现, 哪些类方法被调用, 哪些类方法被覆写. - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 0 - **Created**: 2021-05-18 - **Last Updated**: 2021-09-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CodeAnalyzer #### 介绍 一个Android Studio的插件,分析Android项目的源代码中所有的函数调用以及类与函数的定义,并生成调用与依赖关系至json文件内,反映了哪些类被继承、被实现,哪些类方法被调用, 哪些类方法被覆写,以及来源是什么。 > 需要配合 https://gitee.com/thoseyears/result-analyzer 查看移植ohos的风险分析结果及建议 > 注意: 不支持分析Kotlin代码, 后续也不会支持 #### 实现 使用JavaParser将java源文件转换为AST树。遍历树中感兴趣的节点,并使用JavaSymbolSolver尝试根据上下文解析节点的references ##### 流程 * 获取项目内所有的模块信息 * 将所有模块的源代码目录, 添加至JavaSymbolSolver中 * 获取所有模块的外部jar依赖, 并添加到JavaSymbolSolver中 * 遍历所有模块的java源文件, 并解析生成AST树 * 将树中的所有三目运算表达式, 替换为表达式的右侧的类型, 避免StackOverflow异常 * 将所有的字符串拼接语句, 替换为单个字符串, 避免StackOverflow异常 * 遍历所有的方法调用语句, 并分析该方法所属的类 * 遍历所有的带Override注解的方法声明, 并遍历声明方法所在类的所有祖先(包括extends与implements), 在祖先内查找是否有该方法的声明, 确定覆写的是哪个祖先的方法 * 记录类的直接祖先 * 将记录生成json文件 #### 使用方法 * [发行版](https://gitee.com/thoseyears/code-analyzer/releases) 内下载jar包 * 在Android Studio内通过本地的方式安装插件, Android Studio请升级至最新版, 以下版本不兼容不能安装 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0520/181125_17725517_1090307.png "1.PNG") * 编译Android项目, 确保没有编译错误。 * 运行插件, 选择需要分析的模块, 如果是kotlin模块或者包含kotlin代码, 不要勾选 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0520/181353_99a6f13d_1090307.png "2.PNG") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0520/181306_290fdf43_1090307.png "2.2.PNG") * 等待分析结果 * 分析完成后会在项目根目录下生成output.json文件 * 将json文件上传至result-analyzer内查看移植ohos的风险分析结果及建议 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0520/181754_7474e592_1090307.png "6.PNG")