将编译变量注入清单

如果您需要将变量插入在 build.gradle 文件中定义的 AndroidManifest.xml 文件,则可以使用 manifestPlaceholders 属性来执行此操作。此属性采用键值对的映射,如下所示:

android {
        defaultConfig {
            manifestPlaceholders = [hostName:"www.example.com"]
        }
        ...
    }
    

然后,您可以将某个占位符作为属性值插入清单文件,如下所示:

<intent-filter ... >
        <data android:scheme="http" android:host="${hostName}" ... />
        ...
    </intent-filter>
    

默认情况下,编译工具还会在 ${applicationId} 占位符中提供应用的应用 ID。该值始终与当前编译的最终应用 ID(包括编译变体的应用 ID 更改)一致。当您要对标识符(如 intent 操作)使用唯一的命名空间时,这很有用,即使要求在编译变体之间保持唯一性,这也很有用。

例如,如果 build.gradle 文件如下所示:

android {
        defaultConfig {
            applicationId "com.example.myapp"
        }
        productFlavors {
            free {
                applicationIdSuffix ".free"
            }
            pro {
                applicationIdSuffix ".pro"
            }
        }
    }
    

那么,您可以按如下方式将应用 ID 插入清单:

<intent-filter ... >
        <action android:name="${applicationId}.TRANSMOGRIFY" />
        ...
    </intent-filter>
    

当您编译“free”产品特性时,清单结果如下所示:

<intent-filter ... >
       <action android:name="com.example.myapp.free.TRANSMOGRIFY" />
        ...
    </intent-filter>
    

如需了解详情,请阅读设置应用 ID