• android自定义Apk名称和指定生成的路径


    一、写在前面

    1.1、生成apk自定义路径

    AS开发工具打包时默认是生成到项目App模块里面的build文件夹下,但是我们在服务端维护(托管)项目代码的时候,通常会过滤掉build文件夹,这样的话就有个问题,我们没法在服务端托管生成的apk文件,apk在版本备份的时候如果能跟代码一起打入tag,能帮助我们后期根据应用版本快速找到当时打的apk包。
    所以我们在生成生产版本的Apk时,指定生成的路径就派上用场了。

    1.2、自定义Apk名称

    详细的apk名称可以帮助我们快速定位某个版本的apk在打包时是如何选择变体等信息的,所以我们可以把觉得有用的信息在打包的时候就自动添加到生成的Apk名称中。

    二、Sample

    1. android {
    2. //...
    3. defaultConfig {
    4. applicationId "com.yann02.sample"
    5. versionCode 10001
    6. versionName "V1.0.1"
    7. //...
    8. }
    9. productFlavors {
    10. free {
    11. dimension "role"
    12. //...
    13. }
    14. vip {
    15. dimension "role"
    16. //...
    17. }
    18. //...
    19. }
    20. //...
    21. android.applicationVariants.all { variant ->
    22. def createTime = new Date().format("YYYY-MM-dd_HH.mm")
    23. if (variant.buildType.name == "release") {
    24. // 将release版本放到项目的apks文件夹下,其它编译类型使用默认生成路径即可
    25. variant.getPackageApplication().outputDirectory = new File(project.rootDir.absolutePath + "/apks/${variant.buildType.name}/${createTime}")
    26. }
    27. variant.outputs.all {
    28. if (variant.buildType.name == "release") {
    29. outputFileName = "${defaultConfig.applicationId}_${variant.flavorName}_${variant.buildType.name}_${defaultConfig.versionName}_${defaultConfig.versionCode}_${createTime}.apk"
    30. }
    31. }
    32. }
    33. //...
    34. }

    三、分析上面的Sample

    上面的样例设置了只对release编译类型的生成包做处理,包括常用的如何获取应用打包时生成Apk名字常用到的关键字段信息
    获取应用包名:defaultConfig.applicationId
    获取应用版本名称:有两种方式

    • defaultConfig.versionName
    • variant.versionName

    获取应用版本号:有两种方式

    • defaultConfig.versionCode
    • variant.versionCode

    获取应用变体:有两种方式

    • variant.flavorName
    • variant.productFlavors[0].name

    获取编译类型:variant.buildType.name
    使用时间:可根据个人需要设置格式,我这里精确到了时分,不含秒

    • new Date().format("YYYY-MM-dd_HH.mm")

    1. Noteworthy:我这里用到了自定义生成apk的路径,每个路径下只能生成一个apk包,打包时系统会替换掉旧的apk包。
    2. 我这里用时间来生成路径,以保留历史安装包。可酌情使用,非必要。
    3. 不要修改debug类型的输出路径,否则会影响调试,包括查看输出的log。

     四、相关的文章

    这里记一个相关的安卓官方的关于配置应用打包时根据不同配置参数构建多个不同apk配置的文章构建多个APK

  • 相关阅读:
    Redis 线程模型
    SI3262—高度集成的低功耗SOC读卡器芯片
    【 OpenGauss源码学习 —— 列存储(analyze)(三)】
    Js 获取表单高亮选中的内容 和 设置文本选中内容
    【c++】基于无锁循环队列的线程池的实现
    图片链接或pdf链接通过浏览器打开时,有时可以直接预览,有时却是下载,为什么?
    RGMII接口--->(013)FPGA实现RGMII接口(十三)
    Mariadb: error Relay log read failure: Could not parse relay log event entry
    R语言颜色细分
    抖音本地生活服务商申请怎么做?无保证金的申请方法来了
  • 原文地址:https://blog.csdn.net/yann02/article/details/126671192