1.一种基于Android终端的用户数据采集的方法,其特征在于,包括如下步骤:
在Android系统对APP编译阶段,采用动态代理java agent,与编译器进行交互,指示编译器通过修改目标class文件添加预定事件埋点并生成对应该事件的机器代码,进行用户数据采集。
2.根据权利要求1所述的基于Android终端的用户数据采集的方法,其特征在于,
当编译开始时,通过插件启动所述动态代理java agent。
3.根据权利要求2所述的基于Android终端的用户数据采集的方法,其特征在于,包括如下步骤:
在所述Android系统开始编译APP时,通过gradle插件启动动态代理java agent;
所述java agent修改目标class文件;
判断是否修改成功,若是,则编译成功,无埋点成功;若否,则编译成功,无埋点失败;
在埋点成功的情况下,基于被修改的目标class文件,进行用户数据采集。
4.根据权利要求3所述的基于Android终端的用户数据采集的方法,其特征在于,所述java agent修改目标class文件包括如下步骤:
创建InvocationHandler实例,
将所述InvocationHandler实例赋值给SecurityManager.class的packageAccessLock变量;
令ProcessBuilder类通过反射获取所述InvocationHandler的实例;
ProcessBuilder类执行start方法,启动dx.bat的进程;
ClassFileTransformer实现对com.android.dx.command.dexer.Main类的processClass方法进行修改;
将修改好的目标Class文件编译成dex文件。
5.根据权利要求4所述的基于Android终端的用户数据采集的方法,其特征在于,
通过ASM使ClassFileTransformer实现对com.android.dx.command.dexer.Main类的processClass方法进行修改。
6.一种基于Android终端的用户数据采集的系统,其特征在于,包括:
用于在Android系统对APP编译阶段,采用动态代理java agent,与编译器进行交互,指示编译器通过修改目标class文件添加预定事件埋点并生成对应该事件的机器代码,进行用户数据采集。
7.根据权利要求6所述的基于Android终端的用户数据采集的系统,其特征在于,
当编译开始时,通过插件启动所述动态代理java agent。
8.根据权利要求7所述的基于Android终端的用户数据采集的系统,其特征在于,包括:
启动单元,用于在所述Android系统开始编译APP时,通过gradle插件启动动态代理java agent;
修改单元,用于所述java agent修改目标class文件;
判断单元,用于判断是否修改成功,若是,则编译成功,无埋点成功;若否,则编译成功,无埋点失败;
采集单元,用于在埋点成功的情况下,基于被修改的目标class文件,进行用户数据采集。
9.根据权利要求8所述的基于Android终端的用户数据采集的系统,其特征在于,所述修改单元包括:
实例创建子单元,用于创建InvocationHandler实例;
赋值子单元,用于将所述InvocationHandler实例赋值给SecurityManager.class的packageAccessLock变量;
实例反射获取子单元,用于反射令ProcessBuilder类通过反射获取所述InvocationHandler的实例;
进程启动子单元,用于ProcessBuilder类执行start方法,启动dx.bat的进程;
修改子单元,用于使用ClassFileTransformer来实现对com.android.dx.command.dexer.Main类的processClass方法进行修改;
编辑子单元,用于将修改好的目标Class文件编译成dex文件。
10.根据权利要求9所述的基于Android终端的用户数据采集的系统,其特征在于,
所述修改子单元中,通过ASM使ClassFileTransformer实现对com.android.dx.command.dexer.Main类的processClass方法进行修改。