Android Studio自定義加固插件

2022-01-03 Android教授
目錄

前言

平時我們打包生成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.JiaguPlugin


4.編寫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同級目錄下生成了一個加固好的apk

案例源碼

https://gitee.com/itfitness/jiagu-plugin



作者:itfitness
連結:https://www.jianshu.com/p/a8a79a6c3a67

關注我獲取更多知識或者投稿

相關焦點

  • 3種方法帶你玩自定義Android Gradle插件
    根據官網描述,自定義插件一共有三種方式:https://docs.gradle.org/current/userguide/custom_plugins.htmlBuild script——gradle文件,構建腳本內,不過這種只能在文件內使用buildSrc project——buildSrc工程,可以在自己的工程內隨意使用,但是其他工程就無法使用
  • Android Studio 自定義Gradle Plugin
    build.gradle文件中使用自定義的插件時候則需寫成:apply plugin: 'davis'davis.properties文件內容:implementation-class=com.davisplugins.PluginImpl注意包名需要替換為你自己的包名。
  • 22 個 Android Studio 優秀插件匯總
    pr=androidstudio插件源碼地址: https://github.com/avast/android-butterknife-zelezny插件教程:http://blog.csdn.net/dreamlivemeng/article/details/51261170推薦指數:五星GsonFormat
  • Android Studio的一些小技巧
    來自:APP開發者(微信號:aswifter)原文地址:http://www.aswifter.com/2015/06/18/android-studio-shrinkResources
  • Android Studio使用大全
    先談談如何安裝插件Paste_Image.pnghttps://meedamian.com/post/deuglifying-android-studio/?hi3、關閉拼寫檢查Paste_Image.png操作步驟如下:自定義注釋模板就可以了
  • Android Studio 4.1 發布啦
    Android Studio 4.1 主要是包含了各種新功能和改進,其中 Android Gradle 插件也升級為 4.1.0,要了解更多信息請查看完整的 Android Gradle 插件發行說明:https://developer.android.com/studio/releases/gradle-plugin#4-1-0
  • Android Studio 4.0 新功能與優化
    【真香警告】Android Studio下載連結:   for Windows(64-bit) :(https://redirector.gvt1.com/edgedl/android/studio/install/4.0.0.16/android-studio-ide-193.6514223-windows.exe)for Linux(64-bit
  • Android Studio的下載與安裝
    Google 已經在 2015 年結束了對 Eclipse Android 開發工具的支持Android Studio 下載選擇從 Android Studio 中文組 官網進行下載:http://www.android-studio.org/如果電腦網路好,能翻牆的,可以直接從官網首頁推薦的 google 正版連結進行下載,如:android-studio-ide
  • Android Studio 和 Gradle 插件使用全新版本編號
    在此版本中,我們調整了 Android Studio 和 Gradle 插件的版本編號方案。此項變更將 Gradle 插件從 Android Studio 的版本編號方案中剝離,並使 Android Studio 的每個版本對應於哪個年份和 IntelliJ 版本變得更加清晰。
  • Android Studio 4.0發布:全新的 Motion 編輯器及眾多更新
    有關完整的更新列表,請閱讀 Android Gradle 插件 4.0.0 發行說明:http://d.android.com/studio/releases/gradle-plugin#4-0-0使用 Build Analyzer 解決構建性能中的瓶頸Android 開發人員依靠各種 Gradle 插件和自定義構建邏輯來為應用量身定製構建系統。
  • Android Studio詳細安裝流程和配置、主題
    1、Android Studio安裝Android studio下載地址:* 官方下載地址(版本最新/需爬牆):https://developer.android.com/studio/index.html* Android Studio 中文社區:http://www.android-studio.org/* 網盤地址下載:點擊進入(密碼:4051)安裝流程這個比較基礎簡單,在這給一個地址,大家可以參考一下Android studio安裝流程Android studio是可以同時安裝兩個版本的
  • Gradle插件開發 APK瘦身資源自定義7z壓縮
    【公眾號回復「1024」,送你一個特別推送】原文地址:http://www.jianshu.com/p/838a609a8365聲明|本文為CankingApp授權發布,未經允許請勿轉載項目開發中,隨著業務的增長,常常需要在apk編譯階段對包代碼或是資源做一定的自定義修改
  • Android Studio界面優化(UI插件)
    今天主要對studio界面的做一些總結,時間有限,先寫一些常用的,望大家見諒。二.Material UI Theme插件這個插件是整體切換主題的插件。Setting-Plugins四.Sexy Editor插件(推薦)Sexy Editor
  • 學android的必看——8 個最優秀的 Android Studio 插件
    不但總是有改進的餘地,Android Studio還提供了對第三方插件的支持,下面本文將列出一些最有用的插件。1. H.A.X.M(硬體加速執行管理器)如果你想使用Android模擬器更快地執行應用程式,那麼H.A.X.M是你的最佳選擇。H.A.X.M提供Android SDK模擬器在英特爾系統中的硬體加速。
  • 8個最優秀的Android Studio插件
    打開安裝文件Hardware_Accelerated_Execution_Manager,單擊可執行的intelhaxm-android,繼續安裝。完成此安裝後,你就可以使用該模擬器了。Android Drawable Importer插件能讓這項工作變得更容易。它可以減少導入縮放圖像到Android項目所需的工作量。Android Drawable Importer添加了一個在不同解析度導入畫板或縮放指定圖像到定義解析度的選項。這個插件加速了開發人員的畫板工作。
  • Android Studio 4.0重磅發布:全新的 Motion 編輯器及眾多更新都在這裡!
    更多信息參考:http://d.android.com/studio/releases#cpu-profiler-upgrades有關完整的更新列表,請閱讀 Android Gradle 插件 4.0.0 發行說明:http://d.android.com/studio/releases/gradle-plugin#4-0-0
  • Android Studio下開發JNI應用
    最近在將一個小應用從eclipse開發遷移到android studio,程序中有native代碼實現,在eclipse是靠Android.mk這麼個mk文件來組織編譯的,但到android studio上就不行了,因其是靠gradle組織,所以makefile裡的配置要轉換為build.gradle裡的語句(儘管實際上gradle也是組織一個mk文件),同時在遷移過程中遇到了一些問題
  • Android Studio 自定義皮膚主題和背景
    Android Studio自定義皮膚主題-ColorThemes        寒假期間有人問我, 「你代碼這是用的什麼字體? 看著好舒服」,其實這是用了自定義皮膚主題包,主題包下載網站http://color-themes.com/?
  • 在Android Studio中編寫一個自己的模板
    的博客地址:https://me.csdn.net/qq_31910313首先我們打開studio安裝目錄找到系統原生模板,D:\Program Files\Android\studio\plugins\android\lib\templates\activities 這個是我的安裝目錄,在這裡我們可以看到很多原生模板代碼可以參考及借鑑,下面我們舉例將LoginActivity用sublimeText打開,如果本地沒有請自行下載。
  • Android studio UML建模
    UML建模使用場景常用與設計模式的學習,或者功能開發的實現設計開發流程Android studio 安裝UML插件(方式一)此方法通過UML語法來構圖,搜索 PlantUML integation並下載:效果圖(1.2):