Android无埋点数据采集SDK及Gradle插件开发

       最近在做无埋点数据采集SDK的研发工作,从立项到开发出一个稳定产品总共给的时间是2周,真是时间紧,任务重。。。 由于之前没怎么接触过插件化开发相关的知识,所以刚开始还真是萌萌哒 偷笑,但是任务接了就得把他做完,毕竟逃避不是我们程序猿们得性格 大笑。首先应该理一下思路,而不是盲目的去做。

       对于sdk 的开发网上介绍的文章也很多,这篇文章算是对这次开发的一个总结,这里基于数据采集的需求我的思路是。

    (1)开发gradle插件

            语言:groovy;

            作用:实现在接入SDK的项目中指定位置插入指定的代码;

    (2)开发SDK:具有可插拔的作用,小体积,小入侵,接入简单。

    (3)书写开发文档

参考文档:

        1)无埋点数据采集方案可参考:

                Android无埋点数据收集SDK关键技术开 (可主要参考)

                网易HubbleData之Android无埋点实践

                Android AOP之字节码插桩  

        2)数据采集gradle插件开发可参考:

                应用于Android无埋点的Gradle插件解析 (可主要参考)

                Gradle自定义插件详解

                有关Android插件化思考

                Android插件化认知

        3)开发gradle插件需要了解groovy语言,可参考:

                Groovy 使用完全解析  

                深入理解 Android 之 Gradle

开发中填坑记:

        对于Android的gradle插件开发网上资料相对来说比较全,但是当我们开发出来以后该如何使用呢?网上也说了就3种,(1)在自己的项目中直接开发的插件,可以在APP的build.gradle中直接使用,(2)发布到本地仓库直接APP的build.gradle中使用,(3)发布到远程仓库,项目project中build.gradle引入maven及自定义插件的驱动,APP的build.gradle中引入插件即可。

        但是在实际集成中发现全是坑,首先对于第一种,在自己开发插件的项目中导入项目确实是没有问题的,但是相同条件,把自己开发的插件源码导入到另一个项目中,直接会报错如下图,我天真的以为真是版本不兼容,但是真正去解决这个不兼容的时候,其实又掉进了另一个坑中不能自拔。。。于是乎我想既然这么百般阻拦不让我集成说明肯定不对,估计是姿势不对生气。对于第一种情况我的理解是androidstudio中对gradle的构建是有先后顺序的,在开发插件的项目中引入别的项目或者module时,项目已经完成gradle的build,不存在重新build插件的问题,而在我们的一个项目中引入插件源码时,androidstudio会识别到引入了新插件,会按插件的gradle重新build,所以会造成冲突(个人理解)。


        而对于第二三种都可以实现插件的正确集成。个人觉得第二种更简单些,当SDK提供出去会后,接入方只需要在APP的build.gradle中引入即可,如下图所示,其中url中的地址是接入方导入我们提供的插件生成的本地maven仓库目录。

        APP的build.gradle中添加:

buildscript {
  repositories {
    jcenter()
    google()
    maven {
      url uri('../项目中导入本地仓库maven')
    }
  }
  dependencies {
    classpath 'com.xxx:插件模块名:版本号'
  }
}
apply plugin: 'com.xxx'

        第三种的话需要在project的build.gradle引入远程maven仓库和插件,然后在APP的build.gradle中引入该插件即可,相对来说比较麻烦。具体的引入方式见下图。

        第一步,project的build.gradle中添加:

buildscript {
  repositories {
    jcenter()
    google()
    maven {
      url "https://raw.githubusercontent.com/具体的GitHub发布的远程仓库地址/master"
    }
  }
  dependencies {
    classpath 'com.android.tools.build:gradle:3.0.0'

    classpath 'com.xxx:插件模块名:版本号'
  }

        第二步,然后在APP的build.gradle中添加:

apply plugin: 'com.xxx'

        这样开发的插件就可以使用了,具体如何将开发的插件发布到本地maven以及详细的配置可以参考文章 Gradle自定义插件详解 。另外这篇文章中如下图片红色框中的就是发布到本地的maven,但我们提供SDK给别人使用时,不需要把目录中的整个文件给出去,只需要提供  .jar或者  .pom文件出去即可。我们可以查看本地gradle插件也是只提供了这两种格式的文件给我们使用的。对于如何发布本地maven到远程的可以参考 Android Studio 将github作为远程maven仓库,也比较简单自己试一下就可以了。



猜你喜欢

转载自blog.csdn.net/yyanjun/article/details/80000781