前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >APK重命名gradle插件

APK重命名gradle插件

作者头像
用户1108631
发布2019-08-14 17:07:09
9700
发布2019-08-14 17:07:09
举报

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库中的生成插件模板进行开发。

使用模板创建插件

代码语言:javascript
复制
$ 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. 完善代码,重命名逻辑
代码语言:javascript
复制
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定义如下:

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

应用插件

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

代码语言:javascript
复制
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后,打出来的包名是:

代码语言:javascript
复制
RenameTest-1.0-1-debug.apk

代码

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 每天学点Android知识 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用模板创建插件
  • 编写插件代码
  • 应用插件
  • 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档