我正在尝试从build.gradle android扩展程序在AndroidManifest.xml文件中执行替换,但是收到此错误:
cast
这是清单文件的片段:
AndroidManifest.xml:89:16 Error:
Attribute uses-library#com.company.platform.${encoding}@name at AndroidManifest.xml:89:16 requires a placeholder substitution but no value for <encoding> is provided.
/Users/Company/Desktop/Checkout/android/Project/app/src/main/AndroidManifest.xml:0:0 Error:
Validation failed, exiting
:app:processDebugManifest FAILED
这是一个剪辑build.gradle:
...
</receiver>
<uses-library android:name="com.company.platform.${encoding}" />
</application>
...
我也尝试在buildTypes中添加manifestPlaceholders,即
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.company.app"
minSdkVersion 23
targetSdkVersion 23
versionName cityVersion
setProperty("archivesBaseName", "City_$versionName")
manifestPlaceholders = [encoding: "some value"]
manifestPlaceholders = [version: cityVersion]
}
}
但我仍然得到同样的错误。
为什么在manifestPlaceholders中提供占位符替换时需要占位符替换?
答案 0 :(得分:27)
您只需添加到数组即可。你正在取代它。这样做:
manifestPlaceholders = [encoding: "some value", version: cityVersion]
通过为相同的flavor / build类型声明manifestPlaceholders两次,您将替换前一个。在替换上一个之后,您的构建失败,因为该属性不再存在。
答案 1 :(得分:1)
这个
manifestPlaceholders = [encoding: "some value"]
manifestPlaceholders = [version: cityVersion]
应该是这样
manifestPlaceholders = [encoding: "some value"]
manifestPlaceholders += [version: cityVersion]
答案 2 :(得分:0)
您需要将applicationId占位符添加到应用程序gradle。在更新到Gradle 2.2.0-alpha1
之后,Firebase的集成会发生这种情况android {
...
defaultConfig {
applicationId "com.example.my.app"
...
}
}
请参阅:Unable to get provider com.google.firebase.provider.FirebaseInitProvider
答案 3 :(得分:0)
我在我的值周围留下了$ {}符号:
<meta-data android:name="net.example" android:value="${XXXX}" />
答案 4 :(得分:0)
对于那些由于库清单中定义的manifestPlaceholders
而遇到清单合并/清单注入问题的人,问题来自于您需要为manifestPlaceholders
中的manifestPlaceholders
定义一个值你的图书馆清单。当您在消费应用程序中注入实际值时,该值不会被覆盖。要解决此问题,您应该只为库中的debug
版本定义android.buildTypes.debug.manifestPlaceholders = [
authScheme: 'clientAppReplaces', authHost: 'clientAppReplaces'
]
个值。
像这样:
manifestPlaceholders
通过这样做,您将能够构建您的库。同时让客户端应用程序为build.gradle
提供正确的值。允许你的图书馆做所有那些繁重的工作。这是可能的,因为库构建为发布版本(除非另有定义)。
客户端应用defaultConfig {
applicationId "com.app.manifestPlaceholders"
minSdkVersion 16
targetSdkVersion 27
versionCode project.ext.versionCode
versionName project.ext.versionName
manifestPlaceholders = [authScheme: 'customSchemeValue', authHost: 'hostValue']
}
示例:
let currentRow = $(event.target)[0].parentElement
let data = $(currentRow).data('id')