`
buddie
  • 浏览: 185570 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Gradle完全自定义启动脚本的变通实现

阅读更多

项目使用Gradle做打包工具,使用了Application插件,但其自动生成的启动脚本,不能满足项目的需要,需要自定义启动脚本。我的上一篇文章是通过文件复制、重命名,然后在打包的时候,放到包中。有兴趣的同学可以查看http://buddie.iteye.com/blog/2358311

但上次的实现方式有两个问题无法解决:

1、权限问题

尽量生成脚本时,通过程序为脚本文件添加了执行文件,但脚本被打到包中,再解压之后,权限就变化了(现在想应该也可以解决,可以把生成的脚本也直接放到target/scripts目录下)

2、文件格式问题

开发环境是Windows,文件的是DOS格式,而不是UNIX格式,生成的脚本到Linux服务器上,需要通过:set ff=unix来较正,这点很不人性化

 

现在花了些时间研究了下,看一下Gradle中CreateStartScripts接口相关的源码,找到了解决方案。

原理简单粗爆:依然通过模板来生成脚本,只不过不是使用Copy,而是手动读取模板文件的内容,加上换行符“\n“,替换变量,然后把内容写入到target/scripts目录下,并增加权限。

 

这样做,第一解决了DOS格式与UNIX文件格式的问题,换行符”\r\n“换成了"\n"。其实解决了执行权限问题,因为application自动生成的脚本就放在这个目录下,而打包后,权限是保留的。那我也脚本放到这个目录下。实验结果证明了我的做法。

 

代码如下:build.gradle

import org.apache.tools.ant.taskdefs.Chmod
startScripts << {
    File template = new File("src/script/launch.model")
    List<String> lines = template.readLines("UTF-8")
    java.lang.StringBuffer buffer = new StringBuffer()
    for (String line : lines) {
        buffer.append(line).append("\n")
    }
    String shellContent = buffer.toString()
    shellContent = shellContent.replaceAll("@gradleProjName@", applicationName)
    shellContent = shellContent.replaceAll("@gradleVersion@", pk_version)
    TextUtil.convertLineSeparators(shellContent, "\n")
    File outFile = new File(getProject().getBuildDir().getPath() + "/scripts/launch.sh")
    Writer writer = new FileWriter(outFile)
    writer.write(new String(shellContent.getBytes("UTF-8")))
    writer.flush()
    writer.close()
    Chmod chmod = new Chmod()
    chmod.setFile(outFile)
    chmod.setPerm("ugo+rx")
    chmod.setProject(AntUtil.createProject())
    chmod.execute()
}

 

分享到:
评论

相关推荐

    Gradle中如何自定义实现Java注解处理器

    在本篇文章中,我们将深入探讨如何在Gradle项目中自定义实现Java注解处理器。 首先,我们需要了解注解处理器的工作原理。Java的注解处理器是在JDK的`javax.annotation.processing`包中定义的,主要由`Processor`...

    清除gradle产生的 lock文件脚本

    清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件...

    AndroidStudio自定义Gradle插件

    本篇文章将深入探讨如何在Android Studio中自定义Gradle插件,以此来扩展和优化项目的构建流程。 一、Gradle插件概述 Gradle插件是一种可复用的构建逻辑,它们可以被应用到Gradle项目中以执行特定任务,如编译代码...

    IntelliJ IDEA导入Gradle项目,并启动项目.docx

    **IntelliJ IDEA导入Gradle项目并启动项目详解** 在软件开发中,IntelliJ IDEA是一款广泛使用的Java集成开发环境,而Gradle则是一个强大的构建工具。本篇将详细介绍如何在IntelliJ IDEA中导入Gradle项目并启动项目...

    解决duplicate_file的自定义脚本react_gradle

    为了解决这个问题,开发者通常需要创建自定义的Gradle脚本来进行处理。本文将详细介绍如何通过一个名为`react_gradle`的自定义脚本来解决`duplicate_file`问题,并讨论与之相关的`jenkins`自动化构建。 首先,我们...

    自定义Gradle插件

    总结,自定义Gradle插件能让你更好地控制构建过程,无论是修改编译后的class文件以实现特定功能,还是监控Task执行情况以优化构建流程,都能通过编写插件轻松实现。掌握这一技能,将极大地提升你在Android开发中的...

    Gradle自定义插件.7z

    总结,Gradle自定义插件提供了强大的灵活性,无论是通过简单的脚本插件还是复杂的Java插件,都能满足各种项目需求。了解并掌握这些技巧,可以使你的Gradle构建过程更加高效和个性化。在实际开发中,结合个人博客的...

    android studio 3.0 gradle 打包脚本配置详解

    1. 输出文件配置:在 Android Studio 3.0 中,可以通过配置 Gradle 打包脚本来实现输出文件的自定义命名、路径等。例如: ``` def fileArray = [] android.applicationVariants.all { variant -&gt; variant.outputs....

    Gradle脚本上传Apk到蒲公英应用平台Demo

    要使用Gradle脚本上传APK,你需要首先在项目级`build.gradle`文件中添加蒲公英的Gradle插件依赖。在`buildscript`闭包内,添加蒲公英的maven仓库和对应的插件依赖: ```groovy buildscript { repositories { ...

    Gradle自定义插件

    本篇文章将深入探讨如何在Gradle中创建自定义插件,以提升项目的可扩展性和复用性。 首先,我们需要理解Gradle插件的基本概念。Gradle插件是一组任务和配置,用于扩展Gradle的功能。它们可以是预定义的(如Java、...

    通过自定义Gradle插件修改编译后的class文件

    在Java开发中,Gradle是一种广泛应用的构建自动化工具,它允许开发者通过编写Groovy或Kotlin DSL脚本来管理项目的构建过程。自定义Gradle插件是Gradle的强大特性之一,可以扩展其功能以满足特定项目需求。本篇将详细...

    gradle中的properties文件详解

    本文侧重于了解自定义properties文件,以及properties中的数据格式,在gradle中如何使用等知识点。 一、概述 在Android Studio 创建一个项目的时候,rootProject下面会生成gradle.properties和local.properties文件...

    gradle guide.pdf

    用户还可以通过命令行接口(CLI)来控制 Gradle 的构建行为,或者利用 Gradle 提供的 API 和 DSL 来编写自定义构建脚本。 总之,Gradle 是一个功能强大且灵活的构建工具,适用于多种语言和平台的项目构建。学习和...

    Gradle脚本的整洁之道--编写高质量的Gradle脚本.pdf

    在这份标题为“Gradle脚本的整洁之道--编写高质量的Gradle脚本.pdf”的文档中,我们可以推断出主要内容涉及如何编写清晰、高效、易于维护的Gradle自动化脚本。以下是根据给定的文件信息,推断出的可能的知识点: 1....

    gradle2.6-2.8

    1. **基于Groovy的DSL(领域特定语言)**:Gradle的构建脚本是用Groovy编写的,这是一种动态、灵活的编程语言,相比传统的XML配置更易读、更易写。 2. **灵活性**:Gradle允许自定义构建逻辑,同时支持多种构建模型...

    learn-gradle:示例 gradle 脚本

    《深入理解Gradle:以learn-gradle示例脚本为引导》 Gradle,作为一款强大的构建自动化工具,广泛应用于Java、JavaScript等项目的构建管理。它以其灵活的配置、强大的插件支持以及对多种语言的支持,赢得了开发者的...

    Gradle的如下版本gradle-6.6.1-bin.rar

    - `init.d`目录:存放初始化脚本,可以在Gradle启动时执行。 在安装Gradle 6.6.1后,你可以通过`gradle -v`命令来验证安装是否成功,并通过`gradle help`获取基本的命令帮助。对于Java或Android开发者,可以通过在...

    gradle-8.1-bin.zip

    5. **init.d 文件夹**(可能包含):此文件夹可以包含初始化脚本,这些脚本在每个Gradle会话开始时运行,允许自定义Gradle的行为。 6. **wrapper 文件夹**(可能包含):如果提供,Gradle Wrapper是一个小的脚本和...

Global site tag (gtag.js) - Google Analytics