做服务更好的
赢咖娱乐公司
当前地位:赢咖娱乐 > 建站资讯 > 赢咖娱乐

赢咖娱乐报道Gradle在实际网站开拓中的用处_最新博定宝总代运动上赢咖娱乐官网

颁布日期:2018-10-09 14:50:33作者来源:方维网络扫瞄次数:91 标签: 网站开拓    

Gradle是一个基于Apache Ant和Apache Maven概念的网站项目主动化构建开源开拓工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。Gradle这门技术主动化构建被开拓出来的时间已经不短了,更多的有名气的开源工程已经从原始的ant,maven等原始的构建迁移到了gradle中,例如:复杂的动态网站Spring制作,技术要求更高的安全赢咖娱乐都能够使用Gradle化繁为简,较为简单的一些有android端扫瞄器开拓,java应用工程等等,有许多人问我在从事实际网站开拓的工作中,如何能够使用到gradle呢,接下来我就来为大家去讲解一下,如何在实际开拓工作中去使用gradle让你更快更简洁的完成你的工作。
 
我们都知道,任何一门技术都有特定的使用场景,很少有计算机语言能够应用在一切的场景下,也就是说你碰到的这个问题确实能够用gradle去解决,那我们才去考虑使用gradle而不是为了用而用,下面我来讲一下,在我最近的工作中用到gradle的一个实例。
 
具体的技术背景需求我就不展示说了,与gradle相关的技术点就是,要在编译的时刻,主动去生成一个类,然后将一些编译时期应用程序的信息写到这个类中去,具体到我这里的需求就是,要在编译的时刻将一切工程中依赖了某个特定plugin(能够假定为一切apply了com.android.application)的module的名字都统计到一个类中去。以供应用程序去使用(实际需求是为一切app module生成路由表).
 
总结一下我们的需求就是:要统计一个完整的工程中有哪几个工程引入了com.android.application这个插件,那我们应该怎么做呢,当然你能够说,我手动创建一个类,里面一个map每次新增了app module的时刻,我手动加一行数据,这种方式当然能够,但是太烦了,而且容易忘记,此时我们gradle主动化的技术就能够派上用场了。
 
下面,我把核心代码贴出来,大家就能够看明白。
 
第一步,我定义了一个单独的plugin,也就是说只要引入我这个自定义Plugin你就能够实现这个功能。先来看一下自定义plugin的主体很简单。
 

网站开拓代码


没有任何难度,只需要继成自Plugin这个接口,然后重写apply方法即可。这里我就不再多说了,大家不了解自定义Plugin的能够看我的课程或者其它一些文章。
 
 
 
第二步,开头推断当前Project是否包含了com.android.application这个插件。如何推断,也非常简单,只需要你对gradle的API有肯定了解就能够知道,下面看我们的代码。
 
 project.afterEvaluate {
      if (it.plugins.hasPlugin(AppPlugin)) {
        appModuleCompileDependencies << project.name
        appModuleCompileDependencies.addAll(
            project.getConfigurations().getByName("compile").dependencies.name)
      }
 
      // Record router modules' name, include library and app modules.
      def routerModule = it.plugins.hasPlugin(
          RouterPlugin) && appModuleCompileDependencies.contains(it.project.name)
      if (routerModule) modulesSet.add(validateName(it.name))
}
 
 
通过it(即当前Project)plugins方法拿到每个Project的PluginContainer实例,然后使用这个PluginContainer去推断,如果为true,则说明是一个app module,我们在最后一行代码,将其存储到一个set中去保留起来。
 
第三步,上一步完成以后,那我们的moduleSet中就统计到了工程中一切app module,那最后我们要做的就是将这些信息写入到一个类中去,让我们的源码去使用。一开头实现这一步的时刻,我是通过gradle去动态实现一个Java类,然后将此类去参与编译,核心就是将生成的java源文件添到加编译环节中,核心API是:
 
 /**
     * Adds to the variant a task that generates Java source code.
     *
     * This will make the generate[Variant]Sources task depend on this task and add the
     * new source folders as compilation inputs.
     *
     * The new source folders are also added to the model.
     *
     * @param task the task
     * @param sourceFolders the source folders where the generated source code is.
     */
    void registerJavaGeneratingTask(@NonNull Task task, @NonNull Collection sourceFolders);
 
 
这个方法是BaseVariant也就是每个最终要生成的变体都能够在编译时期去为其动态的添加要编译的类。第一个参数是生成java源文件对应的Task,第二个参数是生成的Java源文件所在的目录。
 
这样,就实现了在我们编译的时刻,通过gradle动态的去保留一个工程中一切的app类型的module,那到这里是不是就结束了呢,功能上其实已经实现了,但以后我又思索了一下,我们在编译一个工程的时刻,android-gradle-plugin这个插件总是会为我们生成一个BuildConfig类,这个类中其实也放的是一些编译期的一些信息,例如:是否是Debug,applictaionId等等,那我就在想,我直接将我们上面保留的信息,直接写入到这个plugin会主动帮我们生成的类不就能够了吗?于是我在最后又优化了一下我们的代码。
 
 
 
大家来看:
 
variants.all { BaseVariant variant ->
        if (variant instanceof ApplicationVariant) {
          //为generateBuildConfig这个Task添加额外Action
          def generateBuildConfig = variant.generateBuildConfig
          generateBuildConfig.doFirst {
            def modules = new StringBuilder()
            modulesSet.each {
              modules.append(it).append(',')
            }
            items.add(new ClassFieldImpl("String", "ALL_MODULES", "\"${modules}\""))
          }
      }
 
 
赢咖娱乐能够这样写呢,其实思路很简单,既然BuildConfig这个Java源文件在生成的时刻会写入原始的一些信息,那我们是不是找到生成BuildConfigo类的Task,然后为其添加一项我们自己的数据不就能够了吗,看起来确实是可行的,所以我们现在回过头来分析一下上面我最终实现的代码,我们通过variant.generateBuildConfig就找到了生成BuildConfig这个Java源文件的Task,然后我们知道Task都是能够为其添加Action的,所以我们最终通过generateBuildConfg.doFirst{}这个方法为其添加一个数据项即可。这样我们就完成了最终要实现的gradle部分的相关功能。
 
整个工程的代码还是比较复杂的,这里我只是复制出了gradle相关的一小部分代码,后面其实还有一个工程是专门为一切的app module去生成路由表,由于后面的功能主要是APT注解处置器的相关功能,与我们的gradle联系不大,所以就不再贴代码了。
 
好,到这里呢,我的这个需求部分就通过gradle完成动态的解决了,完全无需我们手动去修改,其实gradle的功能是非常强大的,我们写Java代码也好,JS代码也好等等,我们操纵的都是源码期,如果我们掌握了gradle就能够动态的操纵编译时期。对我们能力的提高是非常的有帮助的。最后附一张图,是android-gradle-plugin中各Task的一个执行顺序。(注意:大家只看绿色的Task即可,其它颜色是其它Porject中的Task),
 
如没特别注明,文章均为方维网络原创,转载请注明来自/news/4646.html

相关网站设计案例

相关推举新闻

【签约】深圳市誉兴集团学...

本系统主要收集学生的体检健康数据,对数据进行分析,从而得出一...

日期:2018-10-09 扫瞄次数:55

教你如何在小程序下处置分...

之前给大家介绍过如何在thinkphp下解决多个类别多选的方法,因为是...

日期:2018-10-09 扫瞄次数:79

如何制作兼容性很高的网页...

制作一个兼容性很高的网页不难,但是追求性价比与兼容性的成比例的...

日期:2018-10-09 扫瞄次数:86

前端开拓之能够让swiper3...

很喜欢在插件上进行修修改改。Swiper3是我很喜欢使用的一个轮播...

日期:2018-10-09 扫瞄次数:179

【签约】深圳市新冶组设计...

亚洲最具独创性与商业驱动力的娱乐文化空间设计机构 深圳新冶组...

日期:2018-10-09 扫瞄次数:292

方维网络:BAT小程序都来了 ...

看图说话: 上图是方维网络对BAT平台上热门小程序的排列。从上图...

日期:2018-10-09 扫瞄次数:306

【签约】浆糊网微信小程序...

非常感谢浆糊网对方维网络的相信与撑腰,双方协作已达五年多,协作过...

日期:2018-10-09 扫瞄次数:437

方维网络:有了小程序 还需...

我们先不解答标题中的问题。先看看如下两条线路: 第一次工业革命...

日期:2018-10-09 扫瞄次数:411

方维网站开拓:如何在网站设...

所谓爬虫,就是一种程序,其能够按照肯定的规则主动提取和收集网页...

日期:2018-10-09 扫瞄次数:358

小程序开拓公司方维网络:读...

近日,广发证券颁布了对腾讯的投资价值报告,方维网络查阅该报告的...

日期:2018-10-09 扫瞄次数:433

建站公司提供的建站售后服...

做一个网站,网站在上线之后,建站公司是否应该提供售后服务呢? 答案...

日期:2018-10-09 扫瞄次数:104

网站运营看待搜索引擎 是...

搜索引擎对于网站来说,是最大的“冤家”,网站优化的目的是为了能...

日期:2018-10-09 扫瞄次数:92

相关标签
微信平台开拓杏彩开户网站开拓PHP开拓网站开拓语言网站开拓旅游网站开拓
赢咖娱乐无极3娱乐
门户网站无极3娱乐商城网站无极3娱乐企业网站无极3娱乐
Sitemap
条评论
Sitemap
条评论