Android Studio自定义加固插件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Studio自定义加固插件相关的知识,希望对你有一定的参考价值。

参考技术A

Gradle自定义插件

我们新建一个名为JiaguPlugin的Module

调整build.gradle为如下所示(这里我使用Kotlin开发)

创建一个JiaguPlugin类

然后创建resources目录并创建插件的配置文件

配置文件的内容如下:

1)创建一个扩展
这里我们创建的扩展名为jiagu,这个就好像app下build.gradle中的android扩展一样

我们扩展中的参数是JiaguParams中的参数

2)添加监听
添加一个读取完配置信息后的回调

然后我们先将我们的插件上传到Maven仓库,也就是执行插件build.gradle的这个Task,这里我上传到了项目下的Plugins文件夹下

然后我们在项目的build.gradle文件里引入

加固的任务类JiaguTask如下,这里的命令是参照文章开头360加固的help文件:

4)配置加固信息
我们在build.gradle文件中配置好我们的加固信息

5)进行加固
首先我们先make一下项目,生成apk文件

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

Android Studio 插件开发4自定义配置文件

 这种功能我们一般把秘钥让用户自己设置。对吧

那么就需要一个设置页面

如果没设置就点不进去

那么如何操作呢

 书接上回

清零已有的key

data class TrelloState(
    var apiKey:String="",
    var token:String="",
    var fromListId:String="",
    var toListId:String="",
//    @OptionTag(converter = MyDataTimeConverter::class) val data: DateTime?=null
)

在同services、或者同actions的目录上面 新建package settings  

将配置都拿进来

package com.anguomob.anguo.settings

import com.anguomob.anguo.actions.trello.TrelloState
import com.anguomob.anguo.services.TrelloService
import com.intellij.openapi.options.Configurable
import com.intellij.openapi.project.Project
import com.intellij.ui.layout.rowWithIndent
import javax.swing.JComponent
import javax.swing.JPanel
import javax.swing.JPasswordField
import javax.swing.JTextField
import com.intellij.ui.layout.panel
import javax.swing.event.DocumentEvent
import javax.swing.event.DocumentListener

class TrelloSettings(private val project: Project) : Configurable, DocumentListener 

    private val state: TrelloState by lazy 
        TrelloService.getInstance(project).state
    

    private val apiKeyField: JPasswordField = JPasswordField()
    private val tokenKeyField: JPasswordField = JPasswordField()
    private val fromListIdField: JTextField = JTextField()
    private val toListIdField: JTextField = JTextField()

    private var modified = false

    private val panle: JPanel = panel 
        row("Api Key")  apiKeyField() 
        row("Token")  tokenKeyField() 
        row("From List id")  fromListIdField() 
        row("To List Id")  toListIdField() 
        modified = false
    


    override fun createComponent(): JComponent? 
        apiKeyField.apply 
            text = state.apiKey
            document.addDocumentListener(this@TrelloSettings)
        
        tokenKeyField.apply 
            text = state.token
            document.addDocumentListener(this@TrelloSettings)
        
        fromListIdField.apply 
            text = state.fromListId
            document.addDocumentListener(this@TrelloSettings)
        
        toListIdField.apply 
            text = state.toListId
            document.addDocumentListener(this@TrelloSettings)
        
        return panle
    

    override fun isModified(): Boolean 
        return modified
    

    override fun apply() 
        state.apiKey = String(apiKeyField.password)
        state.token = String(tokenKeyField.password)
        state.fromListId = fromListIdField.text
        state.toListId = toListIdField.text
        TrelloService.getInstance(project).loadState(state)
    

    override fun getDisplayName(): String 
      return  "安果Trello设置"
    

    override fun insertUpdate(e: DocumentEvent?) 
        modified = true
    

    override fun removeUpdate(e: DocumentEvent?) 
        modified = true
    

    override fun changedUpdate(e: DocumentEvent?) 
        modified = true
    

配置到Plugins当中去

    <extensions defaultExtensionNs="com.intellij">
        <projectConfigurable instance="com.anguomob.anguo.settings.TrelloSettings"/>
        <projectService serviceImplementation="com.anguomob.anguo.services.TrelloService"/>

    </extensions>

 然后就行了。非常的方便。

以上是关于Android Studio自定义加固插件的主要内容,如果未能解决你的问题,请参考以下文章

如何通过android studio中的自定义插件的操作在项目中动态添加依赖项?

Android Gradle 插件Gradle 自定义 Plugin 插件 ③ ( 自定义插件作用 | Android Gradle 插件的扩展 | 自定义 Extension 扩展 )

Android Gradle 插件自定义 Gradle 任务 ① ( Gradle 面板显示任务列表 | 自定义任务生成与显示分组 )

Android Gradle 插件自定义 Gradle 任务 ④ ( Task#doLast 函数用法 | 自定义 Gradle 任务代码示例 )

Android Gradle 插件自定义 Gradle 任务 ④ ( Task#doLast 函数用法 | 自定义 Gradle 任务代码示例 )

Android Gradle 插件自定义 Gradle 任务 ① ( Gradle 面板显示任务列表 | 自定义任务生成与显示分组 )