安卓 - 用于不同构建类型的清单占位符

13

我对Gradle + Android Build中的清单占位符的新可能性非常兴奋。我在Gradle文档中发现,我可以像这样指定自己的占位符:

productFlavors {
    free {
    }
    pro {
        manifestPlaceholders = [ activityLabel:"proName" ]
    }
}

但我希望有一个仅依赖于构建类型而不是产品口味的占位符。当我将该占位符规范插入构建类型设置时,它没有任何效果。你知道如何实现这一点吗?因为对我来说,拥有三个与之相关联的构建类型和三个口味似乎很愚蠢。谢谢


我不确定你的情况,但也许这个链接可以帮到你?http://stackoverflow.com/questions/10887837/how-to-specify-spring-propertyplaceholderconfig-values-in-gradle-build - Lukasz Ciesluk
由于我没有直接让它工作并且没时间测试很多不同的方法,所以我最终决定将我的清单复制到不同的构建类型文件夹中,并删除(几乎)除了我想要更改的内容(在我的情况下是Google Maps API密钥)之外的所有东西。我使用了“tools:replace”方法来确保我保留了我想要的内容。虽然不是最好的解决方案,但对我来说起到了作用... - Kasium
2个回答

7
这是我针对不同产品风味的解决方案:
build.gradle:
productFlavors {
normal {
    applicationId "mobi.cwiklinski.urc"
    buildConfigField "String", "providerAuthority", "\"mobi.cwiklinski.urc.provider\""
    resValue "string", "authorities", "mobi.cwiklinski.urc.provider"
}
adfree {
    applicationId "mobi.cwiklinski.urc.adfree"
    buildConfigField "String", "providerAuthority", "\"mobi.cwiklinski.urc.adfree.provider\""
    resValue "string", "authorities", "mobi.cwiklinski.urc.adfree.provider"
}

}

AndroidManifest.xml

<provider
        android:name="mobi.cwiklinski.urc.provider.AppProvider"
        android:authorities="@string/authorities"
        android:exported="true"
        android:label="@string/app_name"
        android:syncable="true"
        android:writePermission="mobi.cwiklinski.urc.permission.USE_PROVIDER" />

而这就是全部 - 在不同的产品版本中,您将获得不同的资源价值。

好的,谢谢你的回答,但这与我的问题无关...我想知道是否可以在构建类型中使用它,而不是在风味中利用它。 - Billda
你可以连接这两个东西 - 你将得到四个 APK 文件,然后选择你想要的两个即可... - Mike Cwiklinski
我之前不知道resValue,它非常有用,可以代替manifestPlaceholders,而且我一直无法让它们正常工作。 - tasomaniac

4

从今天开始,使用gradle插件0.13.0已经可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接