Android – 在Gradle中更改APK文件名

默认情况下,Android Studio中的Gradle构建命名为.apk文件app-release.apk。对应用程序build.gradle文件进行了一些小的更改,可以将.apk名称更改为<app name>-release-<version>.apk。

需要在app的目录下面修改build.gradle文件。

第一步是将project.archivesBaseName设置为您的应用程序名称。

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.0"
    versionCode 1
    versionName "1.0.0"
    project.archivesBaseName = "AppName"
}

第二步是在该Gradle文件的buildTypes部分添加如下代码:

buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            applicationVariants.all { variant ->
                variant.outputs.each{ output ->
                    output.outputFile = new File(output.outputFile.parent,output.outputFile.name.replace(".apk","-" + defaultConfig.versionName + ".apk" ))
                }
            }
        }
    }

之前上面那么写是没问题的,当我更新android studio 3.0的时候,再重新打包的时候,就出现了问题,就会报下面的错误;

Error:(23, 0) Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=debug, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl.

简单来说就是我们之前用的outputFile属性是只读的,不能再使用了。所以这里我又换了一种写法:

applicationVariants.all{
     variant->variant.outputs.all{
//android studio3.0之前的写法
 //    output->output.outputFile=new File(output.outputFile.parent,output.outputFile.name.replace(".apk","-"+defaultConfig.versionName+".apk"))
//android studio3.0的写法
       outputFileName = "${project.archivesBaseName}-${defaultConfig.versionName}.apk"
     }
 }

这就是重命名.apk文件所需要的全部。

//多渠道打包
productFlavors{
  test{}
}
//打包类型
buildTypes{
  //debug版本
  debug{}

  //release版本
  release{}
}

这里需要注意一点就是,如果我们用了productFlavors{}属性,那咱们就不用去添加defaultConfig.versionName了,因为如果添加了,打出包的名称就会多一个versionName。 例如: 没有使用productFlavors{}情况下:AppName-1.0.0.apk 使用productFlavors{}情况下:AppName-test-release-1.0.0.apk,如果您加了defaultConfig.versionName,那打出的包就会是AppName-test-release-1.0.0-1.0.0.apk。

修改应用包名的全部内容就这么多了。

快乐生活!快乐工作!快乐编程!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏蓝天

__lll_mutex_lock_wait的错误原因

运行下面的代码,即可重现上面的__lll_mutex_lock_wait()问题:

1694
来自专栏蓝天

同时具备多线程和多进程安全的写日志工具

接口请浏览:https://github.com/eyjian/mooon/blob/master/mooon/include/mooon/sys/log.h ...

1554
来自专栏程序员的酒和故事

C++工程中常用的宏定义(#define)

尽管说define有很多不足之处,很多时候我们需要使用const来替代define, 也可以使用typedef来替代define。 但是,在一些实际工程中,我们...

5466
来自专栏北京马哥教育

Linux内核源代码情景分析-访问权限与文件安全性

在Linux内核源代码情景分析-从路径名到目标节点,一文中path_walk代码中,err = permission(inode, MAY_EXEC)当前...

3196
来自专栏向治洪

android PakageManagerService启动流程分析

PakageManagerService的启动流程图 ? 1.PakageManagerService概述 PakageManagerService是andro...

40410
来自专栏技术小黑屋

Android性能调优利器StrictMode

作为Android开发,日常的开发工作中或多或少要接触到性能问题,比如我的Android程序运行缓慢卡顿,并且常常出现ANR对话框等等问题。既然有性能问题,就需...

1182
来自专栏iOS技术

iOS架构:MVVM设计模式+RAC响应式编程

每次做完项目过后,都会被自己庞大的ViewController代码吓坏,不管是什么网络请求、networking data process、跳转交互逻辑统统往V...

6029
来自专栏吴小龙同學

Gradle for Android(二)全局设置、自定义BuildConfig、混淆

系列博客 Gradle for Android(一)基本配置、依赖管理 Gradle for Android(三)多渠道打包、配置签名信息 全局设置 根目...

3207
来自专栏吴伟祥

Linux命令缩写英文对照记忆(〇) 转

712
来自专栏Android Note

配置统一的build.gradle

1056

扫码关注云+社区