我将Gradle用于Product口味,在其中我为每个口味设置了不同的包装名称。
productFlavors {
appone {
packageName "com.dg.app1"
}
apptwo {
packageName "com.dg.app2"
}
appthree {
packageName "com.dg.app3"
}
appfour {
packageName "com.dg.app4"
}
}
我需要能够为每个对应的应用替换清单中的包名称。
我的清单上有:
<receiver android:name="com.parse.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.dg.example" />
</intent-filter>
</receiver>
因此,我需要将com.dg.example替换为每个应用程序风味的程序包名称。做这个的最好方式是什么?
Gradle插件v0.12和更高版本:
使用${applicationId}
代替${packageName}
。
Gradle插件v0.11和更高版本:
从v0.11开始,您不再需要指定不使用旧清单合并。
Gradle插件v0.10及更高版本:
假设您使用的是0.10或更高版本,则现在正式支持此版本:
buildscript {
repositories {
mavenCentral()
}
dependencies {
// Make sure this is at least 0.10.+
classpath 'com.android.tools.build:gradle:0.10.+'
}
}
从v0.10开始,您还必须手动启用新的清单合并,尽管我希望只要新合并成为默认合并,该要求就会在一个或两个版本中消失:
android {
useOldManifestMerger false
}
然后,只需使用通常会硬编码软件包名称的${packageName}
任何位置即可AndroidManifest.xml
。例如:
<category android:name="my.package.name"/>
会成为
<category android:name="${packageName}"/>
Gradle插件v0.9及以下版本:
因此,参考这篇文章,看来这尚未通过Gradle正式支持。一个简单的解决方法如下:
<category android:name="my.package.name"/>
变成<category android:name="_PACKAGENAME_"/>
build.gradle
在android
范围内,将以下内容添加到您的中:applicationVariants.all { variant ->
// After processing the manifest, replace all instances of your tag
// with the variant's actual package name.
variant.processManifest << {
def manifestOutFile = variant.processManifest.manifestOutputFile
def newFileContents = manifestOutFile.getText('UTF-8').replace("_PACKAGENAME_", variant.packageName)
manifestOutFile.write(newFileContents, 'UTF-8')
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句