项目使用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注解处理器。 首先,我们需要了解注解处理器的工作原理。Java的注解处理器是在JDK的`javax.annotation.processing`包中定义的,主要由`Processor`...
清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件...
本篇文章将深入探讨如何在Android Studio中自定义Gradle插件,以此来扩展和优化项目的构建流程。 一、Gradle插件概述 Gradle插件是一种可复用的构建逻辑,它们可以被应用到Gradle项目中以执行特定任务,如编译代码...
**IntelliJ IDEA导入Gradle项目并启动项目详解** 在软件开发中,IntelliJ IDEA是一款广泛使用的Java集成开发环境,而Gradle则是一个强大的构建工具。本篇将详细介绍如何在IntelliJ IDEA中导入Gradle项目并启动项目...
为了解决这个问题,开发者通常需要创建自定义的Gradle脚本来进行处理。本文将详细介绍如何通过一个名为`react_gradle`的自定义脚本来解决`duplicate_file`问题,并讨论与之相关的`jenkins`自动化构建。 首先,我们...
总结,自定义Gradle插件能让你更好地控制构建过程,无论是修改编译后的class文件以实现特定功能,还是监控Task执行情况以优化构建流程,都能通过编写插件轻松实现。掌握这一技能,将极大地提升你在Android开发中的...
总结,Gradle自定义插件提供了强大的灵活性,无论是通过简单的脚本插件还是复杂的Java插件,都能满足各种项目需求。了解并掌握这些技巧,可以使你的Gradle构建过程更加高效和个性化。在实际开发中,结合个人博客的...
1. 输出文件配置:在 Android Studio 3.0 中,可以通过配置 Gradle 打包脚本来实现输出文件的自定义命名、路径等。例如: ``` def fileArray = [] android.applicationVariants.all { variant -> variant.outputs....
要使用Gradle脚本上传APK,你需要首先在项目级`build.gradle`文件中添加蒲公英的Gradle插件依赖。在`buildscript`闭包内,添加蒲公英的maven仓库和对应的插件依赖: ```groovy buildscript { repositories { ...
本篇文章将深入探讨如何在Gradle中创建自定义插件,以提升项目的可扩展性和复用性。 首先,我们需要理解Gradle插件的基本概念。Gradle插件是一组任务和配置,用于扩展Gradle的功能。它们可以是预定义的(如Java、...
本文侧重于了解自定义properties文件,以及properties中的数据格式,在gradle中如何使用等知识点。 一、概述 在Android Studio 创建一个项目的时候,rootProject下面会生成gradle.properties和local.properties文件...
在Java开发中,Gradle是一种广泛应用的构建自动化工具,它允许开发者通过编写Groovy或Kotlin DSL脚本来管理项目的构建过程。自定义Gradle插件是Gradle的强大特性之一,可以扩展其功能以满足特定项目需求。本篇将详细...
用户还可以通过命令行接口(CLI)来控制 Gradle 的构建行为,或者利用 Gradle 提供的 API 和 DSL 来编写自定义构建脚本。 总之,Gradle 是一个功能强大且灵活的构建工具,适用于多种语言和平台的项目构建。学习和...
在这份标题为“Gradle脚本的整洁之道--编写高质量的Gradle脚本.pdf”的文档中,我们可以推断出主要内容涉及如何编写清晰、高效、易于维护的Gradle自动化脚本。以下是根据给定的文件信息,推断出的可能的知识点: 1....
1. **基于Groovy的DSL(领域特定语言)**:Gradle的构建脚本是用Groovy编写的,这是一种动态、灵活的编程语言,相比传统的XML配置更易读、更易写。 2. **灵活性**:Gradle允许自定义构建逻辑,同时支持多种构建模型...
《深入理解Gradle:以learn-gradle示例脚本为引导》 Gradle,作为一款强大的构建自动化工具,广泛应用于Java、JavaScript等项目的构建管理。它以其灵活的配置、强大的插件支持以及对多种语言的支持,赢得了开发者的...
- `init.d`目录:存放初始化脚本,可以在Gradle启动时执行。 在安装Gradle 6.6.1后,你可以通过`gradle -v`命令来验证安装是否成功,并通过`gradle help`获取基本的命令帮助。对于Java或Android开发者,可以通过在...
5. **init.d 文件夹**(可能包含):此文件夹可以包含初始化脚本,这些脚本在每个Gradle会话开始时运行,允许自定义Gradle的行为。 6. **wrapper 文件夹**(可能包含):如果提供,Gradle Wrapper是一个小的脚本和...