android加固 app插件化,自定义Gradle插件给应用加固
场景
当我们发布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插件给应用加固相关推荐
- 【Android Gradle 插件】自定义 Gradle 插件优化图片 ① ( Android 中的 WebP 图片格式使用 | WebP 格式转换 | WebP 参考文档 )
文章目录 一.Android 中的 WebP 图片格式使用 二.WebP 格式转换 三.WebP 参考文档 Android Plugin DSL Reference 参考文档 : Android St ...
- 【错误记录】自定义 Gradle 插件报错 ( Could not find implementation class x for plugin x specified in jar:file )
文章目录 一.报错信息 二.解决方案 一.报错信息 参考 [Android Gradle 插件]自定义 Gradle 插件模块 ④ ( META-INF 中声明自定义插件的核心类 | 在应用中依赖本地 ...
- Android组件化开发实践(九):自定义Gradle插件
本文紧接着前一章Android组件化开发实践(八):组件生命周期如何实现自动注册管理,主要讲解怎么通过自定义插件来实现组件生命周期的自动注册管理. 1. 采用groovy创建插件 新建一个Java L ...
- Android如何自定义Gradle插件
Android-如何自定义gradle插件 自定义gradle插件可以实现定制自己的构建流程,以达到复用目的: ##1. 自定义插件方式 自定义插件有三种方式 添加脚步 在你的app项目的build. ...
- 创建第一个适用于Android的自定义Gradle插件-第2部分:在构建时生成资源
A hands on tutorial to get started with adding custom functionality to your Android builds using Kot ...
- Android 自定义gradle插件
android自定义gradle插件的步骤 1.首先我们新建一个android项目 2.然后新建一个android module a.删除一些不需要的文件目录,然后新建groovy,resources ...
- 【Android 插件化】Hook 插件化框架总结 ( 插件包管理 | Hook Activity 启动流程 | Hook 插件包资源加载 ) ★★★
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
- Android 插件化,qihoo360插件方案。集成简单实用方便,兼容性高
Android 插件化,qihoo360插件方案 目录 Android 插件化,qihoo360插件方案 宿主App插件化: 插件App插件配置: 宿主调用插件App: 新建一个项目,开始配置 宿主插 ...
- android 插件化 方案,Android应用开发之Android 插件化,qihoo360插件方案配置教程
本文将带你了解Android应用开发Android 插件化,qihoo360插件方案配置教程,希望本文对大家学Android有所帮助. Android 插件化,qihoo360插件方案 目录 Andr ...
最新文章
- [error] - Build path is incomplete. Cannot find class file for org/aspectj/weaver/refl
- python元组和列表都支持的方法是_python_列表和元组
- AWT架构生成与设计Token
- HDU1061-Rightmost Digit(高速功率模)
- 利用Java生成静态HMTL页面的方法收集
- 对于白神贪心问题的感悟
- Nginx四层负载均衡模块添加
- 跟我学 Java 8 新特性之 Stream 流(四)并行流
- PyTorch官方教程中文版:PYTORCH之60MIN入门教程代码学习
- 提供写入的数据少于指定的数据_指定范围数据的汇总
- c51单片机汇编语言电梯,C51单片机汇编语言指令集.doc
- 【转载】移植FFMpeg到VC环境心得
- AI又成中国名片!杭州8分钟展示阿里无人车,马云压轴广发英雄帖
- Win7_D旗舰版_201906 twm000出品
- 阿里巴巴实习生 招聘内推
- Google Draco 源码解析
- 【记录】解决visio流程图复制到word中字符间距改变的问题
- 瑞吉外卖项目——瑞吉外卖
- 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
- CSU-ACM2017暑期训练5-三分 D - Toxophily HDU - 2298