Build 动态修改 AndroidManifest 相关配置

本文介绍了一种在Gradle构建脚本中自动化更新AndroidManifest.xml文件中的包名的方法。通过定义变量并在构建过程中动态替换包名,可以简化多渠道发布时的工作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


使用场景:
当我们需要引用三方平台(例如:极光推送)的时候,我们需要在AndroidManifest多处配置当前应用的包名,如果想要更换包名,
我们就需要在对应的地方作出相关修改,如果频繁操作,很容易出错,也比较麻烦,此时我们就可以用相关变量作占位,
然后在build.gradle中作出相关设置,这样就可以只用修改一处即可。如图:






相关代码:

productFlavors {
        //测试
        "要修改的值" {}
}

//替换AndroidManifest.xml的pkgNmae字符串为渠道名称
    android.applicationVariants.all { variant ->
        variant.outputs[0].processManifest.doLast {
            //之前这里用的copy{},我换成了文件操作,这样可以在v1.11版本正常运行,并保持文件夹整洁
            //${buildDir}是指build文件夹
            //${variant.dirName}是flavor/buildtype,例如GooglePlay/release,运行时会自动生成
            //下面的路径是类似这样:build/manifests/GooglePlay/release/AndroidManifest.xml
            def manifestFile = "${buildDir}/intermediates/manifests/full/${variant.outputs[0].dirName}/AndroidManifest.xml"

            //将字符串default替换成flavor的名字
            def updatedContent = new File(manifestFile).getText('UTF-8').replaceAll("pkgNmae", "${variant.productFlavors[0].name}")
            new File(manifestFile).write(updatedContent, 'UTF-8')

            //将此次flavor的AndroidManifest.xml文件指定为我们修改过的这个文件
            variant.outputs[0].processResources.manifestFile = file("${buildDir}/intermediates/manifests/full/${variant.outputs[0].dirName}/AndroidManifest.xml")
    }
}


重新编译后可在输出目录直接查看AndroidManifest里面的相关值,如图:






                
### 如何在 `build.gradle.kts` 中配置 APK 应用程序称 应用程序称可以在 `build.gradle.kts` 文件中通过多种方式定义。通常,应用称会在 `res/values/strings.xml` 文件中指定,但在某些情况下,可能希望动态设置这个值。 对于不同的构建变体(flavor),可以通过 `productFlavors` 来定制化每个版本的应用和其他属性[^2]: ```kotlin android { defaultConfig { applicationId = "com.example.myapp" // 设置默认的应用称资源ID resValue("string", "app_name", "DefaultAppName") } productFlavors { create("higher") { // 使用 buildConfigField 定义布尔字段 isLite 并设为 false buildConfigField('boolean', 'isLite', "false") // 通过 manifestPlaceholders 向 AndroidManifest.xml 添加占位符 manifestPlaceholders.put("app_icon", "@mipmap/ic_launcher_normal") manifestPlaceholders.put("channelName", "higher") manifestPlaceholders.put("verNum", "2") // 动态修改应用称 resValue("string", "app_name", "JinDemoHigher") } } } ``` 上述代码展示了如何利用 `resValue` 方法来覆盖默认的应用称字符串资源。当选择了为 `higher` 的 flavor 进行编译时,最终打出来的 APK 将会显示自定义的字 `"JinDemoHigher"` 而不是默认字 `"DefaultAppName"`。 为了确保 Gradle Wrapper 版本兼容性并下载特定版本的 Gradle 发行,应确认项目根目录下的 `gradle/wrapper/gradle-wrapper.properties` 文件指向正确的分发地址[^1]: ```properties distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值