在清单中使用变量

Far*_*ABZ 11 android gradle android-manifest branch.io

集成一些库(例如Branch-io在 Android 中)需要在项目清单中定义元数据。其中一些变量就像TestMode

    <meta-data android:name="io.branch.sdk.TestMode" android:value="true" />
Run Code Online (Sandbox Code Playgroud)

因此,当我们想要发布应用程序时,我们应该将其更改为 False。

有什么方法可以根据某处定义变量BuildType并将其分配给元数据吗?

Nat*_*yev 13

您可以通过将manifestPlaceholders添加到build.gradle文件来做到这一点:

android {
    ...
    buildTypes {
        debug {
            manifestPlaceholders = [isBranchSdkInTestMode:"true"]
            ...
        }
        release {
            manifestPlaceholders = [isBranchSdkInTestMode:"false"]
            ...
        }
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml中,您可以将其用作${isBranchSdkInTestMode}

android {
    ...
    buildTypes {
        debug {
            manifestPlaceholders = [isBranchSdkInTestMode:"true"]
            ...
        }
        release {
            manifestPlaceholders = [isBranchSdkInTestMode:"false"]
            ...
        }
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*iel 10

是的,您可以将构建变量从 gradle 注入到清单中,这是通过将变量添加到build.gradle

android {
    defaultConfig {
        manifestPlaceholders = [hostName:"www.example.com"]
    }
    deployConfg {
        manifestPlaceholders = [hostName:"www.prod-server.com"]
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后在你的清单中你可以通过以下方式获取它:

<intent-filter ... >
    <data android:scheme="http" android:host="${hostName}" ... />
    ...
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读有关其工作原理的更多信息。