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中设置。
- 在src/main/groovy目录下创建包名,将ApkRenamePlugin移至包下;
- 修改resources/gradle-plugins/xxx.properties中,给你的plugin取名,这里xxxx就是gradle文件中apply的内容。
- 完善代码,重命名逻辑
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=""
}
- 修改build.gradle中的group、artifactId和version;
- 执行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 其中也有生成插件的脚本。