项目使用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产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件...
博客中实现的源代码
使用AndroidStudio自定义Gradle插件源代码,https://blog.csdn.net/heart2016/article/details/85257133
自定义gradle插件实现,以及通过插件来修改编译后的class文件和监控Task任务执行情况
关于gradle自定义插件的生成的三种方式结合我的博客的详细描述使用
本文侧重于了解自定义properties文件,以及properties中的数据格式,在gradle中如何使用等知识点。 一、概述 在Android Studio 创建一个项目的时候,rootProject下面会生成gradle.properties和local.properties文件...
在AndroidStudio利用Gradle脚本上传Apk到蒲公英应用平台
解决duplicate_file的自定义脚本react.gradle文件,替换目录.\node_modules\react-native\react.gradle文件即可
主要介绍了android studio 3.0 gradle 打包脚本配置详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
主要介绍了为Android Studio编写自定义Gradle插件的教程,Android Studio现在基本上已经成为了安卓开发的标配IDE,友可以参考下
通过自定义Gradle插件,修改class文件
Android-Kotlin-MVI-CleanArchitecture:Android + Kotlin +模块化+ Gradle Depedency管理+用Kotlin DSL编写的Gradle +自定义Gradle插件+ MVVM + MVI +清洁架构+存储库模式+协程+流程+ Koin + Retrofit2 + ROOM + ...
学习-gradle 示例 gradle 脚本
在Java项目中使用Gradle创建自定义的Tailwind CSS构建此gradle项目创建一个自定义的Tailwind CSS项目。 您可以通过运行来触发它./gradlew :css:build 您可以启动示例服务器,以通过提供自定义CSS构建的示例服务器./...
AndroidStudioNDKBuildBase 使用 Gradle 运行自定义构建以构建本机源的基本项目结构我还添加了 OpenCV SDK for Android 作为使用外部库的示例,并包含 OpenCV 教程的示例,因此它不再使用管理器应用程序。...
Android studio 自定义安装(jdk配置、gradle配置以及模拟机配置)
使用Kotlin脚本实现gradle-java项目,gradle可以使用goovy和kotlin两种语言实现,此Demo主要是用kotlin脚本实现的gradle项目管理,熟悉kotlin脚本的编写,实现可编程的脚本控制,内附一简单测试代码。
是一份PPT Gradle脚本的整洁之道--编写高质量的Gradle脚本
详见https://blog.csdn.net/huaxun66/article/details/103497369