gradle自定義plugin實踐之360多渠道加固打包

項目地址

  • 使用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倉庫.


7567917-e19d9cc9df4210a1.png
發佈
  • 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
}
7567917-81b96c5d68f595e5.png
執行task
發佈了35 篇原創文章 · 獲贊 2 · 訪問量 4378
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章