场景

当我们发布app时候都会选择一个加固的形式给我们的apk加壳,本文章就360加固为例,如何用gradle的方式在我们apk生成后自动加固。

自定义插件

自定义插件其实说白了就是在gradle里面写代码,今天我们用独立项目的方式实现(Groovy语言)当然java、kotlin同样也可以实现。

项目结构图

我们新建一个项目MyJiaGuPlugin,在新建一个Module,在main里面新建groovy(放置代码)和resources目录(不能漏掉)

编写Groovy代码

定义扩展类

什么是扩展,大家都知道在项目的build.gradle里面可以看到这样的代码

android {

compileSdkVersion 29

buildToolsVersion "29.0.2"

defaultConfig {

applicationId "com.guosen.jiaguplugin"

minSdkVersion 21

targetSdkVersion 29

versionCode 1

versionName "1.0"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

}

buildTypes {

release {

minifyEnabled false

proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

}

}

}

复制代码

用{}括号起来的里面就是扩展属性,说白了就是传一些参数给插件类。那我们也开始定义一个,在groovy目录下面的com.guosen.jiagu里新建一个JiaGuAppInfoExtension的Groovy文件

package com.guosen.jiagu

class JiaGuAppInfoExtension{

String keyStorePath//签名路径

String keyStorePass//签名密码

String keyStoreKeyAlias//签名Alias

String keyStoreKeyAliasPwd//ALias密码

String outputPath//输出路径

String oldApkPath//旧的apk输入路径

String userName //360账号

String userPwd //360密码

String apkNewName //自定义配置apk的名称

String jiaguToolPath //加固工具存放的路径

}

复制代码

上面是我们要弄的插件所必需的一些参数。

编写插件类

插件类要实现Plugin接口

carbon.png

这个“JiaGuInfo”就是扩展属性名称,到时候,就是JIaGuInfo{......}这个形式,接下来我们定义Task,Task顾名思义就是任务,我们运行gradle的时候就是一系列的Task运行,我们定义自己的Task 来加固我们的应用,

carbon (1).png

Task类继承DefaultTask,group名就是

会在这里面找到你的Task。

添加主方法

我们定义一个doAction()方法(名称可以自己写)添加@TaskAction注解(表示该Task要执行的动作,它区别于doFirst和doLast)

class JiaGuAppTask extends DefaultTask {

@Input

ApplicationVariant variant;

@Input

Project targetProject

JiaGuAppTask(){

group = "guosen"

// dependsOn 'app:build'

}

@TaskAction

doAction(){

//打包完成

print '加固开始-------------------------'

复制代码

在执行这个Task的时候,我们的包已经生成,前提是你的Task 依赖于assembleBuild

然后获取必要参数

def keyStorePath = project.extensions.JiaGuInfo.keyStorePath

def keyStorePass = project.extensions.JiaGuInfo.keyStorePass

def keyStoreKeyAlias = project.extensions.JiaGuInfo.keyStoreKeyAlias

def keyStoreKeyAliasPass = project.extensions.JiaGuInfo.keyStoreKeyAliasPwd

def apkOutputDir = project.extensions.JiaGuInfo.outputPath

def jiaguTool = project.extensions.JiaGuInfo.jiaguToolPat

复制代码

下载加固工具

我们从官网上面下载加固jar,把文件夹放在任意位置,等下用到

定义一个执行命令行的函数

void execCmd(cmd){

project.exec {

executable 'bash'

args '-c', cmd

}

}

复制代码

执行加固

variant.outputs.each {

outputs->

def outFile = outputs.outputFile

if (outFile != null && outFile.name.endsWith('.apk')){

//360加固-登录

execCmd("java -jar ${jiaguTool} -login ${userName} ${userPwd}")

//360加固-签名信息配置

execCmd("java -jar ${jiaguTool} -importsign ${keyStorePath} ${keyStorePass} ${keyStoreKeyAlias} ${keyStoreKeyAliasPass}")

//360加固-开始加固

execCmd("java -jar ${jiaguTool} -jiagu ${outFile} ${apkOutputDir} -autosign -automulpkg")

print "加固完成-------------------------${outFile}"

}

}

复制代码

定义插件名称

我们在之前的resourse文件夹 里面新建一个Meta-inf.gradle--plugins

Guosen-jiagu.properties里面写上

implementation-class=com.guosen.jiagu.JiaGuAppPlugin

guosen-jiagu这个名称就是你的插件名称也就是道时候apply plugin : 'Guosen---jiagu'。到这边其实主要过程已经完成,详细代码,等下贴上。

上传到Maven

有两个,一个是上传到本地,一个是上传远端(私有服务器或者Jcenter)

本地

uploadArchives {

repositories.mavenDeployer {

repository(url: uri('../localMaven'))

pom.groupId = "com.guosen.jiagu"

pom.artifactId = "jiaguApp"

pom.version = "1.0.18"

}

}

复制代码

然后执行 "uploadArchives"

远端

可以参考源码的gradle写法

最后贴上地址 参考源码地址

android加固 app插件化,自定义Gradle插件给应用加固相关推荐

  1. 【Android Gradle 插件】自定义 Gradle 插件优化图片 ① ( Android 中的 WebP 图片格式使用 | WebP 格式转换 | WebP 参考文档 )

    文章目录 一.Android 中的 WebP 图片格式使用 二.WebP 格式转换 三.WebP 参考文档 Android Plugin DSL Reference 参考文档 : Android St ...

  2. 【错误记录】自定义 Gradle 插件报错 ( Could not find implementation class x for plugin x specified in jar:file )

    文章目录 一.报错信息 二.解决方案 一.报错信息 参考 [Android Gradle 插件]自定义 Gradle 插件模块 ④ ( META-INF 中声明自定义插件的核心类 | 在应用中依赖本地 ...

  3. Android组件化开发实践(九):自定义Gradle插件

    本文紧接着前一章Android组件化开发实践(八):组件生命周期如何实现自动注册管理,主要讲解怎么通过自定义插件来实现组件生命周期的自动注册管理. 1. 采用groovy创建插件 新建一个Java L ...

  4. Android如何自定义Gradle插件

    Android-如何自定义gradle插件 自定义gradle插件可以实现定制自己的构建流程,以达到复用目的: ##1. 自定义插件方式 自定义插件有三种方式 添加脚步 在你的app项目的build. ...

  5. 创建第一个适用于Android的自定义Gradle插件-第2部分:在构建时生成资源

    A hands on tutorial to get started with adding custom functionality to your Android builds using Kot ...

  6. Android 自定义gradle插件

    android自定义gradle插件的步骤 1.首先我们新建一个android项目 2.然后新建一个android module a.删除一些不需要的文件目录,然后新建groovy,resources ...

  7. 【Android 插件化】Hook 插件化框架总结 ( 插件包管理 | Hook Activity 启动流程 | Hook 插件包资源加载 ) ★★★

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  8. Android 插件化,qihoo360插件方案。集成简单实用方便,兼容性高

    Android 插件化,qihoo360插件方案 目录 Android 插件化,qihoo360插件方案 宿主App插件化: 插件App插件配置: 宿主调用插件App: 新建一个项目,开始配置 宿主插 ...

  9. android 插件化 方案,Android应用开发之Android 插件化,qihoo360插件方案配置教程

    本文将带你了解Android应用开发Android 插件化,qihoo360插件方案配置教程,希望本文对大家学Android有所帮助. Android 插件化,qihoo360插件方案 目录 Andr ...

最新文章

  1. [error] - Build path is incomplete. Cannot find class file for org/aspectj/weaver/refl
  2. python元组和列表都支持的方法是_python_列表和元组
  3. AWT架构生成与设计Token
  4. HDU1061-Rightmost Digit(高速功率模)
  5. 利用Java生成静态HMTL页面的方法收集
  6. 对于白神贪心问题的感悟
  7. Nginx四层负载均衡模块添加
  8. 跟我学 Java 8 新特性之 Stream 流(四)并行流
  9. PyTorch官方教程中文版:PYTORCH之60MIN入门教程代码学习
  10. 提供写入的数据少于指定的数据_指定范围数据的汇总
  11. c51单片机汇编语言电梯,C51单片机汇编语言指令集.doc
  12. 【转载】移植FFMpeg到VC环境心得
  13. AI又成中国名片!杭州8分钟展示阿里无人车,马云压轴广发英雄帖
  14. Win7_D旗舰版_201906 twm000出品
  15. 阿里巴巴实习生 招聘内推
  16. Google Draco 源码解析
  17. 【记录】解决visio流程图复制到word中字符间距改变的问题
  18. 瑞吉外卖项目——瑞吉外卖
  19. 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
  20. CSU-ACM2017暑期训练5-三分 D - Toxophily HDU - 2298

热门文章

  1. Anduino DIY 共享充电宝
  2. python 拼多多_拼多多2018校招编程题汇总 Python实现
  3. # 1987年的那件神秘的往事
  4. Android通用组件设计案例
  5. ie11强制兼容模式打开
  6. 10.自定义异常 -- 数据库数据查询异常
  7. 使用android studio时酷狗音乐,17 Android Studio开发实战:音乐播放器——浪花音乐...
  8. C++操作Word文档——插入分页符
  9. 计算机毕业设计(附源码)python医院药品进销存系统
  10. 整理了一些上课学dw的笔记