- 使用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
}