目錄
前言
平時我們打包生成apk后可能需要進行加固,如果每次手動去打開加固軟件然后再去加固非常的麻煩,因此我們可以通過自定義Gradle插件來幫我們自動完成手形,這里我用的是360加固,360加固給我們提供了一個命令行的幫助文檔如下
-login <username> 首次使用必須先登錄 <360用戶名>
<password> <登錄密碼>
-importsign <keystore_path> 導(dǎo)入簽名信息 <密鑰路徑>
<keystore_password> <密鑰密碼>
<alias> <別名>
<alias_password> <別名密碼>
-importmulpkg <mulpkg_filepath> 導(dǎo)入多渠道配置信息抱完,txt格式
-showsign 查看已配置的簽名信息
-showmulpkg 查看已配置的多渠道信息
-deletemulpkg 清除已配置的多渠道信息
-help 顯示幫助信息
-config 配置加固可選項
----------------------可選增強服務(wù)-------------------------------
[-crashlog] 【崩潰日志分析】
[-x86] 【x86支持】
[-analyse] 【加固數(shù)據(jù)分析】
[-nocert] 【跳過簽名校驗】
[-piracy] 【盜版監(jiān)測】
----------------------高級加固選項-------------------------------
[-vmp] 【全VMP保護】
[-data] 【本地數(shù)據(jù)文件保護】
[-assets] 【資源文件保護】
[-filecheck] 【文件完整性校驗】
[-ptrace] 【Ptrace防注入】
[-so] 【SO文件保護】
[-dex2c] 【dex2C保護】
[-string_obfus] 【字符串加密】
[-dex_shadow] 【DexShadow】
[-so_private] 【SO防盜用】
[-double_check] 【雙開檢測】
-----------------------------------------------------------------
-config_so 配置需要加固的SO文件抛猫,以空格分隔
-config_assets 配置需要忽略的資源文件蟆盹,以空格分隔
-config_so_private 配置防盜用的SO文件,以空格分隔
-showconfig 顯示已配置加固項
-version 顯示當(dāng)前版本號
-update 升級到最新版本
-jiagu <inputAPKpath> 加固命令 <APK路徑>
<outputPath> <輸出路徑>
[-autosign] 【自動簽名】
[-automulpkg] 【自動多渠道】
[-pkgparam mulpkg_filepath] 【自定義文件生成多渠道】
相關(guān)文章
實現(xiàn)步驟
1.新建Module
我們新建一個名為JiaguPlugin的Module
2.調(diào)整build.gradle
調(diào)整build.gradle為如下所示(這里我使用Kotlin開發(fā))
plugins {
id 'java-library'
id 'kotlin'
id 'maven'
}
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
repositories {
mavenCentral()
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation "com.android.tools.build:gradle:4.2.1" //安卓插件
implementation gradleApi()
implementation localGroovy()
}
group='com.itfitness.plugin' //組名
version='1.0.0' //版本號
archivesBaseName='jiagu' //工程名
//生成本地庫
uploadArchives{
repositories {
mavenDeployer{
repository(url: uri('../Plugins'))
}
}
}
3.創(chuàng)建Plugin類
創(chuàng)建一個JiaguPlugin類
package com.itfitness.jiaguplugin
import org.gradle.api.Plugin
import org.gradle.api.Project
class JiaguPlugin:Plugin<Project>{
override fun apply(project: Project) {
}
}
然后創(chuàng)建resources目錄并創(chuàng)建插件的配置文件
配置文件的內(nèi)容如下:
implementation-class=com.itfitness.jiaguplugin.JiaguPlugin
4.編寫Plugin
1)創(chuàng)建一個擴展
這里我們創(chuàng)建的擴展名為jiagu闺金,這個就好像app下build.gradle中的android擴展一樣
class JiaguPlugin:Plugin<Project>{
override fun apply(project: Project) {
//獲取配置中的參數(shù)(對應(yīng)app下build.gradle中的 jiagu{})
val jiaguParams = project.extensions.create("jiagu",JiaguParams::class.java)
}
}
我們擴展中的參數(shù)是JiaguParams中的參數(shù)
open class JiaguParams{
var jiaguJarFilePath = "" //加固用的jar包路徑
var userName:String = "" //登錄360的賬號
var password:String = "" //登錄360的密碼
var keystorePath:String = "" //秘鑰文件路徑
var keystorePassword:String = "" //秘鑰文件密碼
var alias:String = "" //秘鑰別名
var aliasPassword:String = "" //別名密碼
}
2)添加監(jiān)聽
添加一個讀取完配置信息后的回調(diào)
class JiaguPlugin:Plugin<Project>{
override fun apply(project: Project) {
//獲取配置中的參數(shù)(對應(yīng)app下build.gradle中的 jiagu{})
val jiaguParams = project.extensions.create("jiagu",JiaguParams::class.java)
//讀取完配置后的監(jiān)聽
project.afterEvaluate {
println(jiaguParams.userName)
}
}
}
然后我們先將我們的插件上傳到Maven倉庫逾滥,也就是執(zhí)行插件build.gradle的這個Task,這里我上傳到了項目下的Plugins文件夾下
然后我們在項目的build.gradle文件里引入
然后在app的build.gradle文件做如下配置
plugins {
id 'com.android.application'
id 'kotlin-android'
//應(yīng)用加固插件
id 'com.itfitness.jiaguplugin'
}
jiagu{
userName '測試賬號'
}
我們同步一下發(fā)現(xiàn)打印如下信息就證明我們的插件可以正常使用了
3)增加apk加固任務(wù)
這里我們是通過AppExtension獲取輸出的Apk的路徑然后動態(tài)創(chuàng)建Task(比如默認有debug和release那就會創(chuàng)建兩個Task)
class JiaguPlugin:Plugin<Project>{
override fun apply(project: Project) {
//獲取配置中的參數(shù)(對應(yīng)app下build.gradle中的 jiagu{})
val jiaguParams = project.extensions.create("jiagu",JiaguParams::class.java)
//讀取完配置后的監(jiān)聽
project.afterEvaluate {
//獲取android{}中的配置
val appExtension = project.extensions.getByType(AppExtension::class.java)
//讀取applicationVariants
appExtension.applicationVariants.all { applicationVariant->
applicationVariant.outputs.all { output->
//動態(tài)創(chuàng)建output名字相關(guān)的任務(wù)(比如這里默認有debug和release败匹,如果有多渠道包的話還會有更多)寨昙,最后的兩個參數(shù)是JiaguTask的構(gòu)造函數(shù)需要的
project.tasks.create("jiagu" + output.name,JiaguTask::class.java,output.outputFile,jiaguParams)
}
}
}
}
}
加固的任務(wù)類JiaguTask如下,這里的命令是參照文章開頭360加固的help文件:
open class JiaguTask @Inject constructor(
val apkFile: File,
val jiaguParams: JiaguParams
) : DefaultTask() {
init {
//給Task創(chuàng)建一個分組
group = "jiagu"
}
@TaskAction
fun jiagu(){
//登錄360加固
project.exec {
it.commandLine("java","-jar",jiaguParams.jiaguJarFilePath,"-login",jiaguParams.userName,jiaguParams.password)
}
//導(dǎo)入簽名文件
project.exec {
it.commandLine("java","-jar",jiaguParams.jiaguJarFilePath,"-importsign",
jiaguParams.keystorePath,jiaguParams.keystorePassword,jiaguParams.alias,jiaguParams.aliasPassword)
}
//進行加固掀亩,并且自動簽名
project.exec {
it.commandLine("java","-jar",jiaguParams.jiaguJarFilePath,"-jiagu",
apkFile.absolutePath,apkFile.parent,"-autosign")
}
}
}
4)配置加固信息
我們在build.gradle文件中配置好我們的加固信息
jiagu{
userName '你的360賬號'
password '你的360賬號密碼'
jiaguJarFilePath 'D:\\Program Files (x86)\\360jiagubao_windows_64\\jiagu\\jiagu.jar' //這里填你自己的加固jar的文件位置
keystorePath "../testjks.jks"
keystorePassword "testjks"
alias "testjks"
aliasPassword "testjks"
}
5)進行加固
首先我們先make一下項目舔哪,生成apk文件
然后我們執(zhí)行加固任務(wù),由于這里是加固debug版本的apk因此我們執(zhí)行jiagudebug任務(wù)
執(zhí)行完畢后我們看源apk同級目錄下生成了一個加固好的apk