APK重命名插件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_19431333/article/details/82468961

Android打包流程的结果是一个apk文件,而apk的命名默认使用的是(module-name)+(build-varints)+(build-type).apk,是不是经常能见到app-debug.apk,这是因为使用AS新建一个项目时,默认module名是app,然后直接使用as的run工具,其实执行的assembleDebug命令再加安装。这就是app-debug.apk的由来。
本文将介绍一个如何给APK重新命名的插件,指定名称,不再局限于module名的限制。本文使用开发Gradle插件并上传至本地maven库流程中的生成插件模板进行开发。

使用模板创建插件

$ sh plugintemplate.sh ApkRenamePlugin ApkRenamePlugin

生成ApkRenamePlugin目录后,使用AS打开。

编写插件代码

这里创建了一个扩展类,有一个可以在build.gradle文件中自定义app名称,如果不配置,那么默认还是使用module名。这边用的是appname+versionname+versioncode.apk的命名规则,这里可以根据自己的需求进行修改,或者将其放到扩展参数里,留给用户在build.gradle中设置。
1. 在src/main/groovy目录下创建包名,将ApkRenamePlugin移至包下;
2. 修改resources/gradle-plugins/xxx.properties中,给你的plugin取名,这里xxxx就是gradle文件中apply的内容。
3. 完善代码,重命名逻辑


class ApkRenamePlugin implements Plugin<Project> {

    @Override
    void apply(Project project) {

        //配置参数以apkrename{}进行配置
        ApkRenamePluginExtension apkRenameExtensions = project.extensions.create("apkrename", ApkRenamePluginExtension)

        configureApkRename(project, project.android.applicationVariants, apkRenameExtensions)


    }

    private void configureApkRename(Project project, DomainObjectCollection<Variant> variants, ApkRenamePluginExtension apkRenamePluginExtension) {

        def projectName = project.name

        project.afterEvaluate {

            variants.all { variant ->

                //拿到build.gradle中android{}内容
                def androidExtensions = project.extensions.findByName("android")

                //得到versionName和versionCode
                def versionName = androidExtensions.defaultConfig.versionName
                def versionCode = androidExtensions.defaultConfig.versionCode

                variant.outputs.each { output ->
                    if (output != null && output.outputFile.name.endsWith(".apk")) {

                        //原apk命名
                        def originApkName = output.outputFile.name
                        def apkNameSuffix = originApkName.substring(projectName.length())

                        //新的apk名称
                        def apkName = apkRenamePluginExtension.apkName == "" ? projectName : apkRenamePluginExtension.apkName
                        //创建新的文件
                        def apkFile = new File(output.outputFile.parent, "${apkName}-${versionName}-${versionCode}${apkNameSuffix}")
                        //重命名
                        output.outputFile = apkFile
                    }
                }
            }
        }
    }

}

其中ApkRenamePluginExtensions定义如下:

class ApkRenamePluginExtension {
    String apkName=""
}
  1. 修改build.gradle中的group、artifactId和version;
  2. 执行publistToMavenLocal任务,将插件提交至本地maven库

应用插件

创建一个app项目,在其build.gradle中加入如下代码:

buildscript {
    repositories {
        jcenter()
        mavenLocal()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.0'
        classpath 'com.xingfeng.plugin:ApkRenamePlugin:1.0.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

apply plugin: 'com.android.application'
apply plugin: 'com.xingfeng.apkrename'

apkrename {
    apkName="RenameTest"
}

执行assembleDebug后,打出来的包名是:

RenameTest-1.0-1-debug.apk

代码

关于代码请查看git地址:https://github.com/wangli135/ApkRenamePlugin
其中也有生成插件的脚本。

猜你喜欢

转载自blog.csdn.net/qq_19431333/article/details/82468961
今日推荐