Android Gradle将包名称替换为清单中的值

达科

我将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替换为每个应用程序风味的程序包名称。做这个的最好方式是什么?

凯文·科波克(Kevin Coppock)

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正式支持。一个简单的解决方法如下:

  1. 使用自定义标签替换包的名称(例如<category android:name="my.package.name"/>变成<category android:name="_PACKAGENAME_"/>
  2. build.gradleandroid范围内将以下内容添加到您的中

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android Gradle将包名称替换为清单中的值

来自分类Dev

Android:包名称使用哪个?清单的包名称或Gradle applicationId?

来自分类Dev

在整个清单文件中更改 android 包名称

来自分类Dev

更新Android清单中的值

来自分类Dev

Android将&#8230;替换为...

来自分类Dev

可以将包名称用作Android SELinux中的域名吗?

来自分类Dev

Javascript:使用RegEx读取android清单文件中的包

来自分类Dev

Android:将<img> -tag替换为ImageViews

来自分类Dev

Android:将<img> -tag替换为ImageViews

来自分类Dev

清单中不允许使用属性android名称吗?

来自分类Dev

AndroidManifest包名称与Android中的口味冲突

来自分类Dev

保护 Android 包名称

来自分类Dev

进程名称与android中的包名称相同吗?

来自分类Dev

在代码Android中以编程方式访问清单占位符值

来自分类Dev

在Android中,将ListView Fragment替换为Items上的Details Fragment

来自分类Dev

在Android清单中找不到Android活动

来自分类Dev

Android build Gradle-替换字符串资源值

来自分类Dev

Android:未解析的包,即使我已经修改了清单的属性 `package` 的值

来自分类Dev

Android Studio中的清单合并

来自分类Dev

Android Studio中的清单权限

来自分类Dev

右侧清单中的Android CheckBox

来自分类Dev

清单未显示在android中

来自分类Dev

在Android中使用regexp将“-”替换为空格

来自分类Dev

Android用活动将片段替换为框架布局

来自分类Dev

在Android中使用regexp将“-”替换为空格

来自分类Dev

Android Studio Gradle清单合并失败

来自分类Dev

Android,Gradle,产品口味和清单

来自分类Dev

Android Studio-Gradle清单文件路径

来自分类Dev

使用gradle将参数中的属性放入具有默认值的android构建配置中?

Related 相关文章

热门标签

归档