Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
forked from rchaocai/Luffy

Android字节码插件,编译期间动态修改代码,改造添加全埋点日志采集功能模块,对常见控件进行监听处理

Notifications You must be signed in to change notification settings

outofmemory/Luffy

Repository files navigation

Luffy

Android字节码插件,编译期间动态修改代码

1、更新日志

2018年12月07日更新

参考神策的全埋点日志SDK,进行功能重构扩展完善,以方便正式应用到线上应用

1、针对日志采集的全埋点对各个常见十多种控件进行埋点监听及处理(AutoTrackHelper类)

  • onFragmentViewCreated
  • trackFragmentResume
  • trackFragmentSetUserVisibleHint
  • trackOnHiddenChanged
  • trackFragmentAppViewScreen
  • trackExpandableListViewOnGroupClick
  • trackExpandableListViewOnChildClick
  • trackListView
  • trackTabHost
  • trackTabLayoutSelected
  • trackMenuItem
  • trackRadioGroup
  • trackDialog
  • trackDrawerOpened
  • trackDrawerClosed
  • trackViewOnClick
  • trackViewOnClick

2、可以在build.gradle进行多个自定义插桩配置

3、针对埋点控件及自定义配置功能的logapp测试应用

2018年03月28日更新

插件扩展,新增自动埋点实战功能 2018年03月28日更新 插件扩展,新增自动埋点实战功能

  • View的onClick(View v)方法
  • Fragment的onResume()方法
  • Fragment的onPause()方法
  • Fragment的setUserVisibleHint(boolean b)方法
  • Fragment的onHiddenChanged(boolean b)方法
  • 在app的module中手动设置的监听条件:指定方法或注解方法

2、使用步骤

要是使用演示的话,因为还没上传到jcenter库,所以只能本地仓库打包插件,记得要先把依赖都注释掉,插件打包完成后再启用,不然会编译不过去的。

本地打包及使用步骤:

  • 2.1、AndroidStudio右侧Gradle->:plugin->upload->uploadArchives,打包成功会在项目目录snapshotRepo中
  • 2.2、根build.gradle添加插件
dependencies {
 classpath 'oms.mmc:autotrack-gradle-plugin:1.0.0-SNAPSHOT'
}
  • 3、app的build.gradle中进行配置
apply plugin: 'oms.mmc.autotrack'
xiaoqingwa {
 // 是否打印日志
 isDebug = true
 // 是否打开SDK的日志全埋点采集
 isOpenLogTrack = true
 // 支持自定义配置,可选
 matchData = [[
 //方法的匹配,可以通过类名或者实现的接口名匹配
 'ClassName' : 'com.mmc.lamandys.liba_datapick.Counter2',
 'InterfaceName': '',
 'MethodName' : 'test2',
 'MethodDes' : '(Landroid/view/View;)V',
 'isAnnotation' : true,
 //插入的字节码,方法的执行顺序visitAnnotation->onMethodEnter->onMethodExit
 'MethodVisitor': {
 MethodVisitor methodVisitor, int access, String name, String desc ->
 MethodVisitor adapter = new AutoMethodVisitor(methodVisitor, access, name, desc) {
 boolean isAnnotation = false
 @Override
 protected void onMethodExit(int opcode) {
 super.onMethodExit(opcode)
 //使用注解找对应方法的时候得加这个判断
 if (!isAnnotation) {
 return
 }
 // INVOKESTATIC
 methodVisitor.visitMethodInsn(184, "com/mmc/lamandys/liba_datapick/AutoHelper", "onClick2", "()V", false)
 }
 /**
 * 需要通过注解的方式加字节码才会重写这个方法来进行条件过滤
 */
 @Override
 AnnotationVisitor visitAnnotation(String des, boolean visible) {
 if (des == 'Lcom/xishuang/annotation/AutoCount;') {
 println "注解匹配:" + des
 isAnnotation = true
 }
 return super.visitAnnotation(des, visible)
 }
 }
 return adapter
 }
 ],
 [
 //方法的匹配,可以通过类名或者实现的接口名匹配
 'ClassName' : 'com.mmc.lamandys.liba_datapick.Counter',
 'InterfaceName': '',
 'MethodName' : 'test',
 'MethodDes' : '()V',
 'isAnnotation' : false,
 //插入的字节码,方法的执行顺序visitAnnotation->onMethodEnter->onMethodExit
 'MethodVisitor': {
 MethodVisitor methodVisitor, int access, String name, String desc ->
 MethodVisitor adapter = new AutoMethodVisitor(methodVisitor, access, name, desc) {
 @Override
 protected void onMethodEnter() {
 super.onMethodEnter()
 }
 @Override
 protected void onMethodExit(int opcode) {
 super.onMethodExit(opcode)
 // INVOKESTATIC
 methodVisitor.visitMethodInsn(INVOKESTATIC, "com/mmc/lamandys/liba_datapick/AutoHelper", "onClick3", "()V", false)
 }
 }
 return adapter
 }
 ]
 ]
}
  • 2.4、Clean Project打包应用

在logapp->build->intermediates->transforms->AutoTrack->debug中可查看插桩后的类文件:插桩类文件

具体编译的字节码可查看编译日志:编译日志

具体采集后的日志及处理可看应用日志:应用日志 应用日志规范后效果

About

Android字节码插件,编译期间动态修改代码,改造添加全埋点日志采集功能模块,对常见控件进行监听处理

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 61.8%
  • Groovy 38.2%

AltStyle によって変換されたページ (->オリジナル) /