Android gradle.properties中的manifestPlaceholders

bit*_*ale 1 android build manifest gradle

我想在链接单击时打开一个活动(显示带有应用程序名称的操作选择器)。一切正常,操作选择器显示在我的应用程序中,但前提是我不在manifestPlaceholder中使用属性名称,否则默认浏览器将打开(没有任何错误)。

我在 gradle.properties 文件中有这一行:

HOST_NAME_DEV="dev.mysite.com"
HOST_NAME_PROD="mysite.com"
Run Code Online (Sandbox Code Playgroud)

我想创建一个像这样的manifestPlaceholder:

// in manifest
<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.BROWSABLE" />
    <category android:name="android.intent.category.DEFAULT" />
        <data
             android:host="${host}"
             android:scheme="https" />
</intent-filter>

//in build.gradle
productFlavors {
        production {
            manifestPlaceholders = [host: HOST_NAME_PROD]
        }
        develop {
            manifestPlaceholders = [host: HOST_NAME_DEV]
        }
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

但是如果我将字符串粘贴到manifestPlaceholder中,一切正常:

productFlavors {
        production {
            manifestPlaceholders = [host: "mysite.com"]
        }
        develop {
            manifestPlaceholders = [host: "dev.mysite.com"]
        }
}
Run Code Online (Sandbox Code Playgroud)

通过这种方式,一切也都可以正常工作:

productFlavors {
        production {
            resValue "string", "host", HOST_NAME_PROD
        }
        develop {
            resValue "string", "host", HOST_NAME_DEV
        }
    }

// and in manifest
android:host="@string/host"
Run Code Online (Sandbox Code Playgroud)

但我想使用manifestPlaceholders。

我做错了什么?

小智 5

问题:在清单中使用“(双引号)进行数据注入。

解决方案:从 gradle.properties 的值中删除“(双引号)。就像这样:

HOST_NAME_DEV=dev.mysite.com
HOST_NAME_PROD=mysite.com
Run Code Online (Sandbox Code Playgroud)