- 使用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> {
@Override
void 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 //keyStoreKeyAlias
String keyStoreKeyAliasPass //keyStoreKeyAlias密码
String channelPath //渠道文件路径
String outputPath //文件夹输出路径
}
- 自定义ReinforceAppTask
@TaskAction注解是任务执行的方法,会在执行阶段执行,因为我们的任务是依赖于build的,所以当我们的任务执行时,打包已经完成了。
class ReinforceAppTask extends DefaultTask {
ReinforceAppTask() {
group = 'ysjk'
description = 'reinforce app'
dependsOn("build")
}
@TaskAction
void doAction() {
def oldApkPath = project.extensions.reinforceAppInfo.apkPath
def qhJar = project.extensions.reinforceAppInfo.qihuPath
def keyStorePath = project.extensions.reinforceAppInfo.keyStorePath
def keyStorePass = project.extensions.reinforceAppInfo.keyStorePass
def keyStoreKeyAlias = project.extensions.reinforceAppInfo.keyStoreKeyAlias
def keyStoreKeyAliasPass = project.extensions.reinforceAppInfo.keyStoreKeyAliasPass
execCmd("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.outputPath
if (!outputPath.endsWith("/")) {
outputPath += "/"
}
def projectName = project.extensions.reinforceAppInfo.projectName
def projectVersion = project.extensions.reinforceAppInfo.projectVersion
def apkOutputDir = outputPath
if (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
网友评论