Android Studio3.0修改apk名称

1. 如何修改打包好的apk名称

Android Studio从2.0升级到3.0之后,要修改打包后的apk名称,必须采用以下配置:

android {
    ...
    
    applicationVariants.all {variant ->
        variant.outputs.all {output ->
            if (variant.buildType.name == "debug") {
                output.outputFileName = "iou_v${android.defaultConfig.versionName}_debug_${getCurrentTime()}.apk"
            } else if (variant.buildType.name == "release") {
                output.outputFileName = "iou_v${android.defaultConfig.versionName}_release_${getCurrentTime()}.apk"
            }
        }
    }
}

//获取当前时间
def getCurrentTime() {
    return new Date().format("yyyy-MM-dd HH:mm:ss")
}

以我自己的某个工程为例,最终打出的一个debug包如下:

iou_v1.1.6.1_debug_2018-10-17 17:11:36.apk

这断配置的核心是设置output.outputFileName,鼠标点上去可以发现,这个output对象是BaseVariantOutput类型的,但是我们查看BaseVariantOutput的代码,发现死活找不到outputFileName属性,这样就很令人费解了,网上找了一圈也没相关资料介绍。
秉着刨根究底的精神,我们看看这个output到底是个什么鬼?采用以下代码在控制台打印出来看看:

  println output 
  Field[] fields = output.getClass().getDeclaredFields()
  fields.each { field ->
      println field.name
  }
ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=debug, filters=[]}}
__dyn_obj__
__meta_class__
__mapping__
__apkData__
__assemble__
__baseName__
__dirName__
__filterTypes__
__filters__
__mainOutputFile__
__name__
__outputFile__
__outputFileName__
__outputType__
__outputs__
__packageApplication__
__processManifest__
__processResources__
__versionCode__
__versionCodeOverride__
__versionNameOverride__
__zipAlign__

可以看到这个output的真实类型是ApkVariantOutputImpl_Decorated,里面有个属性__outputFileName__,这其实是个装饰类,它真正的类型是ApkVariantOutput,outputFileName就是ApkVariantOutput里的属性值。

2. 如何打包完成后将apk复制到指定目录

我们做持续集成的时候,自动打包之后,可能会需要将包复制到指定的目录。

project.tasks.all {task ->
    if ("assembleDebug" == task.name || "assembleRelease" == task.name) {
        //在打包完成之后,增加一个任务
        task.doLast {
            println "====${task.name} doLast===="
            android.applicationVariants.all { variant ->
                variant.outputs.all { output ->
                    def apkFile = output.outputFile
                    //如果目标文件存在
                    if (apkFile.exists()) {
                        //将apk文件复制到桌面去
                        copy {
                            from apkFile.getCanonicalPath()
                            into "/Users/hjy/Desktop"
                        }
                        //复制到指定目录后删除原文件
                        delete(apkFile)
                    }
                }
            }
       }
    }
}
优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/663981

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。