【问题标题】:Android manifestPlaceholders from gradle.properties来自 gradle.properties 的 Android manifestPlaceholders
【发布时间】:2019-05-08 13:13:25
【问题描述】:

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

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

HOST_NAME_DEV="dev.mysite.com"
HOST_NAME_PROD="mysite.com"

我想像这样创建一个 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]
        }
}

而且它不起作用。

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

productFlavors {
        production {
            manifestPlaceholders = [host: "mysite.com"]
        }
        develop {
            manifestPlaceholders = [host: "dev.mysite.com"]
        }
}

这样也一切正常:

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

// and in manifest
android:host="@string/host"

但我想使用 manifestPlaceholders。

我做错了什么?

【问题讨论】:

  • 从您的 gradle.properties 变量中尝试这种方式:manifestPlaceholders = [host: project.property('HOST_NAME_PROD')]
  • “它不起作用”——“它不起作用”是什么意思?实际行为是什么?您收到哪些错误消息?
  • @CommonsWare 当我单击链接时打开带有上述意图过滤器的活动,但前提是我在 manifestPlaceholders (manifestPlaceholders = [host: "dev.mysite.com"]) 或字符串中使用字符串res (resValue "string", "host", HOST_NAME_PROD)
  • @JeelVankhede 仍然无法正常工作

标签: android gradle build manifest


【解决方案1】:

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

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

HOST_NAME_DEV=dev.mysite.com
HOST_NAME_PROD=mysite.com

【讨论】:

  • 你是英雄...我一直在努力解决一个问题,删除我的引号解决了它。感谢您的精彩回答!
【解决方案2】:

在使用buildConfigField 替换manifestPlaceholders 时,双引号也有同样的问题。令人讨厌的是,这并没有导致仅在运行时发现的编译问题。 Buildconfigfields 要求将它们的引号呈现为有效的 Java 字符串。

之前:

属性文件

config.AUTH_DOMAIN = "\"myDomain\""

build.gradle

def authDomain = config.AUTH_DOMAIN   

android{
      defaultConfig{
        buildConfigField("String", "AUTH_DOMAIN", "$authDomain")
    
        manifestPlaceholders = [authDomain: authDomain]
    
       }
    }

清单:&lt;data android:host=""myDomain"" /&gt;

之后:

属性文件(去掉多余的引号)

config.AUTH_DOMAIN = "myDomain"

build.gradle

def authDomain = config.AUTH_DOMAIN

android{
  defaultConfig{
  //add the quotes or buildConfigField won't compile
    buildConfigField("String", "AUTH_DOMAIN", "\"$authDomain\"")

    manifestPlaceholders = [authDomain: authDomain]

   }
}

清单:&lt;data android:host="myDomain" /&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 2016-10-23
    • 2016-09-19
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多