├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── README_en.md ├── adi_analyze ├── .gitignore ├── adi_analyzer.py ├── aggregate │ ├── GlobalAggregateInfo.py │ ├── __init__.py │ ├── aggregate_to_json.py │ └── handler │ │ ├── AggregateObject.py │ │ ├── BaseHandler.py │ │ ├── ObjectAllocAndFreeHandler.py │ │ ├── ThreadContendHandler.py │ │ ├── ThreadStartHandler.py │ │ └── __init__.py ├── event │ ├── Event.py │ ├── GCEvent.py │ ├── MonitorContendedEvent.py │ ├── ObjectAllocEvent.py │ ├── ObjectFreeEvent.py │ ├── StackEvent.py │ ├── ThreadStartEvent.py │ └── __init__.py ├── handler │ ├── BaseHandler.py │ ├── GCHandler.py │ ├── MonitorContendedHandler.py │ ├── ObjectAllocHandler.py │ ├── ObjectFreeHandler.py │ ├── ThreadStartHandler.py │ └── __init__.py ├── main │ ├── __init__.py │ └── analyzer.py ├── plot │ ├── BaseMaker.py │ ├── BokehPlotMaker.py │ ├── MongoPlotMaker.py │ ├── __init__.py │ └── maker │ │ ├── ObjectAllocLine.py │ │ ├── ObjectAllocPlot.py │ │ ├── ThreadContendPlot.py │ │ ├── ThreadContendSegment.py │ │ └── __init__.py ├── setup.py └── utils │ ├── ColorUtils.py │ ├── ColorUtils_test.py │ ├── JVMUtils.py │ ├── JVMUtils_test.py │ └── __init__.py ├── adi_lib ├── adi-nop │ ├── .gitignore │ ├── build.gradle │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── adi │ │ ├── ADIConfig.java │ │ ├── ADIManager.java │ │ └── ui │ │ └── ADIFloatManager.kt ├── adi │ ├── .externalNativeBuild │ │ └── cmake │ │ │ ├── debug │ │ │ ├── arm64-v8a │ │ │ │ ├── .ninja_deps │ │ │ │ ├── .ninja_log │ │ │ │ ├── CMakeCache.txt │ │ │ │ ├── CMakeFiles │ │ │ │ │ ├── 3.10.2 │ │ │ │ │ │ ├── CMakeCCompiler.cmake │ │ │ │ │ │ ├── CMakeCXXCompiler.cmake │ │ │ │ │ │ ├── CMakeDetermineCompilerABI_C.bin │ │ │ │ │ │ ├── CMakeDetermineCompilerABI_CXX.bin │ │ │ │ │ │ └── CMakeSystem.cmake │ │ │ │ │ ├── TargetDirectories.txt │ │ │ │ │ ├── cmake.check_cache │ │ │ │ │ ├── feature_tests.bin │ │ │ │ │ ├── feature_tests.c │ │ │ │ │ └── feature_tests.cxx │ │ │ │ ├── android_gradle_build.json │ │ │ │ ├── android_gradle_build_mini.json │ │ │ │ ├── build.ninja │ │ │ │ ├── cmake_build_command.txt │ │ │ │ ├── cmake_build_output.txt │ │ │ │ ├── cmake_install.cmake │ │ │ │ ├── cmake_server_log.txt │ │ │ │ ├── compile_commands.json │ │ │ │ └── rules.ninja │ │ │ ├── armeabi-v7a │ │ │ │ ├── CMakeCache.txt │ │ │ │ ├── CMakeFiles │ │ │ │ │ ├── 3.10.2 │ │ │ │ │ │ ├── CMakeCCompiler.cmake │ │ │ │ │ │ ├── CMakeCXXCompiler.cmake │ │ │ │ │ │ ├── CMakeDetermineCompilerABI_C.bin │ │ │ │ │ │ ├── CMakeDetermineCompilerABI_CXX.bin │ │ │ │ │ │ └── CMakeSystem.cmake │ │ │ │ │ ├── TargetDirectories.txt │ │ │ │ │ ├── cmake.check_cache │ │ │ │ │ ├── feature_tests.bin │ │ │ │ │ ├── feature_tests.c │ │ │ │ │ └── feature_tests.cxx │ │ │ │ ├── android_gradle_build.json │ │ │ │ ├── android_gradle_build_mini.json │ │ │ │ ├── build.ninja │ │ │ │ ├── cmake_build_command.txt │ │ │ │ ├── cmake_build_output.txt │ │ │ │ ├── cmake_install.cmake │ │ │ │ ├── cmake_server_log.txt │ │ │ │ ├── compile_commands.json │ │ │ │ └── rules.ninja │ │ │ └── x86 │ │ │ │ ├── .ninja_deps │ │ │ │ ├── .ninja_log │ │ │ │ ├── CMakeCache.txt │ │ │ │ ├── CMakeFiles │ │ │ │ ├── 3.10.2 │ │ │ │ │ ├── CMakeCCompiler.cmake │ │ │ │ │ ├── CMakeCXXCompiler.cmake │ │ │ │ │ ├── CMakeDetermineCompilerABI_C.bin │ │ │ │ │ ├── CMakeDetermineCompilerABI_CXX.bin │ │ │ │ │ └── CMakeSystem.cmake │ │ │ │ ├── TargetDirectories.txt │ │ │ │ ├── cmake.check_cache │ │ │ │ ├── feature_tests.bin │ │ │ │ ├── feature_tests.c │ │ │ │ └── feature_tests.cxx │ │ │ │ ├── android_gradle_build.json │ │ │ │ ├── android_gradle_build_mini.json │ │ │ │ ├── build.ninja │ │ │ │ ├── cmake_build_command.txt │ │ │ │ ├── cmake_build_output.txt │ │ │ │ ├── cmake_install.cmake │ │ │ │ ├── cmake_server_log.txt │ │ │ │ ├── compile_commands.json │ │ │ │ └── rules.ninja │ │ │ └── release │ │ │ ├── arm64-v8a │ │ │ ├── .ninja_deps │ │ │ ├── .ninja_log │ │ │ ├── CMakeCache.txt │ │ │ ├── CMakeFiles │ │ │ │ ├── 3.10.2 │ │ │ │ │ ├── CMakeCCompiler.cmake │ │ │ │ │ ├── CMakeCXXCompiler.cmake │ │ │ │ │ ├── CMakeDetermineCompilerABI_C.bin │ │ │ │ │ ├── CMakeDetermineCompilerABI_CXX.bin │ │ │ │ │ └── CMakeSystem.cmake │ │ │ │ ├── TargetDirectories.txt │ │ │ │ ├── cmake.check_cache │ │ │ │ ├── feature_tests.bin │ │ │ │ ├── feature_tests.c │ │ │ │ └── feature_tests.cxx │ │ │ ├── android_gradle_build.json │ │ │ ├── android_gradle_build_mini.json │ │ │ ├── build.ninja │ │ │ ├── cmake_build_command.txt │ │ │ ├── cmake_build_output.txt │ │ │ ├── cmake_install.cmake │ │ │ ├── cmake_server_log.txt │ │ │ ├── compile_commands.json │ │ │ └── rules.ninja │ │ │ ├── armeabi-v7a │ │ │ ├── CMakeCache.txt │ │ │ ├── CMakeFiles │ │ │ │ ├── 3.10.2 │ │ │ │ │ ├── CMakeCCompiler.cmake │ │ │ │ │ ├── CMakeCXXCompiler.cmake │ │ │ │ │ ├── CMakeDetermineCompilerABI_C.bin │ │ │ │ │ ├── CMakeDetermineCompilerABI_CXX.bin │ │ │ │ │ └── CMakeSystem.cmake │ │ │ │ ├── TargetDirectories.txt │ │ │ │ ├── cmake.check_cache │ │ │ │ ├── feature_tests.bin │ │ │ │ ├── feature_tests.c │ │ │ │ └── feature_tests.cxx │ │ │ ├── android_gradle_build.json │ │ │ ├── android_gradle_build_mini.json │ │ │ ├── build.ninja │ │ │ ├── cmake_build_command.txt │ │ │ ├── cmake_build_output.txt │ │ │ ├── cmake_install.cmake │ │ │ ├── cmake_server_log.txt │ │ │ ├── compile_commands.json │ │ │ └── rules.ninja │ │ │ └── x86 │ │ │ ├── .ninja_deps │ │ │ ├── .ninja_log │ │ │ ├── CMakeCache.txt │ │ │ ├── CMakeFiles │ │ │ ├── 3.10.2 │ │ │ │ ├── CMakeCCompiler.cmake │ │ │ │ ├── CMakeCXXCompiler.cmake │ │ │ │ ├── CMakeDetermineCompilerABI_C.bin │ │ │ │ ├── CMakeDetermineCompilerABI_CXX.bin │ │ │ │ └── CMakeSystem.cmake │ │ │ ├── TargetDirectories.txt │ │ │ ├── cmake.check_cache │ │ │ ├── feature_tests.bin │ │ │ ├── feature_tests.c │ │ │ └── feature_tests.cxx │ │ │ ├── android_gradle_build.json │ │ │ ├── android_gradle_build_mini.json │ │ │ ├── build.ninja │ │ │ ├── cmake_build_command.txt │ │ │ ├── cmake_build_output.txt │ │ │ ├── cmake_install.cmake │ │ │ ├── cmake_server_log.txt │ │ │ ├── compile_commands.json │ │ │ └── rules.ninja │ ├── .gitignore │ ├── CMakeLists.txt │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── adi │ │ │ └── ExampleInstrumentedTest.java │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── cpp │ │ │ ├── adi.cpp │ │ │ ├── clooper │ │ │ │ ├── looper.c │ │ │ │ ├── looper.h │ │ │ │ ├── looper_test.c │ │ │ │ └── looper_test.h │ │ │ ├── common │ │ │ │ ├── jdi_native.cpp │ │ │ │ ├── jdi_native.h │ │ │ │ ├── log.h │ │ │ │ ├── utils.c │ │ │ │ └── utils.h │ │ │ ├── dumper.c │ │ │ ├── dumper.h │ │ │ ├── handler │ │ │ │ ├── ClassFileLoadHookHandler.cpp │ │ │ │ ├── ClassFileLoadHookHandler.h │ │ │ │ ├── ClassPrepareHandler.cpp │ │ │ │ ├── ClassPrepareHandler.h │ │ │ │ ├── Config.cpp │ │ │ │ ├── Config.h │ │ │ │ ├── FramePopHandler.cpp │ │ │ │ ├── FramePopHandler.h │ │ │ │ ├── GCCallbackHandler.cpp │ │ │ │ ├── GCCallbackHandler.h │ │ │ │ ├── MethodEntryHandler.cpp │ │ │ │ ├── MethodEntryHandler.h │ │ │ │ ├── MonitorContendedHandler.cpp │ │ │ │ ├── MonitorContendedHandler.h │ │ │ │ ├── ObjectFreeHandler.cpp │ │ │ │ ├── ObjectFreeHandler.h │ │ │ │ ├── Terminator.cpp │ │ │ │ ├── Terminator.h │ │ │ │ ├── ThreadStartHandler.cpp │ │ │ │ ├── ThreadStartHandler.h │ │ │ │ ├── VMObjectAllocHandler.cpp │ │ │ │ └── VMObjectAllocHandler.h │ │ │ └── jvmti.h │ │ ├── java │ │ │ └── com │ │ │ │ └── adi │ │ │ │ ├── ADIConfig.java │ │ │ │ ├── ADIManager.java │ │ │ │ ├── JVMTIConstant.java │ │ │ │ └── ui │ │ │ │ ├── ADIFloatManager.kt │ │ │ │ └── FloatWindow.kt │ │ └── res │ │ │ ├── drawable │ │ │ └── window_back.xml │ │ │ ├── layout │ │ │ └── adi_float.xml │ │ │ └── values │ │ │ └── strings.xml │ │ └── test │ │ └── java │ │ └── com │ │ └── adi │ │ └── ExampleUnitTest.java ├── adi_sample │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── dodola │ │ │ └── jvmti │ │ │ └── ExampleInstrumentedTest.java │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── adi │ │ │ │ └── demo │ │ │ │ ├── DemoObject.kt │ │ │ │ ├── DemoObject2.java │ │ │ │ ├── MainActivity.kt │ │ │ │ ├── MyApplication.kt │ │ │ │ └── TestObject.kt │ │ └── res │ │ │ ├── drawable-v24 │ │ │ └── ic_launcher_foreground.xml │ │ │ ├── drawable │ │ │ └── ic_launcher_background.xml │ │ │ ├── layout │ │ │ └── activity_main.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ └── test │ │ └── java │ │ └── com │ │ └── dodola │ │ └── jvmti │ │ └── ExampleUnitTest.java ├── build.gradle ├── gradle.properties ├── gradle │ ├── bintray.gradle │ ├── install.gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── matrix-io-canary │ ├── .gitignore │ ├── CMakeLists.txt │ ├── build.gradle │ ├── gradle.properties │ ├── proguard-rules.pro │ └── src │ │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── tencent │ │ │ └── matrix │ │ │ └── iocanary │ │ │ └── ExampleInstrumentedTest.java │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── cpp │ │ │ ├── comm │ │ │ │ ├── io_canary_utils.cc │ │ │ │ ├── io_canary_utils.h │ │ │ │ └── log.h │ │ │ ├── core │ │ │ │ ├── io_canary.cc │ │ │ │ ├── io_canary.h │ │ │ │ ├── io_canary_env.cc │ │ │ │ ├── io_canary_env.h │ │ │ │ ├── io_info_collector.cc │ │ │ │ └── io_info_collector.h │ │ │ ├── detector │ │ │ │ ├── detector.cc │ │ │ │ ├── detector.h │ │ │ │ ├── main_thread_detector.cc │ │ │ │ ├── main_thread_detector.h │ │ │ │ ├── repeat_read_detector.cc │ │ │ │ ├── repeat_read_detector.h │ │ │ │ ├── small_buffer_detector.cc │ │ │ │ └── small_buffer_detector.h │ │ │ ├── io_canary_jni.cc │ │ │ ├── libxhook │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── queue.h │ │ │ │ ├── tree.h │ │ │ │ ├── xh_core.c │ │ │ │ ├── xh_core.h │ │ │ │ ├── xh_elf.c │ │ │ │ ├── xh_elf.h │ │ │ │ ├── xh_errno.h │ │ │ │ ├── xh_jni.c │ │ │ │ ├── xh_log.c │ │ │ │ ├── xh_log.h │ │ │ │ ├── xh_util.c │ │ │ │ ├── xh_util.h │ │ │ │ ├── xh_version.c │ │ │ │ ├── xh_version.h │ │ │ │ ├── xhook.c │ │ │ │ └── xhook.h │ │ │ └── md5 │ │ │ │ ├── md5.c │ │ │ │ └── md5.h │ │ ├── java │ │ │ └── com │ │ │ │ └── tencent │ │ │ │ └── matrix │ │ │ │ ├── iocanary │ │ │ │ ├── config │ │ │ │ │ ├── IOConfig.java │ │ │ │ │ └── SharePluginInfo.java │ │ │ │ ├── core │ │ │ │ │ ├── IOCanaryCore.java │ │ │ │ │ ├── IOCanaryJniBridge.java │ │ │ │ │ ├── IOIssue.java │ │ │ │ │ └── OnJniIssuePublishListener.java │ │ │ │ └── util │ │ │ │ │ └── IOCanaryUtil.java │ │ │ │ └── util │ │ │ │ └── MatrixLog.java │ │ └── res │ │ │ └── values │ │ │ └── strings.xml │ │ └── test │ │ └── java │ │ └── com │ │ └── tencent │ │ └── matrix │ │ └── iocanary │ │ └── ExampleUnitTest.java └── settings.gradle └── docs ├── adi_float.png ├── adi_screenshot.png ├── adi_对象分配.html ├── adi_线程竞争.html ├── binary tree root.jpg ├── 多线程竞争.png ├── 对象分配与释放.png ├── 对象分配图表图解.png └── 线程竞争图表图解.png /.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | /build/ 3 | /out/ 4 | .idea 5 | *.iml 6 | local.properties 7 | 8 | # Ignore Gradle GUI config 9 | gradle-app.setting 10 | 11 | # Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) 12 | !gradle-wrapper.jar 13 | 14 | # Cache of project 15 | .gradletasknamecache 16 | 17 | # # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 18 | # gradle/wrapper/gradle-wrapper.properties 19 | 20 | 21 | ### Android template 22 | 23 | # Built application files 24 | *.apk 25 | *.ap_ 26 | 27 | # Files for the Dalvik VM 28 | *.dex 29 | 30 | # Java class files 31 | *.class 32 | 33 | # Generated files 34 | bin/ 35 | gen/ 36 | app/bugly/ 37 | 38 | # Gradle files 39 | .gradle/ 40 | build/ 41 | reports/ 42 | /*/build/ 43 | 44 | # Local configuration file (sdk path, etc) 45 | local.properties 46 | 47 | # Proguard folder generated by Eclipse 48 | proguard/ 49 | 50 | # Log Files 51 | #*.log 52 | 53 | # Other Files 54 | captures/ 55 | 56 | ### JetBrains template 57 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm 58 | 59 | *.iml 60 | 61 | ## Directory-based project format: 62 | .idea/ 63 | # if you remove the above rule, at least ignore the following: 64 | 65 | # User-specific stuff: 66 | # .idea/workspace.xml 67 | # .idea/tasks.xml 68 | # .idea/dictionaries 69 | 70 | # Sensitive or high-churn files: 71 | # .idea/dataSources.ids 72 | # .idea/dataSources.xml 73 | # .idea/sqlDataSources.xml 74 | # .idea/dynamic.xml 75 | # .idea/uiDesigner.xml 76 | 77 | # Gradle: 78 | # .idea/gradle.xml 79 | # .idea/libraries 80 | 81 | # Mongo Explorer plugin: 82 | # .idea/mongoSettings.xml 83 | 84 | ## File-based project format: 85 | *.ipr 86 | *.iws 87 | 88 | ## Plugin-specific files: 89 | 90 | # IntelliJ 91 | out/ 92 | 93 | # mpeltonen/sbt-idea plugin 94 | .idea_modules/ 95 | 96 | # JIRA plugin 97 | atlassian-ide-plugin.xml 98 | 99 | # Crashlytics plugin (for Android Studio and IntelliJ) 100 | com_crashlytics_export_strings.xml 101 | crashlytics.properties 102 | crashlytics-build.properties 103 | 104 | # Others 105 | *.DS_Store 106 | .directory 107 | 108 | sourcecode.properties 109 | 110 | 111 | */.classpath 112 | */.project 113 | */.settings 114 | 115 | adilib/.externalNativeBuild 116 | *.log -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # ChangeLog 2 | ## 0.9.3 3 | * 图表分析脚本发布到 pip 4 | * 添加 adi-nop 包 5 | ## 0.9.2 6 | * 完成对象分配监控的基本功能 7 | * 完成线程竞争监控的基本功能 8 | * 完成图表分析基本功能 -------------------------------------------------------------------------------- /adi_analyze/.gitignore: -------------------------------------------------------------------------------- 1 | *.DS_Store 2 | *.py[cod] 3 | 4 | .idea/* 5 | *.log 6 | dist 7 | adi_analyzer.egg-info/* -------------------------------------------------------------------------------- /adi_analyze/adi_analyzer.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/2 11:24 上午 4 | # @Author : kewen 5 | # @File : adi_analyzer.py 6 | 7 | from main import analyzer 8 | 9 | if __name__ == "__main__": 10 | analyzer.main() 11 | -------------------------------------------------------------------------------- /adi_analyze/aggregate/GlobalAggregateInfo.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/23 2:08 下午 4 | # @Author : kewen 5 | # @File : GlobalAggregateInfo.py 6 | 7 | 8 | class GlobalAggregateInfo: 9 | """ 10 | 一份日志的全局信息,和日志文件是一对一关系 11 | """ 12 | 13 | def __init__(self): 14 | # 日志文件名 15 | self.fileName = "" 16 | # 日志路径 17 | self.filePath = "" 18 | # 日志开始事件时间戳 19 | self.startTimestamp = 0 20 | # 日志最后事件的时间戳 21 | self.endTimestamp = 0 22 | # 日志事件的总时长 23 | self.totalTime = 0 24 | -------------------------------------------------------------------------------- /adi_analyze/aggregate/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/10 4:02 下午 4 | # @Author : kewen 5 | # @File : __init__.py.py -------------------------------------------------------------------------------- /adi_analyze/aggregate/aggregate_to_json.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/10 5:00 下午 4 | # @Author : kewen 5 | # @File : aggregate_to_json.py 6 | from aggregate.GlobalAggregateInfo import GlobalAggregateInfo 7 | from aggregate.handler.ObjectAllocAndFreeHandler import ObjectAllocAndFreeHandler 8 | from aggregate.handler.ThreadContendHandler import ThreadContendHandler 9 | from aggregate.handler.ThreadStartHandler import ThreadStartHandler 10 | 11 | handlerList = [ObjectAllocAndFreeHandler(), 12 | ThreadContendHandler(), 13 | ThreadStartHandler()] 14 | 15 | 16 | def aggregateToJson(event, globalInfo: GlobalAggregateInfo) -> dict: 17 | for handler in handlerList: 18 | if handler.shouldHandle(event.eventName): 19 | return handler.handle(event, globalInfo) 20 | -------------------------------------------------------------------------------- /adi_analyze/aggregate/handler/AggregateObject.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/10 4:03 下午 4 | # @Author : kewen 5 | # @File : AggregateObject.py 6 | from event.ObjectAllocEvent import ObjectAllocEvent 7 | 8 | 9 | class AggregateObject: 10 | 11 | def __init__(self): 12 | self.objectName = "" 13 | self.threadName = "" 14 | self.stackStr = "" 15 | self.niceStack = "" 16 | self.niceObjectName = "" 17 | self.aggId = 0 18 | self.count = 1 19 | self.totalSize = 0 20 | self.tags = [] 21 | 22 | def copyFromOAEvent(self, event: ObjectAllocEvent): 23 | self.objectName = event.objectName 24 | self.threadName = event.threadName 25 | self.stackStr = event.stackStr 26 | self.totalSize = event.objectSize 27 | -------------------------------------------------------------------------------- /adi_analyze/aggregate/handler/BaseHandler.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/2 2:01 下午 4 | # @Author : kewen 5 | # @File : BaseHandler.py 6 | from aggregate.GlobalAggregateInfo import GlobalAggregateInfo 7 | 8 | 9 | class BaseHandler: 10 | 11 | def shouldHandle(self, eventName) -> bool: 12 | return False 13 | 14 | def handle(self, event, globalInfo: GlobalAggregateInfo) -> dict: 15 | pass 16 | -------------------------------------------------------------------------------- /adi_analyze/aggregate/handler/ThreadContendHandler.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/24 5:54 下午 4 | # @Author : kewen 5 | # @File : ThreadContendHandler.py 6 | from aggregate.GlobalAggregateInfo import GlobalAggregateInfo 7 | from aggregate.handler.BaseHandler import BaseHandler 8 | from event.MonitorContendedEvent import MonitorContendedEvent 9 | from utils.JVMUtils import convertClassDesc, convertNiceStack 10 | 11 | 12 | def aggregateMCEEvent(event: MonitorContendedEvent) -> (str, str, str): 13 | # monitorObjId, contendThreadId = aggregateMCEDEvent(event) 14 | monitorObjName = convertClassDesc(event.monitorObjName) 15 | contendStack = convertNiceStack(event.contendStack) 16 | ownerStack = convertNiceStack(event.ownerStack) 17 | return monitorObjName, contendStack, ownerStack 18 | 19 | 20 | class ThreadContendHandler(BaseHandler): 21 | 22 | def __init__(self): 23 | pass 24 | 25 | def shouldHandle(self, eventName) -> bool: 26 | return eventName in ["MCE", "MCED"] 27 | 28 | def handle(self, event, globalInfo: GlobalAggregateInfo) -> dict: 29 | eventName = event.eventName 30 | json = {"timestamp": event.timestamp, 31 | "time": (event.timestamp - globalInfo.startTimestamp), 32 | "eventName": eventName} 33 | if eventName in "MCE": 34 | json["contendThreadName"] = event.contendThreadName 35 | json["monitorObjHash"] = event.monitorObjHash 36 | json["ownerThreadName"] = event.ownerThreadName 37 | json["entryCount"] = event.entryCount 38 | json["waiterCount"] = event.waiterCount 39 | json["notifyWaiterCount"] = event.notifyWaiterCount 40 | json["contendOwnedMonitors"] = "[" + ", ".join(event.contendOwnedMonitors) + "]" 41 | monitorObjName, contendStack, ownerStack = aggregateMCEEvent(event) 42 | json["monitorObjName"] = monitorObjName + "@" + event.monitorObjHash 43 | json["contendStack"] = contendStack 44 | json["ownerStack"] = ownerStack 45 | elif eventName in "MCED": 46 | json["contendThreadName"] = event.contendThreadName 47 | json["monitorObjHash"] = event.monitorObjHash 48 | return json 49 | -------------------------------------------------------------------------------- /adi_analyze/aggregate/handler/ThreadStartHandler.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/24 5:54 下午 4 | # @Author : kewen 5 | # @File : ThreadContendHandler.py 6 | from aggregate.GlobalAggregateInfo import GlobalAggregateInfo 7 | from aggregate.handler.BaseHandler import BaseHandler 8 | 9 | 10 | class ThreadStartHandler(BaseHandler): 11 | 12 | def __init__(self): 13 | self.threadCount = 0 14 | 15 | def shouldHandle(self, eventName) -> bool: 16 | return eventName in ["TS"] 17 | 18 | def handle(self, event, globalInfo: GlobalAggregateInfo) -> dict: 19 | eventName = event.eventName 20 | self.threadCount += 1 21 | json = {"timestamp": event.timestamp, 22 | "time": (event.timestamp - globalInfo.startTimestamp), 23 | "eventName": eventName, 24 | "startThreadName": event.startThreadName, 25 | "curTotalCount": self.threadCount} 26 | return json 27 | -------------------------------------------------------------------------------- /adi_analyze/aggregate/handler/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/24 5:24 下午 4 | # @Author : kewen 5 | # @File : __init__.py.py -------------------------------------------------------------------------------- /adi_analyze/event/Event.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/2 11:54 上午 4 | # @Author : kewen 5 | # @File : Event.py 6 | 7 | 8 | class Event: 9 | """ 10 | 对应日志中的一行事件,保存事件所有信息 11 | """ 12 | 13 | def __init__(self): 14 | self.eventName = "" 15 | self.timestamp = 0 16 | -------------------------------------------------------------------------------- /adi_analyze/event/GCEvent.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/2 1:34 下午 4 | # @Author : kewen 5 | # @File : GCEvent.py 6 | 7 | from event.Event import Event 8 | 9 | 10 | class GCEvent(Event): 11 | """ 12 | JVM 触发垃圾回收的 Event。包括 GC 开始和 GC 结束 13 | """ 14 | 15 | def __init__(self): 16 | super().__init__() 17 | -------------------------------------------------------------------------------- /adi_analyze/event/MonitorContendedEvent.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/2 1:34 下午 4 | # @Author : kewen 5 | # @File : GCEvent.py 6 | from event.Event import Event 7 | 8 | 9 | class MonitorContendedEvent(Event): 10 | """ 11 | JVM 发生锁竞争事件 12 | """ 13 | 14 | def __init__(self): 15 | super().__init__() 16 | self.contendThreadName = "" 17 | self.monitorObjHash = "" 18 | self.monitorObjName = "" 19 | self.contendOwnedMonitors = [] 20 | self.contendStack = [] 21 | self.ownerThreadName = "" 22 | self.entryCount = 0 23 | self.waiterCount = 0 24 | self.notifyWaiterCount = 0 25 | self.ownerStack = [] 26 | -------------------------------------------------------------------------------- /adi_analyze/event/ObjectAllocEvent.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/2 1:09 下午 4 | # @Author : kewen 5 | # @File : ObjectAllocEvent.py 6 | from event.StackEvent import StackEvent 7 | 8 | 9 | class ObjectAllocEvent(StackEvent): 10 | """ 11 | JVM 分配对象的 Event。保存分配对象时的线程名字、对象类名、调用栈等详细信息 12 | """ 13 | 14 | def __init__(self): 15 | super().__init__() 16 | self.threadName = "" 17 | self.objectName = "" 18 | self.objectSize = 0 19 | self.objectTag = 0 20 | 21 | 22 | -------------------------------------------------------------------------------- /adi_analyze/event/ObjectFreeEvent.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/2 1:34 下午 4 | # @Author : kewen 5 | # @File : GCEvent.py 6 | 7 | from event.Event import Event 8 | 9 | 10 | class ObjectFreeEvent(Event): 11 | """ 12 | JVM 触发垃圾回收的 Event。包括 GC 开始和 GC 结束 13 | """ 14 | 15 | def __init__(self): 16 | super().__init__() 17 | self.tag = 0 18 | -------------------------------------------------------------------------------- /adi_analyze/event/StackEvent.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/2 11:54 上午 4 | # @Author : kewen 5 | # @File : Event.py 6 | from event.Event import Event 7 | 8 | 9 | class StackEvent(Event): 10 | """ 11 | 对应日志中的一行事件,保存事件所有信息 12 | """ 13 | 14 | def __init__(self): 15 | super().__init__() 16 | self.stack = [""] 17 | self.stackStr = "" 18 | -------------------------------------------------------------------------------- /adi_analyze/event/ThreadStartEvent.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/2 1:34 下午 4 | # @Author : kewen 5 | # @File : GCEvent.py 6 | from event.Event import Event 7 | 8 | 9 | class ThreadStartEvent(Event): 10 | """ 11 | JVM 启动一个线程的 Event。 12 | """ 13 | 14 | def __init__(self): 15 | super().__init__() 16 | self.startThreadName = "" 17 | -------------------------------------------------------------------------------- /adi_analyze/event/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/2 1:09 下午 4 | # @Author : kewen 5 | # @File : __init__.py.py -------------------------------------------------------------------------------- /adi_analyze/handler/BaseHandler.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/2 2:01 下午 4 | # @Author : kewen 5 | # @File : BaseHandler.py 6 | from event.Event import Event 7 | 8 | SEP_POWER = "^^^" 9 | SEP_COMMA = ",,," 10 | 11 | 12 | class BaseHandler: 13 | 14 | def shouldHandle(self, eventName) -> bool: 15 | return False 16 | 17 | def handle(self, segmentList) -> Event: 18 | pass 19 | -------------------------------------------------------------------------------- /adi_analyze/handler/GCHandler.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/2 2:05 下午 4 | # @Author : kewen 5 | # @File : ObjectAllocHandler.py 6 | from event.GCEvent import GCEvent 7 | from handler.BaseHandler import BaseHandler 8 | 9 | GCStart = "GCS" 10 | GCFinish = "GCF" 11 | 12 | 13 | class GCHandler(BaseHandler): 14 | 15 | def shouldHandle(self, eventName): 16 | return eventName == GCStart or eventName == GCFinish 17 | 18 | def handle(self, segmentList): 19 | event = GCEvent() 20 | event.eventName = segmentList[0] 21 | event.timestamp = int(segmentList[1]) 22 | return event 23 | -------------------------------------------------------------------------------- /adi_analyze/handler/MonitorContendedHandler.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/2 2:05 下午 4 | # @Author : kewen 5 | # @File : ObjectAllocHandler.py 6 | from event.MonitorContendedEvent import MonitorContendedEvent 7 | from handler.BaseHandler import BaseHandler, SEP_POWER, SEP_COMMA 8 | 9 | MonitorContended = "MCE" 10 | 11 | 12 | class MonitorContendedHandler(BaseHandler): 13 | 14 | def shouldHandle(self, eventName): 15 | return str(eventName).startswith(MonitorContended) 16 | 17 | def handle(self, segmentList): 18 | """ 19 | 一个 MCE 类型事件的例子: 20 | 无调用栈:MCE|1570529588098^^^monitor_deadlock_thread2^^^2744264^^^Ljava/lang/Object;|512eccd^^^c37982^^^ecc8893|monitor_deadlock_thread1^^^1^^^0^^^0 21 | 有调用栈: 22 | :param segmentList: 23 | :return: 24 | """ 25 | event = MonitorContendedEvent() 26 | event.eventName = segmentList[0] 27 | # 收集基本信息 28 | base = segmentList[1] 29 | baseList = base.split(SEP_POWER) 30 | event.timestamp = int(baseList[0]) 31 | event.contendThreadName = baseList[1] 32 | event.monitorObjHash = str(baseList[2]).strip() 33 | # 只有 MCE 有,MCED 没有的信息 34 | if event.eventName == MonitorContended: 35 | event.monitorObjName = baseList[3] 36 | # 收集竞争线程持有的锁列表 37 | ownedMonitors = segmentList[2] 38 | event.contendOwnedMonitors = ownedMonitors.split(SEP_POWER) 39 | # 收集锁信息 40 | monitor = segmentList[3] 41 | monitorList = monitor.split(SEP_POWER) 42 | event.ownerThreadName = monitorList[0] 43 | event.entryCount = int(monitorList[1]) 44 | event.waiterCount = int(monitorList[2]) 45 | event.notifyWaiterCount = int(monitorList[3]) 46 | # 收集竞争线程的栈信息 47 | stack = str(segmentList[4]).replace(SEP_POWER, " ") 48 | event.contendStack = stack.split(SEP_COMMA) 49 | # 收集持有锁线程的栈信息 50 | stack = str(segmentList[5]).replace(SEP_POWER, " ") 51 | event.ownerStack = stack.split(SEP_COMMA) 52 | return event 53 | -------------------------------------------------------------------------------- /adi_analyze/handler/ObjectAllocHandler.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/2 2:05 下午 4 | # @Author : kewen 5 | # @File : ObjectAllocHandler.py 6 | from event.ObjectAllocEvent import ObjectAllocEvent 7 | from handler.BaseHandler import BaseHandler, SEP_POWER, SEP_COMMA 8 | 9 | ObjectAlloc = "OA" 10 | 11 | 12 | class ObjectAllocHandler(BaseHandler): 13 | 14 | def shouldHandle(self, eventName): 15 | return eventName == ObjectAlloc 16 | 17 | def handle(self, segmentList): 18 | """ 19 | 一个 OA 类型事件的例子: 20 | OA|1568794381394^^^RxComputationThreadPool-8^^^[C^^^4872^^^6 21 | |Ljava/util/Arrays;^^^copyOf^^^([CI)[C,,,Ljava/lang/AbstractStringBuilder;^^^ensureCapacityInternal^^^(I)V,,,Ljava/lang/AbstractStringBuilder;^^^append^^^(Ljava/lang/String;)Ljava/lang/AbstractStringBuilder;,,,Ljava/lang/StringBuilder;^^^append^^^(Ljava/lang/String;)Ljava/lang/StringBuilder;,,,Ljava/lang/StringBuilder;^^^append^^^(Ljava/lang/Object;)Ljava/lang/StringBuilder;,,,Lhu/akarnokd/rxjava2/debug/RxJavaAssemblyException;^^^buildStackTrace^^^()Ljava/lang/String;,,,Lhu/akarnokd/rxjava2/debug/RxJavaAssemblyException;^^^^^^()V,,,Lhu/akarnokd/rxjava2/debug/ObservableOnAssembly;^^^^^^(Lio/reactivex/ObservableSource;)V,,,Lhu/akarnokd/rxjava2/debug/RxJavaAssemblyTracking$3;^^^apply^^^(Lio/reactivex/Observable;)Lio/reactivex/Observable;,,,Lhu/akarnokd/rxjava2/debug/RxJavaAssemblyTracking$3;^^^apply^^^(Ljava/lang/Object;)Ljava/lang/Object; 22 | :param segmentList: 23 | :return: 24 | """ 25 | event = ObjectAllocEvent() 26 | event.eventName = segmentList[0] 27 | base = segmentList[1] 28 | # 收集基本信息 29 | baseList = base.split(SEP_POWER) 30 | event.timestamp = int(baseList[0]) 31 | event.threadName = baseList[1] 32 | event.objectName = baseList[2] 33 | event.objectSize = int(baseList[3]) 34 | event.objectTag = int(baseList[4]) 35 | # 收集栈信息 36 | stack = str(segmentList[2]).replace(SEP_POWER, " ") 37 | event.stack = stack.split(SEP_COMMA) 38 | event.stackStr = "\n".join(event.stack) 39 | return event 40 | -------------------------------------------------------------------------------- /adi_analyze/handler/ObjectFreeHandler.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/2 2:05 下午 4 | # @Author : kewen 5 | # @File : ObjectAllocHandler.py 6 | from event.ObjectFreeEvent import ObjectFreeEvent 7 | from handler.BaseHandler import BaseHandler, SEP_POWER 8 | 9 | ObjectFree = "OF" 10 | 11 | 12 | class ObjectFreeHandler(BaseHandler): 13 | 14 | def shouldHandle(self, eventName): 15 | return eventName == ObjectFree 16 | 17 | def handle(self, segmentList): 18 | event = ObjectFreeEvent() 19 | event.eventName = segmentList[0] 20 | # 收集基本信息 21 | base = segmentList[1] 22 | baseList = base.split(SEP_POWER) 23 | event.timestamp = int(baseList[0]) 24 | event.tag = int(baseList[1]) 25 | return event 26 | -------------------------------------------------------------------------------- /adi_analyze/handler/ThreadStartHandler.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/2 2:05 下午 4 | # @Author : kewen 5 | # @File : ObjectAllocHandler.py 6 | from event.ThreadStartEvent import ThreadStartEvent 7 | from handler.BaseHandler import BaseHandler, SEP_POWER, SEP_COMMA 8 | 9 | ThreadStart = "TS" 10 | 11 | 12 | class ThreadStartHandler(BaseHandler): 13 | 14 | def shouldHandle(self, eventName): 15 | return eventName == ThreadStart 16 | 17 | def handle(self, segmentList): 18 | event = ThreadStartEvent() 19 | event.eventName = segmentList[0] 20 | # 收集基本信息 21 | base = segmentList[1] 22 | baseList = base.split(SEP_POWER) 23 | event.timestamp = int(baseList[0]) 24 | event.startThreadName = baseList[1] 25 | return event 26 | -------------------------------------------------------------------------------- /adi_analyze/handler/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/2 2:00 下午 4 | # @Author : kewen 5 | # @File : __init__.py.py -------------------------------------------------------------------------------- /adi_analyze/main/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_analyze/main/__init__.py -------------------------------------------------------------------------------- /adi_analyze/plot/BaseMaker.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/20 4:06 下午 4 | # @Author : kewen 5 | # @File : BaseMaker.py 6 | from aggregate.GlobalAggregateInfo import GlobalAggregateInfo 7 | 8 | 9 | class BaseMaker: 10 | 11 | def __init__(self): 12 | pass 13 | 14 | def make(self, globalAggInfo: GlobalAggregateInfo, jsonList: list): 15 | return 16 | -------------------------------------------------------------------------------- /adi_analyze/plot/BokehPlotMaker.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/20 4:10 下午 4 | # @Author : kewen 5 | # @File : BokehPlotMaker.py 6 | from bokeh.layouts import column 7 | from bokeh.plotting import show, output_file 8 | 9 | from aggregate.GlobalAggregateInfo import GlobalAggregateInfo 10 | from plot.BaseMaker import BaseMaker 11 | from plot.maker.ObjectAllocPlot import ObjectAllocPlot 12 | from plot.maker.ThreadContendPlot import ThreadContendPlot 13 | 14 | 15 | class BokehPlotMaker(BaseMaker): 16 | 17 | def __init__(self, ): 18 | super().__init__() 19 | self.makerList = [ThreadContendPlot(), ObjectAllocPlot()] 20 | 21 | def make(self, globalAggInfo: GlobalAggregateInfo, jsonList: list): 22 | output_file(globalAggInfo.filePath + ".html") 23 | plotList = [] 24 | for maker in self.makerList: 25 | plot = maker.make(globalAggInfo, jsonList) 26 | if plot: 27 | if type(plot) is tuple: 28 | for p in plot: 29 | plotList.append(p) 30 | else: 31 | plotList.append(plot) 32 | 33 | # 展示所有 Plot 34 | show(column(plotList)) 35 | -------------------------------------------------------------------------------- /adi_analyze/plot/MongoPlotMaker.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/20 4:03 下午 4 | # @Author : kewen 5 | # @File : MongoPlotMaker.py 6 | import pymongo 7 | 8 | from aggregate.GlobalAggregateInfo import GlobalAggregateInfo 9 | from plot.BaseMaker import BaseMaker 10 | 11 | 12 | class MongoPlotMaker(BaseMaker): 13 | """ 14 | 仅供开发调试用,普通用户无需关心 15 | """ 16 | 17 | def __init__(self, logName: str): 18 | super().__init__() 19 | mongo = pymongo.MongoClient(host="localhost", port=27017) 20 | db = mongo['adi_analyze'] 21 | self.collection = db[logName] 22 | 23 | def make(self, globalAggInfo: GlobalAggregateInfo, jsonList: list): 24 | # 插入到 MongoDB 25 | print("\n聚合完毕,批量存入到数据库...") 26 | self.collection.insert(jsonList) 27 | -------------------------------------------------------------------------------- /adi_analyze/plot/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/20 4:00 下午 4 | # @Author : kewen 5 | # @File : __init__.py.py -------------------------------------------------------------------------------- /adi_analyze/plot/maker/ObjectAllocLine.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/11 5:15 下午 4 | # @Author : kewen 5 | # @File : PlotLine.py 6 | 7 | 8 | class ObjectAllocLine: 9 | 10 | def __init__(self): 11 | self.eventNameList = [] 12 | self.aggId = 0 13 | self.countList = [] 14 | self.timeList = [] 15 | self.objectSizeList = [] 16 | self.objectNameList = [] 17 | self.threadNameList = [] 18 | self.stackList = [] 19 | -------------------------------------------------------------------------------- /adi_analyze/plot/maker/ThreadContendSegment.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/19 11:52 上午 4 | # @Author : kewen 5 | # @File : PlotSegment.py 6 | 7 | 8 | class ThreadContendSegment: 9 | 10 | def __init__(self): 11 | self.x0 = [] 12 | self.y0 = [] 13 | self.x1 = [] 14 | self.y1 = [] 15 | self.durations = [] 16 | self.legend = "" 17 | self.color = "" 18 | self.ownerThread = [] 19 | self.monitorObjNames = [] 20 | self.contendStack = [] 21 | self.ownerStack = [] 22 | self.contendOwnedMonitors = [] 23 | -------------------------------------------------------------------------------- /adi_analyze/plot/maker/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/24 6:44 下午 4 | # @Author : kewen 5 | # @File : __init__.py.py -------------------------------------------------------------------------------- /adi_analyze/setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/10/12 5:41 下午 4 | # @Author : kewen 5 | # @File : setup.py.py 6 | 7 | from setuptools import setup, find_packages 8 | 9 | setup( 10 | name='adi-analyzer', 11 | #TODO 版本号要维护起来!~ 12 | version='0.9.3', 13 | author='zkwlx', 14 | author_email='zkwlixue@163.com', 15 | url='https://github.com/zkwlx/ADI', 16 | description='A powerful tool to help Android engineers optimize their performance', 17 | packages=find_packages(), 18 | install_requires=['bokeh'], 19 | entry_points={ 20 | 'console_scripts': [ 21 | 'adi-analyzer=main.analyzer:main' 22 | ] 23 | }, 24 | # See https://pypi.python.org/pypi?%3Aaction=list_classifiers 25 | classifiers=[ 26 | # Specify the Python versions you support here. In particular, ensure 27 | # that you indicate whether you support Python 2, Python 3 or both. 28 | 'Programming Language :: Python :: 3 :: Only', 29 | ], 30 | ) 31 | -------------------------------------------------------------------------------- /adi_analyze/utils/ColorUtils.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/19 3:31 下午 4 | # @Author : kewen 5 | # @File : ColorUtils.py 6 | import colorsys 7 | from random import random 8 | from random import shuffle 9 | 10 | 11 | def toHex(rgb) -> str: 12 | str_rgb = "#" 13 | for c in rgb: 14 | if c < 16: 15 | # 处理 0xf 这种情况 16 | x = "0" + str(hex(c))[-1:] 17 | else: 18 | # 处理 0xff 这种情况 19 | x = str(hex(c))[-2:] 20 | str_rgb += x 21 | return str_rgb 22 | 23 | 24 | def get_n_hls_colors(num) -> list: 25 | hls_colors = [] 26 | i = 0 27 | step = 360.0 / num 28 | while i < 360: 29 | h = i 30 | s = 90 + random() * 10 31 | l = 50 + random() * 10 32 | _hlsc = [h / 360.0, l / 100.0, s / 100.0] 33 | hls_colors.append(_hlsc) 34 | i += step 35 | 36 | return hls_colors 37 | 38 | 39 | def get_n_rgb_colors(num) -> list: 40 | rgb_colors = [] 41 | if num < 1: 42 | return rgb_colors 43 | hls_colors = get_n_hls_colors(num) 44 | for hlsc in hls_colors: 45 | _r, _g, _b = colorsys.hls_to_rgb(hlsc[0], hlsc[1], hlsc[2]) 46 | r, g, b = [int(x * 255.0) for x in (_r, _g, _b)] 47 | rgb_colors.append(toHex([r, g, b])) 48 | shuffle(rgb_colors) 49 | return rgb_colors 50 | -------------------------------------------------------------------------------- /adi_analyze/utils/ColorUtils_test.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/19 3:37 下午 4 | # @Author : kewen 5 | # @File : ColorUtils_test.py 6 | 7 | import unittest 8 | 9 | from utils.ColorUtils import toHex, get_n_rgb_colors 10 | 11 | 12 | class Test(unittest.TestCase): 13 | 14 | def test_toHex(self): 15 | rgb = [244, 255, 196] 16 | self.assertEqual(toHex(rgb), "#f4ffc4") 17 | 18 | def test_get_n_rgb(self): 19 | get_n_rgb_colors(3) 20 | 21 | 22 | if __name__ == '__main__': 23 | unittest.main() 24 | -------------------------------------------------------------------------------- /adi_analyze/utils/JVMUtils_test.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/3 8:38 下午 4 | # @Author : kewen 5 | # @File : JVMUtils_test.py.py 6 | 7 | import unittest 8 | 9 | from utils.JVMUtils import convertBaseType, convertObjectDesc, convertArray, convertClassDesc, convertMethodDesc 10 | 11 | 12 | class Test(unittest.TestCase): 13 | 14 | def test_convertBaseType(self): 15 | self.assertEqual(convertBaseType("[[J"), "long[][]", "解析失败!") 16 | self.assertEqual(convertBaseType("Z"), "bool", "解析失败!") 17 | 18 | def test_convertObjectType(self): 19 | self.assertEqual(convertObjectDesc("Landroid/content/Context;"), "android.content.Context") 20 | self.assertEqual(convertObjectDesc("[[Landroid/content/Context;"), "android.content.Context[][]") 21 | 22 | def test_convertArray(self): 23 | self.assertEqual(convertArray("[[[J"), ("J", 3)) 24 | self.assertEqual(convertArray("Z"), ("Z", 0)) 25 | self.assertEqual(convertArray("[[[Landroid/content/Context;"), ("Landroid/content/Context;", 3)) 26 | 27 | def test_convertClassDesc(self): 28 | self.assertEqual(convertClassDesc("[[[I"), "int[][][]") 29 | self.assertEqual(convertClassDesc("Landroid/content/Context;"), "android.content.Context") 30 | 31 | def test_convertMethodDesc(self): 32 | self.assertEqual("(int)", convertMethodDesc("(I)V")) 33 | self.assertEqual("(char[],int)", convertMethodDesc("([CI)[C")) 34 | self.assertEqual("()", convertMethodDesc("()[C")) 35 | self.assertEqual("(java.lang.Object,long)", convertMethodDesc("(Ljava/lang/Object;J)Ljava/lang/Runnable;")) 36 | 37 | 38 | if __name__ == '__main__': 39 | unittest.main() 40 | -------------------------------------------------------------------------------- /adi_analyze/utils/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2019/9/3 8:25 下午 4 | # @Author : kewen 5 | # @File : __init__.py.py -------------------------------------------------------------------------------- /adi_lib/adi-nop/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /adi_lib/adi-nop/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | apply plugin: 'kotlin-android' 3 | apply plugin: 'kotlin-android-extensions' 4 | android { 5 | compileSdkVersion 28 6 | buildToolsVersion "29.0.2" 7 | 8 | 9 | defaultConfig { 10 | minSdkVersion 21 11 | targetSdkVersion 28 12 | versionCode 1 13 | versionName "1.0" 14 | 15 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 16 | consumerProguardFiles 'consumer-rules.pro' 17 | } 18 | 19 | buildTypes { 20 | release { 21 | minifyEnabled false 22 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 23 | } 24 | } 25 | 26 | } 27 | 28 | dependencies { 29 | implementation fileTree(dir: 'libs', include: ['*.jar']) 30 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 31 | } 32 | 33 | 34 | // upload to jcenter =================================== 35 | apply plugin: 'com.github.dcendents.android-maven' 36 | apply plugin: 'com.jfrog.bintray' 37 | 38 | ext { 39 | 40 | //发布到bintray上仓库名,执行上传前必须手动创建同名到仓库,否则上传会失败 41 | bintrayRepo = rootProject.ext.bintrayRepo 42 | bintrayName = 'zkw.adi:adi-nop' 43 | //项目的目录名 44 | libraryName = 'adi-nop' 45 | 46 | //群组id 47 | publishedGroupId = rootProject.ext.publishedGroupId 48 | //最好和libraryName保持一致 49 | artifact = libraryName 50 | libraryVersion = rootProject.ext.libraryVersion 51 | 52 | //库描述 53 | libraryDescription = rootProject.ext.libraryDescription 54 | 55 | siteUrl = rootProject.ext.siteUrl 56 | gitUrl = rootProject.ext.gitUrl 57 | 58 | developerId = rootProject.ext.developerId 59 | developerName = rootProject.ext.developerName 60 | developerEmail = rootProject.ext.developerEmail 61 | 62 | licenseName = rootProject.ext.licenseName 63 | licenseUrl = rootProject.ext.licenseUrl 64 | allLicenses = rootProject.ext.allLicenses 65 | } 66 | repositories { 67 | mavenCentral() 68 | } 69 | if (project.rootProject.file('local.properties').exists()) { 70 | apply from: rootProject.file('gradle/install.gradle') 71 | apply from: rootProject.file('gradle/bintray.gradle') 72 | } 73 | // upload to jcenter =================================== 74 | 75 | -------------------------------------------------------------------------------- /adi_lib/adi-nop/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_lib/adi-nop/consumer-rules.pro -------------------------------------------------------------------------------- /adi_lib/adi-nop/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /adi_lib/adi-nop/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | -------------------------------------------------------------------------------- /adi_lib/adi-nop/src/main/java/com/adi/ADIConfig.java: -------------------------------------------------------------------------------- 1 | package com.adi; 2 | 3 | public class ADIConfig { 4 | 5 | /** 6 | * ADI 监控的事件类型 7 | */ 8 | public enum Type { 9 | 10 | /** 11 | * 监控 Java 对象内存的分配和释放 12 | */ 13 | OBJECT_ALLOC_AND_FREE, 14 | 15 | /** 16 | * 监控多线程锁竞争 17 | */ 18 | THREAD_MONITOR_CONTEND; 19 | 20 | /** 21 | * 给指定 Type 增加新的监听事件。 22 | *
这是后门方法,使用前一定要充分了解自己在做什么!
23 | * 24 | * @param event 25 | */ 26 | public void addEvent(int event) { 27 | } 28 | 29 | Type() { 30 | } 31 | } 32 | 33 | 34 | private ADIConfig() { 35 | } 36 | 37 | public static class Builder { 38 | 39 | 40 | /** 41 | * 设置事件监控的采样,单位毫秒,默认值是 0.8 毫秒。 42 | *
支持事件类型:
OBJECT_ALLOC_AND_FREE 43 | * 44 | * @param ms 45 | * @return 46 | */ 47 | public Builder setSampleInterval(float ms) { 48 | return this; 49 | } 50 | 51 | /** 52 | * 设置 ADI 监控的事件类型,参考 {@link Type} 53 | * 54 | * @param type 55 | * @return 56 | */ 57 | public Builder setEventType(Type type) { 58 | return this; 59 | } 60 | 61 | /** 62 | * 设置获取调用栈的深度,默认 10。 63 | *
支持事件类型:
64 | * OBJECT_ALLOC_AND_FREE、THREAD_MONITOR_CONTEND 65 | * 66 | * @param stackDepth 67 | */ 68 | public Builder setStackDepth(int stackDepth) { 69 | return this; 70 | } 71 | 72 | public ADIConfig build() { 73 | return new ADIConfig(); 74 | } 75 | } 76 | 77 | 78 | } 79 | -------------------------------------------------------------------------------- /adi_lib/adi-nop/src/main/java/com/adi/ADIManager.java: -------------------------------------------------------------------------------- 1 | package com.adi; 2 | 3 | import android.annotation.SuppressLint; 4 | import android.content.Context; 5 | 6 | /** 7 | * @author zhoukewen 8 | * @since 2019-08-12 9 | */ 10 | public class ADIManager { 11 | 12 | @SuppressLint("UnsafeDynamicallyLoadedCode") 13 | public static void init(Context context) { 14 | // no-op 15 | } 16 | 17 | /** 18 | * 启动 Dumper,并开启 JVMTI 事件监听 19 | * 20 | * @param context 21 | * @param config 22 | */ 23 | public static void start(Context context, ADIConfig config) { 24 | // no-op 25 | } 26 | 27 | /** 28 | * 停止 Dumper 线程,并关闭 JVMTI 事件监听 29 | */ 30 | public static void stop() { 31 | // no-op 32 | } 33 | 34 | public static long getObjSize(Object obj) { 35 | // no-op 36 | return -1; 37 | } 38 | 39 | 40 | } 41 | -------------------------------------------------------------------------------- /adi_lib/adi-nop/src/main/java/com/adi/ui/ADIFloatManager.kt: -------------------------------------------------------------------------------- 1 | package com.adi.ui 2 | 3 | import android.annotation.TargetApi 4 | import android.app.Activity 5 | import android.os.Build 6 | 7 | 8 | /** 9 | * @author zhoukewen 10 | * @since 2019-09-12 11 | */ 12 | object ADIFloatManager { 13 | 14 | @TargetApi(Build.VERSION_CODES.M) 15 | fun showADIFloat(activity: Activity) { 16 | // no-op 17 | } 18 | 19 | } -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/arm64-v8a/.ninja_deps: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_lib/adi/.externalNativeBuild/cmake/debug/arm64-v8a/.ninja_deps -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/arm64-v8a/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_C.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_lib/adi/.externalNativeBuild/cmake/debug/arm64-v8a/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_C.bin -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/arm64-v8a/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_CXX.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_lib/adi/.externalNativeBuild/cmake/debug/arm64-v8a/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_CXX.bin -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/arm64-v8a/CMakeFiles/3.10.2/CMakeSystem.cmake: -------------------------------------------------------------------------------- 1 | set(CMAKE_HOST_SYSTEM "Darwin-18.2.0") 2 | set(CMAKE_HOST_SYSTEM_NAME "Darwin") 3 | set(CMAKE_HOST_SYSTEM_VERSION "18.2.0") 4 | set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") 5 | 6 | include("/Users/kewen/Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake") 7 | 8 | set(CMAKE_SYSTEM "Android-1") 9 | set(CMAKE_SYSTEM_NAME "Android") 10 | set(CMAKE_SYSTEM_VERSION "1") 11 | set(CMAKE_SYSTEM_PROCESSOR "aarch64") 12 | 13 | set(CMAKE_CROSSCOMPILING "TRUE") 14 | 15 | set(CMAKE_SYSTEM_LOADED 1) 16 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/arm64-v8a/CMakeFiles/TargetDirectories.txt: -------------------------------------------------------------------------------- 1 | /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/debug/arm64-v8a/CMakeFiles/rebuild_cache.dir 2 | /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/debug/arm64-v8a/CMakeFiles/edit_cache.dir 3 | /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/debug/arm64-v8a/CMakeFiles/adi_agent.dir 4 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/arm64-v8a/CMakeFiles/cmake.check_cache: -------------------------------------------------------------------------------- 1 | # This file is generated by cmake for dependency checking of the CMakeCache.txt file 2 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/arm64-v8a/CMakeFiles/feature_tests.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_lib/adi/.externalNativeBuild/cmake/debug/arm64-v8a/CMakeFiles/feature_tests.bin -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/arm64-v8a/CMakeFiles/feature_tests.c: -------------------------------------------------------------------------------- 1 | 2 | const char features[] = {"\n" 3 | "C_FEATURE:" 4 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 5 | "1" 6 | #else 7 | "0" 8 | #endif 9 | "c_function_prototypes\n" 10 | "C_FEATURE:" 11 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L 12 | "1" 13 | #else 14 | "0" 15 | #endif 16 | "c_restrict\n" 17 | "C_FEATURE:" 18 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L 19 | "1" 20 | #else 21 | "0" 22 | #endif 23 | "c_static_assert\n" 24 | "C_FEATURE:" 25 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L 26 | "1" 27 | #else 28 | "0" 29 | #endif 30 | "c_variadic_macros\n" 31 | 32 | }; 33 | 34 | int main(int argc, char** argv) { (void)argv; return features[argc]; } 35 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/arm64-v8a/android_gradle_build_mini.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildFiles": [ 3 | "/Users/kewen/my_project/ADI/adilib/../../../Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake", 4 | "/Users/kewen/my_project/ADI/adilib/CMakeLists.txt", 5 | "/Users/kewen/my_project/ADI/adilib/../../../Library/Android/sdk/ndk-bundle/build/cmake/platforms.cmake" 6 | ], 7 | "cleanCommands": [ 8 | "/Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/cmake --build /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/debug/arm64-v8a --target clean" 9 | ], 10 | "libraries": { 11 | "adi_agent-Debug-arm64-v8a": { 12 | "artifactName": "adi_agent", 13 | "buildCommand": "/Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/cmake --build /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/debug/arm64-v8a --target adi_agent", 14 | "abi": "arm64-v8a", 15 | "output": "/Users/kewen/my_project/ADI/adilib/build/intermediates/cmake/debug/obj/arm64-v8a/libadi_agent.so" 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/arm64-v8a/cmake_build_command.txt: -------------------------------------------------------------------------------- 1 | Executable : /Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/cmake 2 | arguments : 3 | -H/Users/kewen/my_project/ADI/adilib 4 | -B/Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/debug/arm64-v8a 5 | -DANDROID_ABI=arm64-v8a 6 | -DANDROID_PLATFORM=android-26 7 | -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/Users/kewen/my_project/ADI/adilib/build/intermediates/cmake/debug/obj/arm64-v8a 8 | -DCMAKE_BUILD_TYPE=Debug 9 | -DANDROID_NDK=/Users/kewen/Library/Android/sdk/ndk-bundle 10 | -DCMAKE_CXX_FLAGS=-std=c++11 -frtti -fexceptions 11 | -DCMAKE_SYSTEM_NAME=Android 12 | -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a 13 | -DCMAKE_SYSTEM_VERSION=26 14 | -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 15 | -DCMAKE_ANDROID_NDK=/Users/kewen/Library/Android/sdk/ndk-bundle 16 | -DCMAKE_TOOLCHAIN_FILE=/Users/kewen/Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake 17 | -G Ninja 18 | -DCMAKE_MAKE_PROGRAM=/Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/ninja 19 | jvmArgs : 20 | 21 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/arm64-v8a/cmake_build_output.txt: -------------------------------------------------------------------------------- 1 | Configuring done 2 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/arm64-v8a/cmake_install.cmake: -------------------------------------------------------------------------------- 1 | # Install script for directory: /Users/kewen/my_project/ADI/adilib 2 | 3 | # Set the install prefix 4 | if(NOT DEFINED CMAKE_INSTALL_PREFIX) 5 | set(CMAKE_INSTALL_PREFIX "/usr/local") 6 | endif() 7 | string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") 8 | 9 | # Set the install configuration name. 10 | if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) 11 | if(BUILD_TYPE) 12 | string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" 13 | CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") 14 | else() 15 | set(CMAKE_INSTALL_CONFIG_NAME "Debug") 16 | endif() 17 | message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") 18 | endif() 19 | 20 | # Set the component getting installed. 21 | if(NOT CMAKE_INSTALL_COMPONENT) 22 | if(COMPONENT) 23 | message(STATUS "Install component: \"${COMPONENT}\"") 24 | set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") 25 | else() 26 | set(CMAKE_INSTALL_COMPONENT) 27 | endif() 28 | endif() 29 | 30 | # Install shared libraries without execute permission? 31 | if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) 32 | set(CMAKE_INSTALL_SO_NO_EXE "0") 33 | endif() 34 | 35 | # Is this installation the result of a crosscompile? 36 | if(NOT DEFINED CMAKE_CROSSCOMPILING) 37 | set(CMAKE_CROSSCOMPILING "TRUE") 38 | endif() 39 | 40 | if(CMAKE_INSTALL_COMPONENT) 41 | set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") 42 | else() 43 | set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") 44 | endif() 45 | 46 | string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT 47 | "${CMAKE_INSTALL_MANIFEST_FILES}") 48 | file(WRITE "/Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/debug/arm64-v8a/${CMAKE_INSTALL_MANIFEST}" 49 | "${CMAKE_INSTALL_MANIFEST_CONTENT}") 50 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/armeabi-v7a/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_C.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_lib/adi/.externalNativeBuild/cmake/debug/armeabi-v7a/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_C.bin -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/armeabi-v7a/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_CXX.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_lib/adi/.externalNativeBuild/cmake/debug/armeabi-v7a/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_CXX.bin -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/armeabi-v7a/CMakeFiles/3.10.2/CMakeSystem.cmake: -------------------------------------------------------------------------------- 1 | set(CMAKE_HOST_SYSTEM "Darwin-18.2.0") 2 | set(CMAKE_HOST_SYSTEM_NAME "Darwin") 3 | set(CMAKE_HOST_SYSTEM_VERSION "18.2.0") 4 | set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") 5 | 6 | include("/Users/kewen/Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake") 7 | 8 | set(CMAKE_SYSTEM "Android-1") 9 | set(CMAKE_SYSTEM_NAME "Android") 10 | set(CMAKE_SYSTEM_VERSION "1") 11 | set(CMAKE_SYSTEM_PROCESSOR "armv7-a") 12 | 13 | set(CMAKE_CROSSCOMPILING "TRUE") 14 | 15 | set(CMAKE_SYSTEM_LOADED 1) 16 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/armeabi-v7a/CMakeFiles/TargetDirectories.txt: -------------------------------------------------------------------------------- 1 | /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/debug/armeabi-v7a/CMakeFiles/rebuild_cache.dir 2 | /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/debug/armeabi-v7a/CMakeFiles/edit_cache.dir 3 | /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/debug/armeabi-v7a/CMakeFiles/adi_agent.dir 4 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/armeabi-v7a/CMakeFiles/cmake.check_cache: -------------------------------------------------------------------------------- 1 | # This file is generated by cmake for dependency checking of the CMakeCache.txt file 2 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/armeabi-v7a/CMakeFiles/feature_tests.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_lib/adi/.externalNativeBuild/cmake/debug/armeabi-v7a/CMakeFiles/feature_tests.bin -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/armeabi-v7a/CMakeFiles/feature_tests.c: -------------------------------------------------------------------------------- 1 | 2 | const char features[] = {"\n" 3 | "C_FEATURE:" 4 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 5 | "1" 6 | #else 7 | "0" 8 | #endif 9 | "c_function_prototypes\n" 10 | "C_FEATURE:" 11 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L 12 | "1" 13 | #else 14 | "0" 15 | #endif 16 | "c_restrict\n" 17 | "C_FEATURE:" 18 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L 19 | "1" 20 | #else 21 | "0" 22 | #endif 23 | "c_static_assert\n" 24 | "C_FEATURE:" 25 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L 26 | "1" 27 | #else 28 | "0" 29 | #endif 30 | "c_variadic_macros\n" 31 | 32 | }; 33 | 34 | int main(int argc, char** argv) { (void)argv; return features[argc]; } 35 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/armeabi-v7a/android_gradle_build_mini.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildFiles": [ 3 | "/Users/kewen/my_project/ADI/adilib/../../../Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake", 4 | "/Users/kewen/my_project/ADI/adilib/CMakeLists.txt", 5 | "/Users/kewen/my_project/ADI/adilib/../../../Library/Android/sdk/ndk-bundle/build/cmake/platforms.cmake" 6 | ], 7 | "cleanCommands": [ 8 | "/Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/cmake --build /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/debug/armeabi-v7a --target clean" 9 | ], 10 | "libraries": { 11 | "adi_agent-Debug-armeabi-v7a": { 12 | "artifactName": "adi_agent", 13 | "buildCommand": "/Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/cmake --build /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/debug/armeabi-v7a --target adi_agent", 14 | "abi": "armeabi-v7a", 15 | "output": "/Users/kewen/my_project/ADI/adilib/build/intermediates/cmake/debug/obj/armeabi-v7a/libadi_agent.so" 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/armeabi-v7a/cmake_build_command.txt: -------------------------------------------------------------------------------- 1 | Executable : /Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/cmake 2 | arguments : 3 | -H/Users/kewen/my_project/ADI/adilib 4 | -B/Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/debug/armeabi-v7a 5 | -DANDROID_ABI=armeabi-v7a 6 | -DANDROID_PLATFORM=android-26 7 | -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/Users/kewen/my_project/ADI/adilib/build/intermediates/cmake/debug/obj/armeabi-v7a 8 | -DCMAKE_BUILD_TYPE=Debug 9 | -DANDROID_NDK=/Users/kewen/Library/Android/sdk/ndk-bundle 10 | -DCMAKE_CXX_FLAGS=-std=c++11 -frtti -fexceptions 11 | -DCMAKE_SYSTEM_NAME=Android 12 | -DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a 13 | -DCMAKE_SYSTEM_VERSION=26 14 | -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 15 | -DCMAKE_ANDROID_NDK=/Users/kewen/Library/Android/sdk/ndk-bundle 16 | -DCMAKE_TOOLCHAIN_FILE=/Users/kewen/Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake 17 | -G Ninja 18 | -DCMAKE_MAKE_PROGRAM=/Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/ninja 19 | jvmArgs : 20 | 21 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/armeabi-v7a/cmake_build_output.txt: -------------------------------------------------------------------------------- 1 | Check for working C compiler: /Users/kewen/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang 2 | Check for working C compiler: /Users/kewen/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang -- works 3 | Detecting C compiler ABI info 4 | Detecting C compiler ABI info - done 5 | Detecting C compile features 6 | Detecting C compile features - done 7 | Check for working CXX compiler: /Users/kewen/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ 8 | Check for working CXX compiler: /Users/kewen/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ -- works 9 | Detecting CXX compiler ABI info 10 | Detecting CXX compiler ABI info - done 11 | Detecting CXX compile features 12 | Detecting CXX compile features - done 13 | Configuring done 14 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/armeabi-v7a/cmake_install.cmake: -------------------------------------------------------------------------------- 1 | # Install script for directory: /Users/kewen/my_project/ADI/adilib 2 | 3 | # Set the install prefix 4 | if(NOT DEFINED CMAKE_INSTALL_PREFIX) 5 | set(CMAKE_INSTALL_PREFIX "/usr/local") 6 | endif() 7 | string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") 8 | 9 | # Set the install configuration name. 10 | if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) 11 | if(BUILD_TYPE) 12 | string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" 13 | CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") 14 | else() 15 | set(CMAKE_INSTALL_CONFIG_NAME "Debug") 16 | endif() 17 | message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") 18 | endif() 19 | 20 | # Set the component getting installed. 21 | if(NOT CMAKE_INSTALL_COMPONENT) 22 | if(COMPONENT) 23 | message(STATUS "Install component: \"${COMPONENT}\"") 24 | set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") 25 | else() 26 | set(CMAKE_INSTALL_COMPONENT) 27 | endif() 28 | endif() 29 | 30 | # Install shared libraries without execute permission? 31 | if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) 32 | set(CMAKE_INSTALL_SO_NO_EXE "0") 33 | endif() 34 | 35 | # Is this installation the result of a crosscompile? 36 | if(NOT DEFINED CMAKE_CROSSCOMPILING) 37 | set(CMAKE_CROSSCOMPILING "TRUE") 38 | endif() 39 | 40 | if(CMAKE_INSTALL_COMPONENT) 41 | set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") 42 | else() 43 | set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") 44 | endif() 45 | 46 | string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT 47 | "${CMAKE_INSTALL_MANIFEST_FILES}") 48 | file(WRITE "/Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/debug/armeabi-v7a/${CMAKE_INSTALL_MANIFEST}" 49 | "${CMAKE_INSTALL_MANIFEST_CONTENT}") 50 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/x86/.ninja_deps: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_lib/adi/.externalNativeBuild/cmake/debug/x86/.ninja_deps -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/x86/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_C.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_lib/adi/.externalNativeBuild/cmake/debug/x86/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_C.bin -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/x86/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_CXX.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_lib/adi/.externalNativeBuild/cmake/debug/x86/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_CXX.bin -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/x86/CMakeFiles/3.10.2/CMakeSystem.cmake: -------------------------------------------------------------------------------- 1 | set(CMAKE_HOST_SYSTEM "Darwin-18.2.0") 2 | set(CMAKE_HOST_SYSTEM_NAME "Darwin") 3 | set(CMAKE_HOST_SYSTEM_VERSION "18.2.0") 4 | set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") 5 | 6 | include("/Users/kewen/Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake") 7 | 8 | set(CMAKE_SYSTEM "Android-1") 9 | set(CMAKE_SYSTEM_NAME "Android") 10 | set(CMAKE_SYSTEM_VERSION "1") 11 | set(CMAKE_SYSTEM_PROCESSOR "i686") 12 | 13 | set(CMAKE_CROSSCOMPILING "TRUE") 14 | 15 | set(CMAKE_SYSTEM_LOADED 1) 16 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/x86/CMakeFiles/TargetDirectories.txt: -------------------------------------------------------------------------------- 1 | /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/debug/x86/CMakeFiles/rebuild_cache.dir 2 | /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/debug/x86/CMakeFiles/edit_cache.dir 3 | /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/debug/x86/CMakeFiles/adi_agent.dir 4 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/x86/CMakeFiles/cmake.check_cache: -------------------------------------------------------------------------------- 1 | # This file is generated by cmake for dependency checking of the CMakeCache.txt file 2 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/x86/CMakeFiles/feature_tests.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_lib/adi/.externalNativeBuild/cmake/debug/x86/CMakeFiles/feature_tests.bin -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/x86/CMakeFiles/feature_tests.c: -------------------------------------------------------------------------------- 1 | 2 | const char features[] = {"\n" 3 | "C_FEATURE:" 4 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 5 | "1" 6 | #else 7 | "0" 8 | #endif 9 | "c_function_prototypes\n" 10 | "C_FEATURE:" 11 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L 12 | "1" 13 | #else 14 | "0" 15 | #endif 16 | "c_restrict\n" 17 | "C_FEATURE:" 18 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L 19 | "1" 20 | #else 21 | "0" 22 | #endif 23 | "c_static_assert\n" 24 | "C_FEATURE:" 25 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L 26 | "1" 27 | #else 28 | "0" 29 | #endif 30 | "c_variadic_macros\n" 31 | 32 | }; 33 | 34 | int main(int argc, char** argv) { (void)argv; return features[argc]; } 35 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/x86/android_gradle_build_mini.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildFiles": [ 3 | "/Users/kewen/my_project/ADI/adilib/../../../Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake", 4 | "/Users/kewen/my_project/ADI/adilib/CMakeLists.txt", 5 | "/Users/kewen/my_project/ADI/adilib/../../../Library/Android/sdk/ndk-bundle/build/cmake/platforms.cmake" 6 | ], 7 | "cleanCommands": [ 8 | "/Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/cmake --build /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/debug/x86 --target clean" 9 | ], 10 | "libraries": { 11 | "adi_agent-Debug-x86": { 12 | "artifactName": "adi_agent", 13 | "buildCommand": "/Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/cmake --build /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/debug/x86 --target adi_agent", 14 | "abi": "x86", 15 | "output": "/Users/kewen/my_project/ADI/adilib/build/intermediates/cmake/debug/obj/x86/libadi_agent.so" 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/x86/cmake_build_command.txt: -------------------------------------------------------------------------------- 1 | Executable : /Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/cmake 2 | arguments : 3 | -H/Users/kewen/my_project/ADI/adilib 4 | -B/Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/debug/x86 5 | -DANDROID_ABI=x86 6 | -DANDROID_PLATFORM=android-26 7 | -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/Users/kewen/my_project/ADI/adilib/build/intermediates/cmake/debug/obj/x86 8 | -DCMAKE_BUILD_TYPE=Debug 9 | -DANDROID_NDK=/Users/kewen/Library/Android/sdk/ndk-bundle 10 | -DCMAKE_CXX_FLAGS=-std=c++11 -frtti -fexceptions 11 | -DCMAKE_SYSTEM_NAME=Android 12 | -DCMAKE_ANDROID_ARCH_ABI=x86 13 | -DCMAKE_SYSTEM_VERSION=26 14 | -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 15 | -DCMAKE_ANDROID_NDK=/Users/kewen/Library/Android/sdk/ndk-bundle 16 | -DCMAKE_TOOLCHAIN_FILE=/Users/kewen/Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake 17 | -G Ninja 18 | -DCMAKE_MAKE_PROGRAM=/Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/ninja 19 | jvmArgs : 20 | 21 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/x86/cmake_build_output.txt: -------------------------------------------------------------------------------- 1 | Configuring done 2 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/debug/x86/cmake_install.cmake: -------------------------------------------------------------------------------- 1 | # Install script for directory: /Users/kewen/my_project/ADI/adilib 2 | 3 | # Set the install prefix 4 | if(NOT DEFINED CMAKE_INSTALL_PREFIX) 5 | set(CMAKE_INSTALL_PREFIX "/usr/local") 6 | endif() 7 | string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") 8 | 9 | # Set the install configuration name. 10 | if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) 11 | if(BUILD_TYPE) 12 | string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" 13 | CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") 14 | else() 15 | set(CMAKE_INSTALL_CONFIG_NAME "Debug") 16 | endif() 17 | message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") 18 | endif() 19 | 20 | # Set the component getting installed. 21 | if(NOT CMAKE_INSTALL_COMPONENT) 22 | if(COMPONENT) 23 | message(STATUS "Install component: \"${COMPONENT}\"") 24 | set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") 25 | else() 26 | set(CMAKE_INSTALL_COMPONENT) 27 | endif() 28 | endif() 29 | 30 | # Install shared libraries without execute permission? 31 | if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) 32 | set(CMAKE_INSTALL_SO_NO_EXE "0") 33 | endif() 34 | 35 | # Is this installation the result of a crosscompile? 36 | if(NOT DEFINED CMAKE_CROSSCOMPILING) 37 | set(CMAKE_CROSSCOMPILING "TRUE") 38 | endif() 39 | 40 | if(CMAKE_INSTALL_COMPONENT) 41 | set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") 42 | else() 43 | set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") 44 | endif() 45 | 46 | string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT 47 | "${CMAKE_INSTALL_MANIFEST_FILES}") 48 | file(WRITE "/Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/debug/x86/${CMAKE_INSTALL_MANIFEST}" 49 | "${CMAKE_INSTALL_MANIFEST_CONTENT}") 50 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/arm64-v8a/.ninja_deps: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_lib/adi/.externalNativeBuild/cmake/release/arm64-v8a/.ninja_deps -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/arm64-v8a/.ninja_log: -------------------------------------------------------------------------------- 1 | # ninja log v5 2 | 1 103 1568105534 CMakeFiles/adi_agent.dir/src/main/cpp/clooper/looper_test.c.o 36746cff5ff56e94 3 | 2 127 1568105534 CMakeFiles/adi_agent.dir/src/main/cpp/handler/Config.cpp.o f4fd4bc11211dca9 4 | 2 128 1568105534 CMakeFiles/adi_agent.dir/src/main/cpp/handler/ObjectFreeHandler.cpp.o 1f877f2f26ae624e 5 | 1 132 1568105534 CMakeFiles/adi_agent.dir/src/main/cpp/dumper.c.o 29ede5bff8c08c26 6 | 3 155 1568105534 CMakeFiles/adi_agent.dir/src/main/cpp/handler/ThreadStartHandler.cpp.o b7f993bc9e10a882 7 | 2 156 1568105534 CMakeFiles/adi_agent.dir/src/main/cpp/handler/GCCallbackHandler.cpp.o e7f98e28aa4859c4 8 | 1 160 1568105534 CMakeFiles/adi_agent.dir/src/main/cpp/clooper/looper.c.o be59a9e9cbbcf7c0 9 | 127 183 1568105534 CMakeFiles/adi_agent.dir/src/main/cpp/common/utils.c.o 225937863df091a4 10 | 104 236 1568105534 CMakeFiles/adi_agent.dir/src/main/cpp/common/jdi_native.cpp.o e097c19a5799e3d0 11 | 2 556 1568105534 CMakeFiles/adi_agent.dir/src/main/cpp/handler/MethodEntryHandler.cpp.o 5b787ca257065416 12 | 4 565 1568105534 CMakeFiles/adi_agent.dir/src/main/cpp/handler/VMObjectAllocHandler.cpp.o 7d4cf7a11195c8b9 13 | 1 602 1568105534 CMakeFiles/adi_agent.dir/src/main/cpp/adi.cpp.o d8bae1655bd5dd80 14 | 602 668 1568105535 ../../../../build/intermediates/cmake/release/obj/arm64-v8a/libadi_agent.so 8f361f0c48f3c787 15 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/arm64-v8a/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_C.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_lib/adi/.externalNativeBuild/cmake/release/arm64-v8a/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_C.bin -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/arm64-v8a/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_CXX.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_lib/adi/.externalNativeBuild/cmake/release/arm64-v8a/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_CXX.bin -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/arm64-v8a/CMakeFiles/3.10.2/CMakeSystem.cmake: -------------------------------------------------------------------------------- 1 | set(CMAKE_HOST_SYSTEM "Darwin-18.2.0") 2 | set(CMAKE_HOST_SYSTEM_NAME "Darwin") 3 | set(CMAKE_HOST_SYSTEM_VERSION "18.2.0") 4 | set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") 5 | 6 | include("/Users/kewen/Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake") 7 | 8 | set(CMAKE_SYSTEM "Android-1") 9 | set(CMAKE_SYSTEM_NAME "Android") 10 | set(CMAKE_SYSTEM_VERSION "1") 11 | set(CMAKE_SYSTEM_PROCESSOR "aarch64") 12 | 13 | set(CMAKE_CROSSCOMPILING "TRUE") 14 | 15 | set(CMAKE_SYSTEM_LOADED 1) 16 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/arm64-v8a/CMakeFiles/TargetDirectories.txt: -------------------------------------------------------------------------------- 1 | /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/release/arm64-v8a/CMakeFiles/rebuild_cache.dir 2 | /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/release/arm64-v8a/CMakeFiles/edit_cache.dir 3 | /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/release/arm64-v8a/CMakeFiles/adi_agent.dir 4 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/arm64-v8a/CMakeFiles/cmake.check_cache: -------------------------------------------------------------------------------- 1 | # This file is generated by cmake for dependency checking of the CMakeCache.txt file 2 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/arm64-v8a/CMakeFiles/feature_tests.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_lib/adi/.externalNativeBuild/cmake/release/arm64-v8a/CMakeFiles/feature_tests.bin -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/arm64-v8a/CMakeFiles/feature_tests.c: -------------------------------------------------------------------------------- 1 | 2 | const char features[] = {"\n" 3 | "C_FEATURE:" 4 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 5 | "1" 6 | #else 7 | "0" 8 | #endif 9 | "c_function_prototypes\n" 10 | "C_FEATURE:" 11 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L 12 | "1" 13 | #else 14 | "0" 15 | #endif 16 | "c_restrict\n" 17 | "C_FEATURE:" 18 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L 19 | "1" 20 | #else 21 | "0" 22 | #endif 23 | "c_static_assert\n" 24 | "C_FEATURE:" 25 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L 26 | "1" 27 | #else 28 | "0" 29 | #endif 30 | "c_variadic_macros\n" 31 | 32 | }; 33 | 34 | int main(int argc, char** argv) { (void)argv; return features[argc]; } 35 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/arm64-v8a/android_gradle_build_mini.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildFiles": [ 3 | "/Users/kewen/my_project/ADI/adilib/../../../Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake", 4 | "/Users/kewen/my_project/ADI/adilib/CMakeLists.txt", 5 | "/Users/kewen/my_project/ADI/adilib/../../../Library/Android/sdk/ndk-bundle/build/cmake/platforms.cmake" 6 | ], 7 | "cleanCommands": [ 8 | "/Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/cmake --build /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/release/arm64-v8a --target clean" 9 | ], 10 | "libraries": { 11 | "adi_agent-Release-arm64-v8a": { 12 | "artifactName": "adi_agent", 13 | "buildCommand": "/Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/cmake --build /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/release/arm64-v8a --target adi_agent", 14 | "abi": "arm64-v8a", 15 | "output": "/Users/kewen/my_project/ADI/adilib/build/intermediates/cmake/release/obj/arm64-v8a/libadi_agent.so" 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/arm64-v8a/cmake_build_command.txt: -------------------------------------------------------------------------------- 1 | Executable : /Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/cmake 2 | arguments : 3 | -H/Users/kewen/my_project/ADI/adilib 4 | -B/Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/release/arm64-v8a 5 | -DANDROID_ABI=arm64-v8a 6 | -DANDROID_PLATFORM=android-26 7 | -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/Users/kewen/my_project/ADI/adilib/build/intermediates/cmake/release/obj/arm64-v8a 8 | -DCMAKE_BUILD_TYPE=Release 9 | -DANDROID_NDK=/Users/kewen/Library/Android/sdk/ndk-bundle 10 | -DCMAKE_CXX_FLAGS=-std=c++11 -frtti -fexceptions 11 | -DCMAKE_SYSTEM_NAME=Android 12 | -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a 13 | -DCMAKE_SYSTEM_VERSION=26 14 | -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 15 | -DCMAKE_ANDROID_NDK=/Users/kewen/Library/Android/sdk/ndk-bundle 16 | -DCMAKE_TOOLCHAIN_FILE=/Users/kewen/Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake 17 | -G Ninja 18 | -DCMAKE_MAKE_PROGRAM=/Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/ninja 19 | jvmArgs : 20 | 21 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/arm64-v8a/cmake_build_output.txt: -------------------------------------------------------------------------------- 1 | Configuring done 2 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/arm64-v8a/cmake_install.cmake: -------------------------------------------------------------------------------- 1 | # Install script for directory: /Users/kewen/my_project/ADI/adilib 2 | 3 | # Set the install prefix 4 | if(NOT DEFINED CMAKE_INSTALL_PREFIX) 5 | set(CMAKE_INSTALL_PREFIX "/usr/local") 6 | endif() 7 | string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") 8 | 9 | # Set the install configuration name. 10 | if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) 11 | if(BUILD_TYPE) 12 | string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" 13 | CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") 14 | else() 15 | set(CMAKE_INSTALL_CONFIG_NAME "Release") 16 | endif() 17 | message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") 18 | endif() 19 | 20 | # Set the component getting installed. 21 | if(NOT CMAKE_INSTALL_COMPONENT) 22 | if(COMPONENT) 23 | message(STATUS "Install component: \"${COMPONENT}\"") 24 | set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") 25 | else() 26 | set(CMAKE_INSTALL_COMPONENT) 27 | endif() 28 | endif() 29 | 30 | # Install shared libraries without execute permission? 31 | if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) 32 | set(CMAKE_INSTALL_SO_NO_EXE "0") 33 | endif() 34 | 35 | # Is this installation the result of a crosscompile? 36 | if(NOT DEFINED CMAKE_CROSSCOMPILING) 37 | set(CMAKE_CROSSCOMPILING "TRUE") 38 | endif() 39 | 40 | if(CMAKE_INSTALL_COMPONENT) 41 | set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") 42 | else() 43 | set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") 44 | endif() 45 | 46 | string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT 47 | "${CMAKE_INSTALL_MANIFEST_FILES}") 48 | file(WRITE "/Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/release/arm64-v8a/${CMAKE_INSTALL_MANIFEST}" 49 | "${CMAKE_INSTALL_MANIFEST_CONTENT}") 50 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/armeabi-v7a/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_C.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_lib/adi/.externalNativeBuild/cmake/release/armeabi-v7a/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_C.bin -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/armeabi-v7a/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_CXX.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_lib/adi/.externalNativeBuild/cmake/release/armeabi-v7a/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_CXX.bin -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/armeabi-v7a/CMakeFiles/3.10.2/CMakeSystem.cmake: -------------------------------------------------------------------------------- 1 | set(CMAKE_HOST_SYSTEM "Darwin-18.2.0") 2 | set(CMAKE_HOST_SYSTEM_NAME "Darwin") 3 | set(CMAKE_HOST_SYSTEM_VERSION "18.2.0") 4 | set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") 5 | 6 | include("/Users/kewen/Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake") 7 | 8 | set(CMAKE_SYSTEM "Android-1") 9 | set(CMAKE_SYSTEM_NAME "Android") 10 | set(CMAKE_SYSTEM_VERSION "1") 11 | set(CMAKE_SYSTEM_PROCESSOR "armv7-a") 12 | 13 | set(CMAKE_CROSSCOMPILING "TRUE") 14 | 15 | set(CMAKE_SYSTEM_LOADED 1) 16 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/armeabi-v7a/CMakeFiles/TargetDirectories.txt: -------------------------------------------------------------------------------- 1 | /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/release/armeabi-v7a/CMakeFiles/rebuild_cache.dir 2 | /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/release/armeabi-v7a/CMakeFiles/edit_cache.dir 3 | /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/release/armeabi-v7a/CMakeFiles/adi_agent.dir 4 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/armeabi-v7a/CMakeFiles/cmake.check_cache: -------------------------------------------------------------------------------- 1 | # This file is generated by cmake for dependency checking of the CMakeCache.txt file 2 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/armeabi-v7a/CMakeFiles/feature_tests.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_lib/adi/.externalNativeBuild/cmake/release/armeabi-v7a/CMakeFiles/feature_tests.bin -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/armeabi-v7a/CMakeFiles/feature_tests.c: -------------------------------------------------------------------------------- 1 | 2 | const char features[] = {"\n" 3 | "C_FEATURE:" 4 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 5 | "1" 6 | #else 7 | "0" 8 | #endif 9 | "c_function_prototypes\n" 10 | "C_FEATURE:" 11 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L 12 | "1" 13 | #else 14 | "0" 15 | #endif 16 | "c_restrict\n" 17 | "C_FEATURE:" 18 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L 19 | "1" 20 | #else 21 | "0" 22 | #endif 23 | "c_static_assert\n" 24 | "C_FEATURE:" 25 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L 26 | "1" 27 | #else 28 | "0" 29 | #endif 30 | "c_variadic_macros\n" 31 | 32 | }; 33 | 34 | int main(int argc, char** argv) { (void)argv; return features[argc]; } 35 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/armeabi-v7a/android_gradle_build_mini.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildFiles": [ 3 | "/Users/kewen/my_project/ADI/adilib/../../../Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake", 4 | "/Users/kewen/my_project/ADI/adilib/CMakeLists.txt", 5 | "/Users/kewen/my_project/ADI/adilib/../../../Library/Android/sdk/ndk-bundle/build/cmake/platforms.cmake" 6 | ], 7 | "cleanCommands": [ 8 | "/Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/cmake --build /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/release/armeabi-v7a --target clean" 9 | ], 10 | "libraries": { 11 | "adi_agent-Release-armeabi-v7a": { 12 | "artifactName": "adi_agent", 13 | "buildCommand": "/Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/cmake --build /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/release/armeabi-v7a --target adi_agent", 14 | "abi": "armeabi-v7a", 15 | "output": "/Users/kewen/my_project/ADI/adilib/build/intermediates/cmake/release/obj/armeabi-v7a/libadi_agent.so" 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/armeabi-v7a/cmake_build_command.txt: -------------------------------------------------------------------------------- 1 | Executable : /Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/cmake 2 | arguments : 3 | -H/Users/kewen/my_project/ADI/adilib 4 | -B/Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/release/armeabi-v7a 5 | -DANDROID_ABI=armeabi-v7a 6 | -DANDROID_PLATFORM=android-26 7 | -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/Users/kewen/my_project/ADI/adilib/build/intermediates/cmake/release/obj/armeabi-v7a 8 | -DCMAKE_BUILD_TYPE=Release 9 | -DANDROID_NDK=/Users/kewen/Library/Android/sdk/ndk-bundle 10 | -DCMAKE_CXX_FLAGS=-std=c++11 -frtti -fexceptions 11 | -DCMAKE_SYSTEM_NAME=Android 12 | -DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a 13 | -DCMAKE_SYSTEM_VERSION=26 14 | -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 15 | -DCMAKE_ANDROID_NDK=/Users/kewen/Library/Android/sdk/ndk-bundle 16 | -DCMAKE_TOOLCHAIN_FILE=/Users/kewen/Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake 17 | -G Ninja 18 | -DCMAKE_MAKE_PROGRAM=/Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/ninja 19 | jvmArgs : 20 | 21 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/armeabi-v7a/cmake_build_output.txt: -------------------------------------------------------------------------------- 1 | Check for working C compiler: /Users/kewen/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang 2 | Check for working C compiler: /Users/kewen/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang -- works 3 | Detecting C compiler ABI info 4 | Detecting C compiler ABI info - done 5 | Detecting C compile features 6 | Detecting C compile features - done 7 | Check for working CXX compiler: /Users/kewen/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ 8 | Check for working CXX compiler: /Users/kewen/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ -- works 9 | Detecting CXX compiler ABI info 10 | Detecting CXX compiler ABI info - done 11 | Detecting CXX compile features 12 | Detecting CXX compile features - done 13 | Configuring done 14 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/armeabi-v7a/cmake_install.cmake: -------------------------------------------------------------------------------- 1 | # Install script for directory: /Users/kewen/my_project/ADI/adilib 2 | 3 | # Set the install prefix 4 | if(NOT DEFINED CMAKE_INSTALL_PREFIX) 5 | set(CMAKE_INSTALL_PREFIX "/usr/local") 6 | endif() 7 | string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") 8 | 9 | # Set the install configuration name. 10 | if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) 11 | if(BUILD_TYPE) 12 | string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" 13 | CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") 14 | else() 15 | set(CMAKE_INSTALL_CONFIG_NAME "Release") 16 | endif() 17 | message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") 18 | endif() 19 | 20 | # Set the component getting installed. 21 | if(NOT CMAKE_INSTALL_COMPONENT) 22 | if(COMPONENT) 23 | message(STATUS "Install component: \"${COMPONENT}\"") 24 | set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") 25 | else() 26 | set(CMAKE_INSTALL_COMPONENT) 27 | endif() 28 | endif() 29 | 30 | # Install shared libraries without execute permission? 31 | if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) 32 | set(CMAKE_INSTALL_SO_NO_EXE "0") 33 | endif() 34 | 35 | # Is this installation the result of a crosscompile? 36 | if(NOT DEFINED CMAKE_CROSSCOMPILING) 37 | set(CMAKE_CROSSCOMPILING "TRUE") 38 | endif() 39 | 40 | if(CMAKE_INSTALL_COMPONENT) 41 | set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") 42 | else() 43 | set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") 44 | endif() 45 | 46 | string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT 47 | "${CMAKE_INSTALL_MANIFEST_FILES}") 48 | file(WRITE "/Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/release/armeabi-v7a/${CMAKE_INSTALL_MANIFEST}" 49 | "${CMAKE_INSTALL_MANIFEST_CONTENT}") 50 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/x86/.ninja_deps: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_lib/adi/.externalNativeBuild/cmake/release/x86/.ninja_deps -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/x86/.ninja_log: -------------------------------------------------------------------------------- 1 | # ninja log v5 2 | 2 424 1568105533 CMakeFiles/adi_agent.dir/src/main/cpp/handler/Config.cpp.o 6e2438af38247f22 3 | 3 426 1568105533 CMakeFiles/adi_agent.dir/src/main/cpp/handler/GCCallbackHandler.cpp.o 18d50b5904d03b9f 4 | 3 428 1568105533 CMakeFiles/adi_agent.dir/src/main/cpp/handler/ObjectFreeHandler.cpp.o a07c4f4278d30296 5 | 4 429 1568105533 CMakeFiles/adi_agent.dir/src/main/cpp/handler/ThreadStartHandler.cpp.o a48b9f87dbce4bd2 6 | 1 436 1568105533 CMakeFiles/adi_agent.dir/src/main/cpp/clooper/looper_test.c.o 72de1061b714c75 7 | 1 446 1568105533 CMakeFiles/adi_agent.dir/src/main/cpp/dumper.c.o 4e35669e620a3359 8 | 1 454 1568105533 CMakeFiles/adi_agent.dir/src/main/cpp/clooper/looper.c.o c08ae915538a76b5 9 | 426 486 1568105533 CMakeFiles/adi_agent.dir/src/main/cpp/common/utils.c.o aa6fdbcb11487a7a 10 | 424 571 1568105533 CMakeFiles/adi_agent.dir/src/main/cpp/common/jdi_native.cpp.o efd28fc3419e661a 11 | 3 851 1568105534 CMakeFiles/adi_agent.dir/src/main/cpp/handler/MethodEntryHandler.cpp.o 13f1b4fd2e7df40c 12 | 4 863 1568105534 CMakeFiles/adi_agent.dir/src/main/cpp/handler/VMObjectAllocHandler.cpp.o d676a933887e4d21 13 | 0 904 1568105534 CMakeFiles/adi_agent.dir/src/main/cpp/adi.cpp.o d99b7198fe8ef66c 14 | 905 972 1568105534 ../../../../build/intermediates/cmake/release/obj/x86/libadi_agent.so 3ab2b86a5023ae3d 15 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/x86/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_C.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_lib/adi/.externalNativeBuild/cmake/release/x86/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_C.bin -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/x86/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_CXX.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_lib/adi/.externalNativeBuild/cmake/release/x86/CMakeFiles/3.10.2/CMakeDetermineCompilerABI_CXX.bin -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/x86/CMakeFiles/3.10.2/CMakeSystem.cmake: -------------------------------------------------------------------------------- 1 | set(CMAKE_HOST_SYSTEM "Darwin-18.2.0") 2 | set(CMAKE_HOST_SYSTEM_NAME "Darwin") 3 | set(CMAKE_HOST_SYSTEM_VERSION "18.2.0") 4 | set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") 5 | 6 | include("/Users/kewen/Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake") 7 | 8 | set(CMAKE_SYSTEM "Android-1") 9 | set(CMAKE_SYSTEM_NAME "Android") 10 | set(CMAKE_SYSTEM_VERSION "1") 11 | set(CMAKE_SYSTEM_PROCESSOR "i686") 12 | 13 | set(CMAKE_CROSSCOMPILING "TRUE") 14 | 15 | set(CMAKE_SYSTEM_LOADED 1) 16 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/x86/CMakeFiles/TargetDirectories.txt: -------------------------------------------------------------------------------- 1 | /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/release/x86/CMakeFiles/rebuild_cache.dir 2 | /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/release/x86/CMakeFiles/edit_cache.dir 3 | /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/release/x86/CMakeFiles/adi_agent.dir 4 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/x86/CMakeFiles/cmake.check_cache: -------------------------------------------------------------------------------- 1 | # This file is generated by cmake for dependency checking of the CMakeCache.txt file 2 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/x86/CMakeFiles/feature_tests.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkwlx/ADI/6ee2cea323e8124b3d56dc252cfe92fd0eae635b/adi_lib/adi/.externalNativeBuild/cmake/release/x86/CMakeFiles/feature_tests.bin -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/x86/CMakeFiles/feature_tests.c: -------------------------------------------------------------------------------- 1 | 2 | const char features[] = {"\n" 3 | "C_FEATURE:" 4 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 5 | "1" 6 | #else 7 | "0" 8 | #endif 9 | "c_function_prototypes\n" 10 | "C_FEATURE:" 11 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L 12 | "1" 13 | #else 14 | "0" 15 | #endif 16 | "c_restrict\n" 17 | "C_FEATURE:" 18 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L 19 | "1" 20 | #else 21 | "0" 22 | #endif 23 | "c_static_assert\n" 24 | "C_FEATURE:" 25 | #if ((__clang_major__ * 100) + __clang_minor__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L 26 | "1" 27 | #else 28 | "0" 29 | #endif 30 | "c_variadic_macros\n" 31 | 32 | }; 33 | 34 | int main(int argc, char** argv) { (void)argv; return features[argc]; } 35 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/x86/android_gradle_build_mini.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildFiles": [ 3 | "/Users/kewen/my_project/ADI/adilib/../../../Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake", 4 | "/Users/kewen/my_project/ADI/adilib/CMakeLists.txt", 5 | "/Users/kewen/my_project/ADI/adilib/../../../Library/Android/sdk/ndk-bundle/build/cmake/platforms.cmake" 6 | ], 7 | "cleanCommands": [ 8 | "/Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/cmake --build /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/release/x86 --target clean" 9 | ], 10 | "libraries": { 11 | "adi_agent-Release-x86": { 12 | "artifactName": "adi_agent", 13 | "buildCommand": "/Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/cmake --build /Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/release/x86 --target adi_agent", 14 | "abi": "x86", 15 | "output": "/Users/kewen/my_project/ADI/adilib/build/intermediates/cmake/release/obj/x86/libadi_agent.so" 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/x86/cmake_build_command.txt: -------------------------------------------------------------------------------- 1 | Executable : /Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/cmake 2 | arguments : 3 | -H/Users/kewen/my_project/ADI/adilib 4 | -B/Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/release/x86 5 | -DANDROID_ABI=x86 6 | -DANDROID_PLATFORM=android-26 7 | -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/Users/kewen/my_project/ADI/adilib/build/intermediates/cmake/release/obj/x86 8 | -DCMAKE_BUILD_TYPE=Release 9 | -DANDROID_NDK=/Users/kewen/Library/Android/sdk/ndk-bundle 10 | -DCMAKE_CXX_FLAGS=-std=c++11 -frtti -fexceptions 11 | -DCMAKE_SYSTEM_NAME=Android 12 | -DCMAKE_ANDROID_ARCH_ABI=x86 13 | -DCMAKE_SYSTEM_VERSION=26 14 | -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 15 | -DCMAKE_ANDROID_NDK=/Users/kewen/Library/Android/sdk/ndk-bundle 16 | -DCMAKE_TOOLCHAIN_FILE=/Users/kewen/Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake 17 | -G Ninja 18 | -DCMAKE_MAKE_PROGRAM=/Users/kewen/Library/Android/sdk/cmake/3.10.2.4988404/bin/ninja 19 | jvmArgs : 20 | 21 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/x86/cmake_build_output.txt: -------------------------------------------------------------------------------- 1 | Configuring done 2 | -------------------------------------------------------------------------------- /adi_lib/adi/.externalNativeBuild/cmake/release/x86/cmake_install.cmake: -------------------------------------------------------------------------------- 1 | # Install script for directory: /Users/kewen/my_project/ADI/adilib 2 | 3 | # Set the install prefix 4 | if(NOT DEFINED CMAKE_INSTALL_PREFIX) 5 | set(CMAKE_INSTALL_PREFIX "/usr/local") 6 | endif() 7 | string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") 8 | 9 | # Set the install configuration name. 10 | if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) 11 | if(BUILD_TYPE) 12 | string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" 13 | CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") 14 | else() 15 | set(CMAKE_INSTALL_CONFIG_NAME "Release") 16 | endif() 17 | message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") 18 | endif() 19 | 20 | # Set the component getting installed. 21 | if(NOT CMAKE_INSTALL_COMPONENT) 22 | if(COMPONENT) 23 | message(STATUS "Install component: \"${COMPONENT}\"") 24 | set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") 25 | else() 26 | set(CMAKE_INSTALL_COMPONENT) 27 | endif() 28 | endif() 29 | 30 | # Install shared libraries without execute permission? 31 | if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) 32 | set(CMAKE_INSTALL_SO_NO_EXE "0") 33 | endif() 34 | 35 | # Is this installation the result of a crosscompile? 36 | if(NOT DEFINED CMAKE_CROSSCOMPILING) 37 | set(CMAKE_CROSSCOMPILING "TRUE") 38 | endif() 39 | 40 | if(CMAKE_INSTALL_COMPONENT) 41 | set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") 42 | else() 43 | set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") 44 | endif() 45 | 46 | string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT 47 | "${CMAKE_INSTALL_MANIFEST_FILES}") 48 | file(WRITE "/Users/kewen/my_project/ADI/adilib/.externalNativeBuild/cmake/release/x86/${CMAKE_INSTALL_MANIFEST}" 49 | "${CMAKE_INSTALL_MANIFEST_CONTENT}") 50 | -------------------------------------------------------------------------------- /adi_lib/adi/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | .DS_Store 3 | .cxx 4 | -------------------------------------------------------------------------------- /adi_lib/adi/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # For more information about using CMake with Android Studio, read the 2 | # documentation: https://d.android.com/studio/projects/add-native-code.html 3 | 4 | # Sets the minimum version of CMake required to build the native library. 5 | 6 | cmake_minimum_required(VERSION 3.4.1) 7 | 8 | # 将当前 "./src/main/cpp" 目录下的所有源文件保存到 "NATIVE_SRC" 中,然后在 add_library 方法调用。 9 | aux_source_directory(./src/main/cpp NATIVE_SRC) 10 | aux_source_directory(./src/main/cpp/clooper LOOPER_SRC) 11 | aux_source_directory(./src/main/cpp/handler HANDLER_SRC) 12 | aux_source_directory(src/main/cpp/common COMMON_SRC) 13 | 14 | # Creates and names a library, sets it as either STATIC 15 | # or SHARED, and provides the relative paths to its source code. 16 | # You can define multiple libraries, and CMake builds them for you. 17 | # Gradle automatically packages shared libraries with your APK. 18 | #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -frtti -Wall -Wno-unused-parameter -Wno-unused-variable -Wno-shift-count-overflow -Wno-error=non-virtual-dtor -Wno-sign-compare -Wno-switch -Wno-missing-braces") 19 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -frtti") 20 | 21 | # ---------- dex_slicer 依赖 22 | #aux_source_directory(src/main/cpp/dex_slicer DEX_SLICER_SRC) 23 | #add_library( 24 | # dex_slicer 25 | # STATIC 26 | # ${DEX_SLICER_SRC}) 27 | #include_directories(src/main/cpp/dex_slicer/export/) 28 | #target_link_libraries(dex_slicer z) 29 | 30 | add_library( # Sets the name of the library. 31 | adi_agent 32 | 33 | # Sets the library as a shared library. 34 | SHARED 35 | 36 | # Provides a relative path to your source file(s). 37 | ${NATIVE_SRC} 38 | ${LOOPER_SRC} 39 | ${HANDLER_SRC} 40 | ${COMMON_SRC} 41 | ) 42 | 43 | # Searches for a specified prebuilt library and stores the path as a 44 | # variable. Because CMake includes system libraries in the search path by 45 | # default, you only need to specify the name of the public NDK library 46 | # you want to add. CMake verifies that the library exists before 47 | # completing its build. 48 | 49 | find_library( # Sets the name of the path variable. 50 | log-lib 51 | 52 | # Specifies the name of the NDK library that 53 | # you want CMake to locate. 54 | log) 55 | 56 | # Specifies libraries CMake should link to your target library. You 57 | # can link multiple libraries, such as libraries you define in this 58 | # build script, prebuilt third-party libraries, or system libraries. 59 | target_link_libraries( 60 | # Specifies the target library. 61 | adi_agent 62 | # Links the target library to the log library 63 | # included in the NDK. 64 | ${log-lib}) -------------------------------------------------------------------------------- /adi_lib/adi/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /adi_lib/adi/src/androidTest/java/com/adi/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.adi; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | /** 13 | * Instrumented test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | @Test 20 | public void useAppContext() { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("com.adi.test", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/clooper/looper.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-08-16. 3 | // 4 | 5 | #ifndef ADI_LOOPER_H 6 | #define ADI_LOOPER_H 7 | 8 | #include 9 | 10 | #define MAX_MESSAGE_SIZE 1014 11 | #define MESSAGE_EXIT_LOOP -1 12 | #define LOOPER_IS_NULL -10 13 | #define LOOPER_START_SUCCESS 0 14 | #define LOOPER_START_REPEAT_ERROR -1 15 | #define LOOPER_START_THREAD_ERROR -2 16 | 17 | 18 | typedef struct message_t { 19 | int what; 20 | struct message_t *next; 21 | size_t data_size; 22 | void *data; 23 | } message_t; 24 | 25 | typedef struct { 26 | message_t *head; 27 | int size; 28 | } message_queue_t; 29 | 30 | typedef void (*CALLBACK_FUNC)(message_t *msg); 31 | 32 | typedef struct { 33 | volatile int is_looping; //退出线程循环标志 34 | pthread_t looper_thread; 35 | pthread_mutex_t queue_mutex; 36 | pthread_cond_t queue_cond; 37 | message_queue_t queue; 38 | CALLBACK_FUNC handler; //消息处理函数 39 | } message_looper_t; 40 | 41 | message_looper_t *looperCreate(CALLBACK_FUNC func); 42 | 43 | int looperStart(message_looper_t *looper); 44 | 45 | int looperStop(message_looper_t *looper); 46 | 47 | int looperDestroy(message_looper_t **looper); 48 | 49 | int looperPost(message_looper_t *looper, int what, const void *data, size_t size); 50 | 51 | #endif //ADI_LOOPER_H -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/clooper/looper_test.c: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-08-28. 3 | // 4 | 5 | #include 6 | #include "looper_test.h" 7 | #include "looper.h" 8 | #include "../common/log.h" 9 | 10 | #define LOG_TAG "looper_test" 11 | 12 | static message_looper_t *looper; 13 | 14 | static void _handle(message_t *msg) { 15 | ALOGI(" -----> %s", (char *) msg->data); 16 | } 17 | 18 | void test_looper_start() { 19 | looper = looperCreate(_handle); 20 | if (looper == NULL) { 21 | ALOGI("looperCreate fail!!!!!!!!!"); 22 | return; 23 | } 24 | 25 | if (looperStart(looper) == LOOPER_START_THREAD_ERROR) { 26 | ALOGI("looperStart thread create fail!!!!!!!!!"); 27 | looperDestroy(&looper); 28 | return; 29 | } 30 | } 31 | 32 | void test_looper_destroy() { 33 | looperDestroy(&looper); 34 | } 35 | 36 | void test_looper_push(char *data) { 37 | looperPost(looper, 0, data, strlen(data) + 1); 38 | } -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/clooper/looper_test.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-08-28. 3 | // 4 | 5 | #ifndef ADI_LOOPER_TEST_H 6 | #define ADI_LOOPER_TEST_H 7 | 8 | void test_looper_start(); 9 | 10 | void test_looper_destroy(); 11 | 12 | void test_looper_push(char *data); 13 | 14 | #endif //ADI_LOOPER_TEST_H 15 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/common/jdi_native.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-08-30. 3 | // 4 | 5 | #ifndef ADI_JDI_NATIVE_H 6 | #define ADI_JDI_NATIVE_H 7 | 8 | #include 9 | #include "../jvmti.h" 10 | 11 | 12 | /** 13 | * 获取指定对象的大小。对象的大小与JVM的具体实现相关, 14 | * 是该对象所占用存储空间的近似值,可能会包含某些或所有对象的开销, 15 | * 因此对象大小的比较,只在某个JVM实现内有意义,在不同JVM实现之间没有比较意思。 16 | * 对象的大小,在单次调用期间,也可能会发生变化。 17 | */ 18 | extern "C" JNIEXPORT jlong JNICALL getObjectSize(JNIEnv *env, jclass jclazz, jobject obj); 19 | 20 | jvmtiEnv *getJvmtiEnv(JavaVM *vm); 21 | 22 | jvmtiEnv *getJvmtiEnvFromJNI(JNIEnv *env); 23 | 24 | JavaVM *getJavaVM(JNIEnv *env); 25 | 26 | char *createStackInfo(jvmtiEnv *jvmti, JNIEnv *env, jthread thread, int stackDepth); 27 | 28 | #endif //ADI_JDI_NATIVE_H 29 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/common/log.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-08-30. 3 | // 4 | 5 | #ifndef ADI_LOG_H 6 | #define ADI_LOG_H 7 | 8 | #include 9 | 10 | #define LOG_TAG "ADI" 11 | 12 | #define ALOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__) 13 | #define ALOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__) 14 | #define ALOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__) 15 | #define ALOGW(...) __android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__) 16 | #define ALOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__) 17 | 18 | #endif //ADI_LOG_H 19 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/common/utils.c: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-08-28. 3 | // 4 | 5 | #include "utils.h" 6 | 7 | #include 8 | #include "log.h" 9 | 10 | /** 11 | * 获取当前毫秒时间戳 12 | * @return 13 | */ 14 | int64_t currentTimeMillis() { 15 | struct timeval tv = {}; 16 | gettimeofday(&tv, NULL); 17 | int64_t factor = 1000; 18 | int64_t result = (int64_t) ((factor * tv.tv_sec) + (tv.tv_usec / 1000)); 19 | return result; 20 | } 21 | 22 | /** 23 | * 获取当前微秒时间戳 24 | * 1 ms = 1000 us 25 | * @return 26 | */ 27 | int64_t currentTimeMicro() { 28 | struct timeval tv = {}; 29 | gettimeofday(&tv, NULL); 30 | int64_t factor = 1000000; 31 | int64_t result = (int64_t) ((factor * tv.tv_sec) + tv.tv_usec); 32 | return result; 33 | } -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/common/utils.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-08-28. 3 | // 4 | 5 | #ifndef ADI_UTILS_H 6 | #define ADI_UTILS_H 7 | 8 | #define SEP_POWER "^^^" 9 | #define SEP_COMMA ",,," 10 | 11 | #include 12 | 13 | /** 14 | * 获取当前毫秒时间戳 15 | * @return 16 | */ 17 | int64_t currentTimeMillis(); 18 | 19 | /** 20 | * 获取当前微秒时间戳 21 | * 1 ms = 1000 us 22 | * @return 23 | */ 24 | int64_t currentTimeMicro(); 25 | 26 | #endif //ADI_UTILS_H 27 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/dumper.c: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-08-15. 3 | // 4 | 5 | #include "dumper.h" 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include "clooper/looper.h" 11 | #include 12 | #include 13 | #include "common/log.h" 14 | 15 | #define FLUSH_THRESHOLD 10 16 | #define LOG_TAG "Dumper" 17 | 18 | static message_looper_t *looper; 19 | 20 | static FILE *dumpFile = NULL; 21 | 22 | static int writeCount = 0; 23 | 24 | void _dump_to_file(message_t *msg) { 25 | ALOGI("%s", (char *) msg->data); 26 | fwrite(msg->data, sizeof(char), (msg->data_size - 1), dumpFile); 27 | if (++writeCount > FLUSH_THRESHOLD) { 28 | ALOGI("%s", "........ flush to file ..........."); 29 | fflush(dumpFile); 30 | writeCount = 0; 31 | } 32 | } 33 | 34 | static void create_file(char *dumpDir) { 35 | if (dumpFile == NULL) { 36 | struct timeval stamp; 37 | gettimeofday(&stamp, NULL); 38 | char *filePath; 39 | asprintf(&filePath, "%s/adi_%ld.log", dumpDir, stamp.tv_sec); 40 | dumpFile = fopen(filePath, "ae"); 41 | if (dumpFile == NULL) { 42 | ALOGE("文件打开错误:%s,错误原因:%s", filePath, strerror(errno)); 43 | } 44 | } 45 | } 46 | 47 | void dumper_start(char *dumpDir) { 48 | ALOGI("Dumper 文件目录:%s", dumpDir); 49 | looper = looperCreate(_dump_to_file); 50 | if (looper == NULL) { 51 | ALOGI("looperCreate fail!!!!!!!!!"); 52 | return; 53 | } 54 | switch (looperStart(looper)) { 55 | case LOOPER_START_SUCCESS: 56 | create_file(dumpDir); 57 | break; 58 | case LOOPER_START_THREAD_ERROR: 59 | ALOGI("looperStart thread create fail."); 60 | looperDestroy(&looper); 61 | break; 62 | case LOOPER_START_REPEAT_ERROR: 63 | ALOGI("looperStart looper is started"); 64 | break; 65 | case LOOPER_IS_NULL: 66 | ALOGI("looperStart looper is NULL"); 67 | break; 68 | default: 69 | break; 70 | } 71 | } 72 | 73 | void dumper_stop() { 74 | if (dumpFile != NULL) { 75 | fflush(dumpFile); 76 | if (fclose(dumpFile)) { 77 | ALOGI("%s", "文件关闭成功"); 78 | } 79 | dumpFile = NULL; 80 | } 81 | looperDestroy(&looper); 82 | } 83 | 84 | 85 | void dumper_add(char *data) { 86 | looperPost(looper, 0, data, strlen(data) + 1); 87 | free(data); 88 | } -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/dumper.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-08-15. 3 | // 4 | 5 | #ifndef ADI_DUMPER_H 6 | #define ADI_DUMPER_H 7 | 8 | //#ifdef __cplusplus 9 | //extern "C" { 10 | //#endif 11 | void dumper_start(char *dumpDir); 12 | 13 | void dumper_stop(); 14 | 15 | void dumper_add(char *data); 16 | //#ifdef __cplusplus 17 | //} 18 | //#endif 19 | 20 | #endif //ADI_DUMPER_H 21 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/handler/ClassFileLoadHookHandler.h: -------------------------------------------------------------------------------- 1 | //// 2 | //// Created by kewen on 2019-10-21. 3 | //// 4 | // 5 | //#ifndef ADI_LIB_CLASSFILELOADHOOKHANDLER_H 6 | //#define ADI_LIB_CLASSFILELOADHOOKHANDLER_H 7 | // 8 | //#include 9 | //#include "../jvmti.h" 10 | // 11 | //void JNICALL 12 | //ClassFileLoadHook(jvmtiEnv *jvmti_env, 13 | // JNIEnv *jni_env, 14 | // jclass class_being_redefined, 15 | // jobject loader, 16 | // const char *name, 17 | // jobject protection_domain, 18 | // jint class_data_len, 19 | // const unsigned char *class_data, 20 | // jint *new_class_data_len, 21 | // unsigned char **new_class_data); 22 | // 23 | //#endif //ADI_LIB_CLASSFILELOADHOOKHANDLER_H 24 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/handler/ClassPrepareHandler.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-10-31. 3 | // 4 | 5 | #include 6 | #include "ClassPrepareHandler.h" 7 | 8 | #include "../common/log.h" 9 | #include "../common/jdi_native.h" 10 | #include "Terminator.h" 11 | 12 | void JNICALL ClassPrepare(jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread, jclass klass) { 13 | if (isTerminated()) { 14 | ALOGI(">>>classPrepare: terminated!"); 15 | return; 16 | } 17 | char *classSignature; 18 | jvmti_env->GetClassSignature(klass, &classSignature, nullptr); 19 | 20 | char *stackInfo = createStackInfo(jvmti_env, jni_env, thread, 10); 21 | ALOGI("----> classPrepare: %s, %s", classSignature, stackInfo); 22 | 23 | jvmti_env->Deallocate((unsigned char *) classSignature); 24 | 25 | } -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/handler/ClassPrepareHandler.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-10-31. 3 | // 4 | 5 | #ifndef ADI_LIB_CLASSPREPAREHANDLER_H 6 | #define ADI_LIB_CLASSPREPAREHANDLER_H 7 | 8 | #include 9 | #include "../jvmti.h" 10 | 11 | void JNICALL ClassPrepare(jvmtiEnv *jvmti_env, JNIEnv* jni_env, jthread thread, jclass klass); 12 | 13 | #endif //ADI_LIB_CLASSPREPAREHANDLER_H 14 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/handler/Config.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-09-06. 3 | // 4 | 5 | #include "Config.h" 6 | 7 | static float sampleIntervalUs; 8 | static int stackDepth; 9 | 10 | void setSampleIntervalMs(float ms) { 11 | sampleIntervalUs = ms * 1000; 12 | } 13 | 14 | float getSampleIntervalUs() { 15 | return sampleIntervalUs; 16 | } 17 | 18 | void setStackDepth(int depth) { 19 | stackDepth = depth; 20 | } 21 | 22 | int getStackDepth() { 23 | return stackDepth; 24 | } 25 | 26 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/handler/Config.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by zkw on 2019-09-05. 3 | // 4 | 5 | #ifndef ADI_CONFIG_H 6 | #define ADI_CONFIG_H 7 | 8 | void setSampleIntervalMs(float ms); 9 | 10 | float getSampleIntervalUs(); 11 | 12 | void setStackDepth(int depth); 13 | 14 | int getStackDepth(); 15 | 16 | #endif //ADI_CONFIG_H 17 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/handler/FramePopHandler.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-10-31. 3 | // 4 | 5 | #include "FramePopHandler.h" 6 | #include "../common/log.h" 7 | #include "../common/jdi_native.h" 8 | 9 | /** 10 | * Frame 弹出事件。暂未支持,不要使用! 11 | * @deprecated 12 | * @param jvmti_env 13 | * @param jni_env 14 | * @param thread 15 | * @param method 16 | * @param was_popped_by_exception 17 | */ 18 | void JNICALL FramePop(jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread, jmethodID method, 19 | jboolean was_popped_by_exception) { 20 | jvmtiError err; 21 | 22 | jclass declaringClass = nullptr; 23 | err = jvmti_env->GetMethodDeclaringClass(method, &declaringClass); 24 | if (err != JVMTI_ERROR_NONE) { 25 | ALOGE("[JVMTI ERROR on GetMethodDeclaringClass]:%i", err); 26 | } 27 | char *classSignature = nullptr; 28 | err = jvmti_env->GetClassSignature(declaringClass, &classSignature, nullptr); 29 | if (err != JVMTI_ERROR_NONE) { 30 | ALOGE("[JVMTI ERROR on GetClassSignature]:%i", err); 31 | } 32 | 33 | char *methodName = nullptr; 34 | err = jvmti_env->GetMethodName(method, &methodName, nullptr, nullptr); 35 | if (err != JVMTI_ERROR_NONE) { 36 | ALOGE("[JVMTI ERROR on GetMethodName]:%i", err); 37 | } 38 | 39 | char *stackInfo = createStackInfo(jvmti_env, jni_env, thread, 10); 40 | 41 | ALOGI("----> framePop: %s, %s, %s", classSignature, methodName, stackInfo); 42 | } -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/handler/FramePopHandler.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-10-31. 3 | // 4 | 5 | #ifndef ADI_LIB_FRAMEPOPHANDLER_H 6 | #define ADI_LIB_FRAMEPOPHANDLER_H 7 | 8 | #include 9 | #include "../jvmti.h" 10 | 11 | /** 12 | * Frame 弹出事件。暂未支持,不要使用! 13 | * @deprecated 14 | * @param jvmti_env 15 | * @param jni_env 16 | * @param thread 17 | * @param method 18 | * @param was_popped_by_exception 19 | */ 20 | void JNICALL FramePop(jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread, jmethodID method, 21 | jboolean was_popped_by_exception); 22 | 23 | #endif //ADI_LIB_FRAMEPOPHANDLER_H 24 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/handler/GCCallbackHandler.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-08-30. 3 | // 4 | 5 | #include 6 | #include "GCCallbackHandler.h" 7 | #include "../common/log.h" 8 | 9 | extern "C" { 10 | #include "../dumper.h" 11 | #include "../common/utils.h" 12 | } 13 | 14 | #define LOG_TAG "GC" 15 | 16 | static char *createBaseInfo(jvmtiEnv *jvmti_env) { 17 | char *baseInfo; 18 | int64_t timeMillis = currentTimeMillis(); 19 | asprintf(&baseInfo, "%lld", timeMillis); 20 | return baseInfo; 21 | } 22 | 23 | void GCStartCallback(jvmtiEnv *jvmti) { 24 | char *baseInfo = createBaseInfo(jvmti); 25 | char *line; 26 | asprintf(&line, "%sS|%s\n", LOG_TAG, baseInfo); 27 | dumper_add(line); 28 | } 29 | 30 | void GCFinishCallback(jvmtiEnv *jvmti) { 31 | char *baseInfo = createBaseInfo(jvmti); 32 | char *line; 33 | asprintf(&line, "%sF|%s\n", LOG_TAG, baseInfo); 34 | dumper_add(line); 35 | } -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/handler/GCCallbackHandler.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-08-30. 3 | // 4 | 5 | #ifndef ADI_GCCALLBACKHANDLER_H 6 | #define ADI_GCCALLBACKHANDLER_H 7 | 8 | #include "../jvmti.h" 9 | 10 | void GCStartCallback(jvmtiEnv *jvmti); 11 | 12 | void GCFinishCallback(jvmtiEnv *jvmti); 13 | 14 | #endif //ADI_GCCALLBACKHANDLER_H 15 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/handler/MethodEntryHandler.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-08-21. 3 | // 4 | 5 | #include "MethodEntryHandler.h" 6 | 7 | extern "C" { 8 | #include "../dumper.h" 9 | } 10 | 11 | #include 12 | #include 13 | #include "../jvmti.h" 14 | #include 15 | #include 16 | #include 17 | #include "../common/log.h" 18 | 19 | #define LOG_TAG "MethodEntry" 20 | 21 | static char *createMethodInfo(jvmtiEnv *jvmti, JNIEnv *env, jthread thread, jmethodID method) { 22 | return const_cast(""); 23 | } 24 | 25 | static char *createBaseInfo(jvmtiEnv *jvmti, jthread thread) { 26 | jvmtiThreadInfo threadInfo; 27 | jvmti->GetThreadInfo(thread, &threadInfo); 28 | char *baseInfo; 29 | //TODO 添加时间戳 30 | 31 | asprintf(&baseInfo, "%s", threadInfo.name); 32 | ALOGI("[base:] %s", baseInfo); 33 | return baseInfo; 34 | } 35 | 36 | void MethodEntry(jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread, jmethodID method) { 37 | ALOGI("==========method entry callback=========="); 38 | 39 | char *baseInfo = createBaseInfo(jvmti_env, thread); 40 | char *methodInfo = createMethodInfo(jvmti_env, jni_env, thread, method); 41 | 42 | char *line; 43 | asprintf(&line, "ME|%s|%s\n", baseInfo, methodInfo); 44 | free(baseInfo); 45 | free(methodInfo); 46 | dumper_add(line); 47 | } -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/handler/MethodEntryHandler.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-08-21. 3 | // 4 | 5 | #ifndef ADI_METHODENTRYHANDLER_H 6 | #define ADI_METHODENTRYHANDLER_H 7 | 8 | #include 9 | #include "../jvmti.h" 10 | 11 | void MethodEntry(jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread, jmethodID method); 12 | 13 | #endif //ADI_METHODENTRYHANDLER_H 14 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/handler/MonitorContendedHandler.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-09-17. 3 | // 4 | 5 | #ifndef ADI_MONITORCONTENDEDHANDLER_H 6 | #define ADI_MONITORCONTENDEDHANDLER_H 7 | 8 | #include 9 | #include "../jvmti.h" 10 | 11 | void JNICALL 12 | MonitorContendedEnter(jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread, jobject object); 13 | 14 | void JNICALL 15 | MonitorContendedEntered(jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread, jobject object); 16 | 17 | #endif //ADI_MONITORCONTENDEDHANDLER_H 18 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/handler/ObjectFreeHandler.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-09-10. 3 | // 4 | 5 | #include "ObjectFreeHandler.h" 6 | #include 7 | #include "../common/log.h" 8 | 9 | extern "C" { 10 | #include "../dumper.h" 11 | #include "../common/utils.h" 12 | } 13 | #define LOG_TAG "OF" 14 | 15 | static char *createBaseInfo(jvmtiEnv *jvmti_env, jlong tag) { 16 | char *baseInfo; 17 | int64_t timeMillis = currentTimeMillis(); 18 | asprintf(&baseInfo, "%lld%s%lld", 19 | timeMillis, SEP_POWER, 20 | tag); 21 | return baseInfo; 22 | } 23 | 24 | void JNICALL ObjectFree(jvmtiEnv *jvmti_env, jlong tag) { 25 | char *baseInfo = createBaseInfo(jvmti_env, tag); 26 | char *line; 27 | asprintf(&line, "%s|%s\n", LOG_TAG, baseInfo); 28 | dumper_add(line); 29 | } 30 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/handler/ObjectFreeHandler.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-09-10. 3 | // 4 | 5 | #ifndef ADI_OBJECTFREEHANDLER_H 6 | #define ADI_OBJECTFREEHANDLER_H 7 | 8 | #include "../jvmti.h" 9 | 10 | void JNICALL ObjectFree(jvmtiEnv *jvmti_env, jlong tag); 11 | 12 | #endif //ADI_OBJECTFREEHANDLER_H 13 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/handler/Terminator.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-11-05. 3 | // 4 | 5 | #include "Terminator.h" 6 | 7 | static volatile bool terminated = false; 8 | 9 | void setTerminated(bool isTerminated) { 10 | terminated = isTerminated; 11 | } 12 | 13 | bool isTerminated() { 14 | return terminated; 15 | } 16 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/handler/Terminator.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-11-05. 3 | // 4 | 5 | #ifndef ADI_LIB_TERMINATOR_H 6 | #define ADI_LIB_TERMINATOR_H 7 | 8 | 9 | void setTerminated(bool isTerminated); 10 | 11 | bool isTerminated(); 12 | 13 | #endif //ADI_LIB_TERMINATOR_H 14 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/handler/ThreadStartHandler.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-08-30. 3 | // 4 | 5 | #include 6 | #include "ThreadStartHandler.h" 7 | #include "../common/log.h" 8 | 9 | extern "C" { 10 | #include "../dumper.h" 11 | #include "../common/utils.h" 12 | } 13 | 14 | #define LOG_TAG "TS" 15 | 16 | 17 | static char *createBaseInfo(jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread) { 18 | jvmtiThreadInfo threadInfo; 19 | jvmti_env->GetThreadInfo(thread, &threadInfo); 20 | char *baseInfo; 21 | int64_t timeMillis = currentTimeMillis(); 22 | asprintf(&baseInfo, "%lld%s%s", timeMillis, SEP_POWER, threadInfo.name); 23 | return baseInfo; 24 | } 25 | 26 | void JNICALL ThreadStart(jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread) { 27 | char *baseInfo = createBaseInfo(jvmti_env, jni_env, thread); 28 | char *line; 29 | asprintf(&line, "%s|%s\n", LOG_TAG, baseInfo); 30 | dumper_add(line); 31 | } 32 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/handler/ThreadStartHandler.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-08-30. 3 | // 4 | 5 | #ifndef ADI_THREADSTARTHANDLER_H 6 | #define ADI_THREADSTARTHANDLER_H 7 | 8 | #include 9 | #include "../jvmti.h" 10 | 11 | void JNICALL ThreadStart(jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread); 12 | 13 | #endif //ADI_THREADSTARTHANDLER_H 14 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/handler/VMObjectAllocHandler.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-08-19. 3 | // 4 | 5 | #include "VMObjectAllocHandler.h" 6 | 7 | 8 | extern "C" { 9 | #include "../dumper.h" 10 | #include "../common/utils.h" 11 | } 12 | 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include "../common/log.h" 19 | #include "../common/jdi_native.h" 20 | #include "Config.h" 21 | 22 | 23 | #define LOG_TAG "OA" 24 | 25 | static float sampleInterval = 0; 26 | static int stackDepth = 0; 27 | static int64_t startTime = 0; 28 | 29 | static char * 30 | createBaseInfo(jvmtiEnv *jvmti, JNIEnv *env, jthread thread, jobject object, jclass klass, 31 | jlong size, jlong tag) { 32 | jvmtiThreadInfo threadInfo; 33 | jvmti->GetThreadInfo(thread, &threadInfo); 34 | char *classSignature; 35 | jvmti->GetClassSignature(klass, &classSignature, nullptr); 36 | char *baseInfo; 37 | int64_t timeMillis = currentTimeMillis(); 38 | asprintf(&baseInfo, "%lld%s%s%s%s%s%lld%s%lld", 39 | timeMillis, SEP_POWER, 40 | threadInfo.name, SEP_POWER, 41 | classSignature, SEP_POWER, 42 | size, SEP_POWER, 43 | tag); 44 | ALOGI("[base:] %s", baseInfo); 45 | jvmti->Deallocate((unsigned char *) classSignature); 46 | return baseInfo; 47 | } 48 | 49 | static jlong tag = 0; 50 | static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; 51 | 52 | static jlong createObjectTag() { 53 | pthread_mutex_lock(&mtx); 54 | tag += 1; 55 | pthread_mutex_unlock(&mtx); 56 | return tag; 57 | } 58 | 59 | /** 60 | * 生成的日志格式: 61 | *

62 | * 事件名称|时间戳 线程名 对象签名 对象大小|调用栈第一行(方法所在类签名 方法名 方法签名),调用栈第二行,调用栈第三行 63 | * 64 | */ 65 | void ObjectAllocCallback(jvmtiEnv *jvmti, JNIEnv *env, jthread thread, jobject object, jclass klass, 66 | jlong size) { 67 | int64_t now = currentTimeMicro(); 68 | if (sampleInterval == 0) { 69 | sampleInterval = getSampleIntervalUs(); 70 | } 71 | if (now - startTime <= getSampleIntervalUs()) { 72 | ALOGI("----Object Alloc too fast!----"); 73 | return; 74 | } 75 | startTime = now; 76 | 77 | jlong tag = createObjectTag(); 78 | jvmti->SetTag(object, tag); 79 | ALOGI("==========Object Alloc dump~ tag: %lld =========", tag); 80 | 81 | char *baseInfo = createBaseInfo(jvmti, env, thread, object, klass, size, tag); 82 | 83 | if (stackDepth == 0) { 84 | stackDepth = getStackDepth(); 85 | } 86 | char *stackInfo = createStackInfo(jvmti, env, thread, stackDepth); 87 | char *line; 88 | asprintf(&line, "%s|%s|%s\n", LOG_TAG, baseInfo, stackInfo); 89 | free(baseInfo); 90 | free(stackInfo); 91 | ALOGI("%s", line); 92 | dumper_add(line); 93 | 94 | } -------------------------------------------------------------------------------- /adi_lib/adi/src/main/cpp/handler/VMObjectAllocHandler.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by kewen on 2019-08-19. 3 | // 4 | 5 | #ifndef ADI_VMOBJECTALLOCHANDLER_H 6 | #define ADI_VMOBJECTALLOCHANDLER_H 7 | 8 | #include 9 | #include "../jvmti.h" 10 | 11 | void ObjectAllocCallback(jvmtiEnv *jvmti, JNIEnv *env, jthread thread, jobject object, jclass klass, 12 | jlong size); 13 | 14 | void setVMObjectAllocSampleInterval(float intervalMs); 15 | 16 | #endif //ADI_VMOBJECTALLOCHANDLER_H 17 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/java/com/adi/JVMTIConstant.java: -------------------------------------------------------------------------------- 1 | package com.adi; 2 | 3 | /** 4 | * @author zhoukewen 5 | * @since 2019-09-05 6 | */ 7 | interface JVMTIConstant { 8 | 9 | // ------------------- JVMTI EVENT -------------------- 10 | 11 | int JVMTI_MIN_EVENT_TYPE_VAL = 50; 12 | int JVMTI_EVENT_VM_INIT = 50; 13 | int JVMTI_EVENT_VM_DEATH = 51; 14 | int JVMTI_EVENT_THREAD_START = 52; 15 | int JVMTI_EVENT_THREAD_END = 53; 16 | int JVMTI_EVENT_CLASS_FILE_LOAD_HOOK = 54; 17 | int JVMTI_EVENT_CLASS_LOAD = 55; 18 | int JVMTI_EVENT_CLASS_PREPARE = 56; 19 | int JVMTI_EVENT_VM_START = 57; 20 | int JVMTI_EVENT_EXCEPTION = 58; 21 | int JVMTI_EVENT_EXCEPTION_CATCH = 59; 22 | int JVMTI_EVENT_SINGLE_STEP = 60; 23 | int JVMTI_EVENT_FRAME_POP = 61; 24 | int JVMTI_EVENT_BREAKPOINT = 62; 25 | int JVMTI_EVENT_FIELD_ACCESS = 63; 26 | int JVMTI_EVENT_FIELD_MODIFICATION = 64; 27 | int JVMTI_EVENT_METHOD_ENTRY = 65; 28 | int JVMTI_EVENT_METHOD_EXIT = 66; 29 | int JVMTI_EVENT_NATIVE_METHOD_BIND = 67; 30 | int JVMTI_EVENT_COMPILED_METHOD_LOAD = 68; 31 | int JVMTI_EVENT_COMPILED_METHOD_UNLOAD = 69; 32 | int JVMTI_EVENT_DYNAMIC_CODE_GENERATED = 70; 33 | int JVMTI_EVENT_DATA_DUMP_REQUEST = 71; 34 | int JVMTI_EVENT_MONITOR_WAIT = 73; 35 | int JVMTI_EVENT_MONITOR_WAITED = 74; 36 | int JVMTI_EVENT_MONITOR_CONTENDED_ENTER = 75; 37 | int JVMTI_EVENT_MONITOR_CONTENDED_ENTERED = 76; 38 | int JVMTI_EVENT_RESOURCE_EXHAUSTED = 80; 39 | int JVMTI_EVENT_GARBAGE_COLLECTION_START = 81; 40 | int JVMTI_EVENT_GARBAGE_COLLECTION_FINISH = 82; 41 | int JVMTI_EVENT_OBJECT_FREE = 83; 42 | int JVMTI_EVENT_VM_OBJECT_ALLOC = 84; 43 | int JVMTI_MAX_EVENT_TYPE_VAL = 84; 44 | 45 | // ------------------- JVMTI EVENT End-------------------- 46 | } 47 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/res/drawable/window_back.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /adi_lib/adi/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | adilib 3 | 4 | -------------------------------------------------------------------------------- /adi_lib/adi/src/test/java/com/adi/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.adi; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | @Test 14 | public void addition_isCorrect() { 15 | assertEquals(4, 2 + 2); 16 | } 17 | } -------------------------------------------------------------------------------- /adi_lib/adi_sample/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | 3 | -------------------------------------------------------------------------------- /adi_lib/adi_sample/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | apply plugin: 'kotlin-android-extensions' 3 | apply plugin: 'kotlin-android' 4 | 5 | android { 6 | compileSdkVersion 28 7 | defaultConfig { 8 | applicationId "com.adi.demo" 9 | minSdkVersion 21 10 | targetSdkVersion 28 11 | versionCode 1 12 | versionName "1.0" 13 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 14 | 15 | } 16 | buildTypes { 17 | release { 18 | minifyEnabled false 19 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 20 | } 21 | } 22 | compileOptions { 23 | sourceCompatibility = 1.8 24 | targetCompatibility = 1.8 25 | } 26 | buildToolsVersion = '29.0.2' 27 | 28 | } 29 | 30 | dependencies { 31 | implementation fileTree(include: ['*.jar'], dir: 'libs') 32 | testImplementation 'junit:junit:4.12' 33 | androidTestImplementation 'com.android.support.test:runner:1.0.2' 34 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' 35 | 36 | // debugImplementation 'zkw.adi:adi:0.9.3' 37 | // releaseImplementation 'zkw.adi:adi-nop:0.9.3' 38 | implementation project(':adi') 39 | implementation project(':matrix-io-canary') 40 | 41 | 42 | api "com.squareup.okhttp3:okhttp:3.14.2" 43 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 44 | implementation 'com.android.support:appcompat-v7:28.0.0' 45 | } 46 | -------------------------------------------------------------------------------- /adi_lib/adi_sample/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /adi_lib/adi_sample/src/androidTest/java/com/dodola/jvmti/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.dodola.jvmti; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | /** 13 | * Instrumented test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | @Test 20 | public void useAppContext() { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("com.dodola.jvmti", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /adi_lib/adi_sample/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /adi_lib/adi_sample/src/main/java/com/adi/demo/DemoObject.kt: -------------------------------------------------------------------------------- 1 | package com.adi.demo 2 | 3 | import android.util.Log 4 | 5 | /** 6 | * @author zhoukewen 7 | * @since 2019-07-30 8 | */ 9 | class DemoObject { 10 | var a = 0 11 | var b = "" 12 | 13 | companion object { 14 | @JvmStatic 15 | fun test() { 16 | Log.i("zkw", "------>>>>>so nice!!!!") 17 | } 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /adi_lib/adi_sample/src/main/java/com/adi/demo/DemoObject2.java: -------------------------------------------------------------------------------- 1 | package com.adi.demo; 2 | 3 | import android.util.Log; 4 | 5 | /** 6 | * @author zhoukewen 7 | * @since 2019-10-24 8 | */ 9 | public class DemoObject2 { 10 | 11 | public DemoObject2() { 12 | } 13 | 14 | public static void publicStaticMethod(String str) { 15 | Log.i("zkw", "------>>>>>so nice, demo2 !!!!" ); 16 | 17 | } 18 | 19 | private void privateMethod() { 20 | Log.i("zkw", "xxx"); 21 | } 22 | 23 | public void publicMethod() { 24 | Log.i("zkw", "xxx"); 25 | } 26 | 27 | protected void protectedMethod() { 28 | Log.i("zkw", "xxx"); 29 | } 30 | 31 | public final void publicFinalMethod() { 32 | Log.i("zkw", "xxx"); 33 | } 34 | 35 | protected final void protectedFinalMethod() { 36 | Log.i("zkw", "xxx"); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /adi_lib/adi_sample/src/main/java/com/adi/demo/MyApplication.kt: -------------------------------------------------------------------------------- 1 | package com.adi.demo 2 | 3 | import android.app.Application 4 | import android.content.Context 5 | import com.adi.ADIConfig 6 | import com.adi.ADIManager 7 | import com.tencent.matrix.iocanary.core.IOCanaryCore 8 | 9 | /** 10 | * @author zhoukewen 11 | * @since 2019-10-31 12 | */ 13 | class MyApplication : Application() { 14 | 15 | override fun attachBaseContext(base: Context?) { 16 | super.attachBaseContext(base) 17 | val core = IOCanaryCore() 18 | core.start() 19 | ADIManager.init(this) 20 | val builder = ADIConfig.Builder() 21 | builder.setEventType(ADIConfig.Type.BRIEF_INFORMATION) 22 | ADIManager.start(this, builder.build()) 23 | } 24 | 25 | override fun onCreate() { 26 | super.onCreate() 27 | } 28 | } -------------------------------------------------------------------------------- /adi_lib/adi_sample/src/main/java/com/adi/demo/TestObject.kt: -------------------------------------------------------------------------------- 1 | package com.adi.demo 2 | 3 | import android.util.Log 4 | 5 | /** 6 | * @author zhoukewen 7 | * @since 2019-08-27 8 | */ 9 | class TestObject { 10 | 11 | fun a() { 12 | var mm = 0 13 | Log.i("zkw", "xxxx $mm") 14 | mm += 1 15 | // com.adi.demo.DemoObject2.test() 16 | } 17 | 18 | 19 | 20 | } 21 | -------------------------------------------------------------------------------- /adi_lib/adi_sample/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 13 | 19 | 22 | 25 | 26 | 27 | 28 | 34 | 35 | -------------------------------------------------------------------------------- /adi_lib/adi_sample/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 |