平時我們打包生成apk後可能需要進行加固,如果每次手動去打開加固軟體然後再去加固非常的麻煩,因此我們可以通過自定義Gradle插件來幫我們自動完成,這裡我用的是360加固,360加固給我們提供了一個命令行的幫助文檔如下
-login <username> 首次使用必須先登錄 <360用戶名> <password> <登錄密碼> -importsign <keystore_path> 導入籤名信息 <密鑰路徑> <keystore_password> <密鑰密碼> <alias> <別名> <alias_password> <別名密碼> -importmulpkg <mulpkg_filepath> 導入多渠道配置信息,txt格式 -showsign 查看已配置的籤名信息 -showmulpkg 查看已配置的多渠道信息 -deletemulpkg 清除已配置的多渠道信息 -help 顯示幫助信息 -config 配置加固可選項 --可選增強服務- [-crashlog] 【崩潰日誌分析】 [-x86] 【x86支持】 [-analyse] 【加固數據分析】 [-nocert] 【跳過籤名校驗】 [-piracy] 【盜版監測】 --高級加固選項- [-vmp] 【全VMP保護】 [-data] 【本地數據文件保護】 [-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 顯示當前版本號 -update 升級到最新版本 -jiagu <inputAPKpath> 加固命令 <APK路徑> <outputPath> <輸出路徑> [-autosign] 【自動籤名】 [-automulpkg] 【自動多渠道】 [-pkgparam mulpkg_filepath] 【自定義文件生成多渠道】實現步驟1.新建Module
我們新建一個名為JiaguPlugin的Module
2.調整build.gradle調整build.gradle為如下所示(這裡我使用Kotlin開發)
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.創建Plugin類
創建一個JiaguPlugin類
package com.itfitness.jiaguplugin
import org.gradle.api.Pluginimport org.gradle.api.Project
class JiaguPlugin:Plugin<Project>{ override fun apply(project: Project) {
}}
然後創建resources目錄並創建插件的配置文件
配置文件的內容如下:
implementation-class=com.itfitness.jiaguplugin.JiaguPlugin4.編寫Plugin
1)創建一個擴展
這裡我們創建的擴展名為jiagu,這個就好像app下build.gradle中的android擴展一樣
class JiaguPlugin:Plugin<Project>{ override fun apply(project: Project) { val jiaguParams = project.extensions.create("jiagu",JiaguParams::class.java) }}
我們擴展中的參數是JiaguParams中的參數
open class JiaguParams{ var jiaguJarFilePath = "" var userName:String = "" var password:String = "" var keystorePath:String = "" var keystorePassword:String = "" var alias:String = "" var aliasPassword:String = "" }
2)添加監聽
添加一個讀取完配置信息後的回調
class JiaguPlugin:Plugin<Project>{ override fun apply(project: Project) { val jiaguParams = project.extensions.create("jiagu",JiaguParams::class.java) project.afterEvaluate { println(jiaguParams.userName) } }}
然後我們先將我們的插件上傳到Maven倉庫,也就是執行插件build.gradle的這個Task,這裡我上傳到了項目下的Plugins文件夾下
然後我們在項目的build.gradle文件裡引入
然後在app的build.gradle文件做如下配置
plugins { id 'com.android.application' id 'kotlin-android' //應用加固插件 id 'com.itfitness.jiaguplugin'}jiagu{ userName '測試帳號'}
我們同步一下發現列印如下信息就證明我們的插件可以正常使用了
3)增加apk加固任務
這裡我們是通過AppExtension獲取輸出的Apk的路徑然後動態創建Task(比如默認有debug和release那就會創建兩個Task)
class JiaguPlugin:Plugin<Project>{ override fun apply(project: Project) { val jiaguParams = project.extensions.create("jiagu",JiaguParams::class.java) project.afterEvaluate { val appExtension = project.extensions.getByType(AppExtension::class.java) appExtension.applicationVariants.all { applicationVariant-> applicationVariant.outputs.all { output-> project.tasks.create("jiagu" + output.name,JiaguTask::class.java,output.outputFile,jiaguParams) } } } }}
加固的任務類JiaguTask如下,這裡的命令是參照文章開頭360加固的help文件:
open class JiaguTask @Inject constructor( val apkFile: File, val jiaguParams: JiaguParams) : DefaultTask() { init { group = "jiagu" }
@TaskAction fun jiagu(){ project.exec { it.commandLine("java","-jar",jiaguParams.jiaguJarFilePath,"-login",jiaguParams.userName,jiaguParams.password) } 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' keystorePath "../testjks.jks" keystorePassword "testjks" alias "testjks" aliasPassword "testjks"}
5)進行加固
首先我們先make一下項目,生成apk文件
然後我們執行加固任務,由於這裡是加固debug版本的apk因此我們執行jiagudebug任務案例源碼
執行完畢後我們看源apk同級目錄下生成了一個加固好的apkhttps://gitee.com/itfitness/jiagu-plugin
作者:itfitness
連結:https://www.jianshu.com/p/a8a79a6c3a67關注我獲取更多知識或者投稿