项目地址

  • 使用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仓库.

发布
  • 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
}
执行task

gradle自定义plugin实践之360多渠道加固打包相关推荐

  1. Gradle 自定义Plugin插件之360加固

    之前发布的文章:Gradle 自定义Plugin插件之上传APK到蒲公英.让我们知道了自定义插件的一些功能. 一般来说,在发布的时候,我们的APK都需要加固的,毕竟安全点.这里,我们就结合之前的插件, ...

  2. Gradle 自定义Plugin插件之发送钉钉通知

    在之前的文章中,我们介绍了怎么使用Gradle插件,apk加固,上传到蒲公英. 这篇文章,主要就是把流程进一步完善,通过Gradle插件实现:打包-加固-上传蒲公英-发送钉钉消息,实现完全自动化.. ...

  3. Gradle 自定义Plugin插件之上传APK到蒲公英

    在之前的文章:Gradle 自定义Plugin插件介绍 中,介绍了通过Gradle自定义插件的几种方式. 作为一个的Coder,我们当然不希望我们自定义插件只是简单的打印log啦.比如,之前我们版本开 ...

  4. Android Studio Gradle实践之多渠道自动化打包+版本号管理

    转: Android Studio Gradle实践之多渠道自动化打包+版本号管理 上次介绍了Android Studio的安装.配置和基本使用.这次讲一下Android Studio用到的打包工具G ...

  5. Gradle学习系列之十——自定义Plugin(本系列完)

    在本系列的上篇文章中,我们讲到了如何自定义Task类型,在本篇文章中,我们将讲到如何自定义Plugin. 请通过以下方式下载本系列文章的Github示例代码: git clone https://gi ...

  6. 【我的Android进阶之旅】Android自定义Lint实践

    背景 2017年8月份的时候,我在公司开始推广Lint.FindBugs等静态代码检测工具.然后发现系统自带的Lint检测的Issue不满足我们团队内部的特定需求,因此去自定义了部分Lint规则.这个 ...

  7. Android自定义Lint实践

    Android Lint是Google提供给Android开发者的静态代码检查工具.使用Lint对Android工程代码进行扫描和检查,可以发现代码潜在的问题,提醒程序员及早修正. 为保证代码质量,美 ...

  8. Android Gradle 自定义Task详解二:进阶

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78523958 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...

  9. Gradle自定义插件

    本教程介绍了创建Gradle独立自定义插件的方法. 它涵盖以下主题 创建任务,并在"自定义"插件中使用它 独立的自定义插件 简短的插件ID 使用settings.gradle自定义 ...

最新文章

  1. lisp 线性标注自动避让_泰州支重轮双头车自动化生产线
  2. jsp页面之间跳转的数据传递
  3. [导入]web2.0中流行的设计元素:颜色
  4. docker 如何加入kubernetes_使用 Kind 在 5 分钟内快速部署一个 Kubernetes 高可用集群...
  5. 第六章:双指针,BFS,和图论 【完结】
  6. findall与match、search区别及小括号的注意事项
  7. sublime说python找不到_sublime配置python运行环境
  8. 年薪 66万+,西澳大学招聘 CV DL Research Fellow(研究员)
  9. CV Code | 本周新出计算机视觉开源代码汇总(含实例分割、行人检测、姿态估计、神经架构搜索、超分辨率等)...
  10. CSS快速学习9:浏览器兼容
  11. 【转】关于动态库和静态库
  12. Easy RealMedia Producer使用向导
  13. gitlab设置项目组成员权限
  14. IuCS IuPS IuR IuB Uu接口
  15. GateWay 网关服务
  16. 郑州大学编译原理实验三算符优先分析算法JAVA
  17. 部署DHCP服务器与地址耗尽攻击
  18. php msvcr110,安装PHP时计算机错误丢失了msvcr110.dll
  19. 前端页面添加灰色滤镜,使网页整体变灰
  20. Pixhawk飞控代码(2019.11.28)

热门文章

  1. 初学uniapp上手项目
  2. i7 7700hq安装Linux,翻出了自己吃灰的IfunkS i7-7700HQ笔记本 装了个ubuntu跑个分
  3. python 爬虫登陆学校教务系统
  4. SkeyeARS 8K视频播放器软解码硬解码功能实现
  5. linux打开网络摄像头失败,Opencv没有检测到linux上的firewire网络摄像头
  6. 2014中国“云上贵州”大数据商业模式大赛在黔启动
  7. 看似“佛系”的手游《QQ炫舞》,背后的音频技术一点都不简单
  8. 关于SpaceBuilder简单的皮肤制作方式
  9. 使用micropython(ESP8266、ESP32)驱动SES 2.66寸墨水屏显示中文
  10. 家用是买轿车还是suv_SUV的完整形式是什么?