gradle自定义plugin实践之360多渠道加固打包
项目地址
- 使用AndroidStudio新建一个工程或者新建一个module,
在src/main下新建两个文件夹,groovy、resources,
PS:这里的名字其实叫什么都可以,之前的java、res我们可以直接删除。
- 修改app文件夹下的build.gradle文件
apply plugin: 'groovy'
apply plugin: 'maven'sourceSets {main {groovy {srcDir 'src/main/groovy'//指定groovy目录}resources {srcDir 'src/main/resources'//指定resources目录}}
}dependencies {//这里根据插件需要,添加对应的依赖implementation gradleApi()implementation localGroovy()
}
repositories {mavenCentral()
}
- 在resources/META-INF/gradle-plugins目录中新建com.ysjk.plugin.reinforceApp.properties文件,这个文件名就是使用插件时要apply的名字,我这里是com.ysjk.plugin.reinforceApp,在这个文件中写入以下代码:
implementation-class=com.ysjk.plugin.ReinforceAppPlugin
- 在groovy目录中新建PublishAppPlugin.groovy文件,实现Plugin接口
class ReinforceAppPlugin implements Plugin<Project> {@Overridevoid apply(Project project) {project.extensions.create("reinforceAppInfo", ReinforceAppInfoExtension.class)project.tasks.create("reinforceApp", ReinforceAppTask.class)}
}
- 定义参数ReinforceAppInfoExtension
根据我们的需求,我们需要以下参数。
360加固包的路径
签名文件的路径、密码信息
渠道文件的路径
文件输出路径
class PublishAppInfoExtension {String qihuPath //360加固包(jiagu.jar)的文件路径String keyStorePath //keyStor文件路径String keyStorePass //keyStor密码String keyStoreKeyAlias //keyStoreKeyAliasString keyStoreKeyAliasPass //keyStoreKeyAlias密码String channelPath //渠道文件路径String outputPath //文件夹输出路径
}
- 自定义ReinforceAppTask
@TaskAction注解是任务执行的方法,会在执行阶段执行,因为我们的任务是依赖于build的,所以当我们的任务执行时,打包已经完成了。
class ReinforceAppTask extends DefaultTask {ReinforceAppTask() {group = 'ysjk'description = 'reinforce app'dependsOn("build")}@TaskActionvoid doAction() {def oldApkPath = project.extensions.reinforceAppInfo.apkPathdef qhJar = project.extensions.reinforceAppInfo.qihuPathdef keyStorePath = project.extensions.reinforceAppInfo.keyStorePathdef keyStorePass = project.extensions.reinforceAppInfo.keyStorePassdef keyStoreKeyAlias = project.extensions.reinforceAppInfo.keyStoreKeyAliasdef keyStoreKeyAliasPass = project.extensions.reinforceAppInfo.keyStoreKeyAliasPassexecCmd("java -jar ${qhJar} -login 360账号 密码")execCmd("java -jar ${qhJar} -importsign ${keyStorePath} ${keyStorePass} ${keyStoreKeyAlias} ${keyStoreKeyAliasPass}")execCmd("java -jar ${qhJar} -importmulpkg ${project.extensions.reinforceAppInfo.channelPath}")def outputPath = project.extensions.reinforceAppInfo.outputPathif (!outputPath.endsWith("/")) {outputPath += "/"}def projectName = project.extensions.reinforceAppInfo.projectNamedef projectVersion = project.extensions.reinforceAppInfo.projectVersiondef apkOutputDir = outputPathif (projectName){apkOutputDir += projectName}if (projectVersion){apkOutputDir += projectVersion}def tmp = new File(apkOutputDir)if (!tmp.exists()) {tmp.mkdirs()}execCmd("java -jar ${qhJar} -jiagu ${oldApkPath} ${apkOutputDir} -autosign -automulpkg")}void execCmd(cmd) {project.exec {executable 'bash'args '-c', cmd}}
}
这里参考360加固的命令行加固相关文档即可,建议路径为相对路径。
- 发布plugin
uploadArchives {repositories {mavenDeployer {//设置插件的GAV参数pom.groupId = 'com.ysjk.gradle.plugin'pom.artifactId = 'reinforce'pom.version = '1.0.2'pom.packaging = 'jar'//文件发布到下面目录
// repository(url: 'file:Users/keecham/project/PublishPlugin/localMaven')repository(url: 'http://192.168.1.80:8081/nexus/content/repositories/YsjkPlugin'){authentication(userName: 'admin',password: 'admin123')// maven授权信息}}}
}
发布到maven仓库.
![](/assets/blank.gif)
- 8.使用
repositories增加我们的maven地址
maven { url 'http://192.168.1.80:8081/nexus/content/repositories/YsjkPlugin/' }
dependencies增加我们的插件
classpath 'com.ysjk.gradle.plugin:reinforce:1.0.2'
引入我们的插件
apply plugin: 'com.ysjk.plugin.reinforceApp'
配置加固信息
reinforceAppInfo {qihuPath = '/Users/keecham/Downloads/360firm_mac/jiagu/jiagu.jar'apkPath = "${project.rootDir.absolutePath + "/apk/"}com.user.baiyaohealth${rootProject.ext.versionName}_prod-release.apk"keyStorePath = 'jksfile/ynbyRelease.jks'keyStorePass = '1'keyStoreKeyAlias = '2'keyStoreKeyAliasPass = '3'channelPath = '/Users/keecham/Desktop/account.txt'outputPath = '/Users/keecham/Desktop/prod'projectName = 'ysjk'projectVersion = rootProject.ext.versionName
}
![](/assets/blank.gif)
gradle自定义plugin实践之360多渠道加固打包相关推荐
- Gradle 自定义Plugin插件之360加固
之前发布的文章:Gradle 自定义Plugin插件之上传APK到蒲公英.让我们知道了自定义插件的一些功能. 一般来说,在发布的时候,我们的APK都需要加固的,毕竟安全点.这里,我们就结合之前的插件, ...
- Gradle 自定义Plugin插件之发送钉钉通知
在之前的文章中,我们介绍了怎么使用Gradle插件,apk加固,上传到蒲公英. 这篇文章,主要就是把流程进一步完善,通过Gradle插件实现:打包-加固-上传蒲公英-发送钉钉消息,实现完全自动化.. ...
- Gradle 自定义Plugin插件之上传APK到蒲公英
在之前的文章:Gradle 自定义Plugin插件介绍 中,介绍了通过Gradle自定义插件的几种方式. 作为一个的Coder,我们当然不希望我们自定义插件只是简单的打印log啦.比如,之前我们版本开 ...
- Android Studio Gradle实践之多渠道自动化打包+版本号管理
转: Android Studio Gradle实践之多渠道自动化打包+版本号管理 上次介绍了Android Studio的安装.配置和基本使用.这次讲一下Android Studio用到的打包工具G ...
- Gradle学习系列之十——自定义Plugin(本系列完)
在本系列的上篇文章中,我们讲到了如何自定义Task类型,在本篇文章中,我们将讲到如何自定义Plugin. 请通过以下方式下载本系列文章的Github示例代码: git clone https://gi ...
- 【我的Android进阶之旅】Android自定义Lint实践
背景 2017年8月份的时候,我在公司开始推广Lint.FindBugs等静态代码检测工具.然后发现系统自带的Lint检测的Issue不满足我们团队内部的特定需求,因此去自定义了部分Lint规则.这个 ...
- Android自定义Lint实践
Android Lint是Google提供给Android开发者的静态代码检查工具.使用Lint对Android工程代码进行扫描和检查,可以发现代码潜在的问题,提醒程序员及早修正. 为保证代码质量,美 ...
- Android Gradle 自定义Task详解二:进阶
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78523958 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...
- Gradle自定义插件
本教程介绍了创建Gradle独立自定义插件的方法. 它涵盖以下主题 创建任务,并在"自定义"插件中使用它 独立的自定义插件 简短的插件ID 使用settings.gradle自定义 ...
最新文章
- lisp 线性标注自动避让_泰州支重轮双头车自动化生产线
- jsp页面之间跳转的数据传递
- [导入]web2.0中流行的设计元素:颜色
- docker 如何加入kubernetes_使用 Kind 在 5 分钟内快速部署一个 Kubernetes 高可用集群...
- 第六章:双指针,BFS,和图论 【完结】
- findall与match、search区别及小括号的注意事项
- sublime说python找不到_sublime配置python运行环境
- 年薪 66万+,西澳大学招聘 CV DL Research Fellow(研究员)
- CV Code | 本周新出计算机视觉开源代码汇总(含实例分割、行人检测、姿态估计、神经架构搜索、超分辨率等)...
- CSS快速学习9:浏览器兼容
- 【转】关于动态库和静态库
- Easy RealMedia Producer使用向导
- gitlab设置项目组成员权限
- IuCS IuPS IuR IuB Uu接口
- GateWay 网关服务
- 郑州大学编译原理实验三算符优先分析算法JAVA
- 部署DHCP服务器与地址耗尽攻击
- php msvcr110,安装PHP时计算机错误丢失了msvcr110.dll
- 前端页面添加灰色滤镜,使网页整体变灰
- Pixhawk飞控代码(2019.11.28)
热门文章
- 初学uniapp上手项目
- i7 7700hq安装Linux,翻出了自己吃灰的IfunkS i7-7700HQ笔记本 装了个ubuntu跑个分
- python 爬虫登陆学校教务系统
- SkeyeARS 8K视频播放器软解码硬解码功能实现
- linux打开网络摄像头失败,Opencv没有检测到linux上的firewire网络摄像头
- 2014中国“云上贵州”大数据商业模式大赛在黔启动
- 看似“佛系”的手游《QQ炫舞》,背后的音频技术一点都不简单
- 关于SpaceBuilder简单的皮肤制作方式
- 使用micropython(ESP8266、ESP32)驱动SES 2.66寸墨水屏显示中文
- 家用是买轿车还是suv_SUV的完整形式是什么?