使用manifestPlaceholders
2016-06-12 11:26
246 查看
发现前几天 Android Studio Gradle Plugin 发布了0.13.0版, 终于支持Gradle 2.1了。其中Product Flavors能支持AndroidManifest placeholder了,赶紧应用起来。
比如我需要打包不同渠道的APK,需要在AndroidManifest中定义渠道名称,以便在java中调用。以前ant或gradle打包时动态改变渠道的思路是:正则AndroidManifest的特定字符然后替换。新版本直接可以省掉自己编写正则的过程啦。
旧版gradle编写(参考友盟渠道打包)
AndroidManifest.xml
builde.gradle
而在新版中,可以这样写。
AndroidManifest.xml
builde.gradle
或者可以批量修改
顿时清晰了很多有没有~
PS:新版Gradle Plugin在编译输出的AndroidManifest.xml 路径也变了。所以才赶紧改成用manifestPlaceholders的方式……
比如我需要打包不同渠道的APK,需要在AndroidManifest中定义渠道名称,以便在java中调用。以前ant或gradle打包时动态改变渠道的思路是:正则AndroidManifest的特定字符然后替换。新版本直接可以省掉自己编写正则的过程啦。
旧版gradle编写(参考友盟渠道打包)
AndroidManifest.xml
<meta-data android:name="channel" android:value="CHANNEL_VALUE"/>
builde.gradle
android { productFlavors { "xiaomi"{} "360market"{} "baidu"{} "wandoujia"{} } applicationVariants.all { variant -> variant.processManifest.doLast { def manifestFilePath = "${buildDir}/intermediates/manifests/${variant.dirName}/AndroidManifest.xml" def updatedContent = new File(manifestFilePath).getText('UTF-8'). replaceAll("CHANNEL_VALUE", "${variant.productFlavors[0].name}") new File(manifestFilePath).write(updatedContent, 'UTF-8') def manifestFile = file( "${buildDir}/intermediates/manifests/${variant.dirName}/AndroidManifest.xml") variant.processResources.manifestFile = manifestFile } } }
而在新版中,可以这样写。
AndroidManifest.xml
<meta-data android:name="channel" android:value="${channelName}"/>
builde.gradle
android { productFlavors { "xiaomi"{ manifestPlaceholders = [channelName: "xiaomi"] } "360market"{ manifestPlaceholders = [channelName: "360market"] } "baidu"{ manifestPlaceholders = [channelName: "baidu"] } "wandoujia"{ manifestPlaceholders = [channelName: "wandoujia"] } } }
或者可以批量修改
android { productFlavors { "xiaomi"{} "360market"{} "baidu"{} "wandoujia"{} } productFlavors.all { flavor -> flavor.manifestPlaceholders = [channelName: name] } }
顿时清晰了很多有没有~
PS:新版Gradle Plugin在编译输出的AndroidManifest.xml 路径也变了。所以才赶紧改成用manifestPlaceholders的方式……
相关文章推荐
- android 永久NotitleBar
- Android4.0 SD卡无法删除文件solution与Androidmanifest.xml解析流程
- APP在Android中的运行机制(二)——Manifest 文件
- repo+git 仓库搭建
- App Manifest详解
- iPhone手机数据提取分析(一)
- Android 权限汇总
- Android应用程序Manifest文件简介
- Android Manifest之<service>元素中文注释
- Android Manifest之<compatible-screens>元素中文注释
- AndroidManifest文件介绍
- AndroidManifest
- Andriod Manifest.xml配置介绍
- manifest.xml 中元素含义
- Manifest权限大全
- Manifest权限大全
- Main project merges library manifest in eclipse
- HTML5 离线缓存-manifest简介
- Android Manifest.xml文件概述
- Android Manifest标签之activity