我正在开发一个使用内部 ContentProvider 的 SDK,我想在几个项目中使用这个 SDK,并在库 list 中声明它,所以我尝试了这个:
<provider
android:name=".core.MyContentProvider"
android:authorities="${applicationId}"
android:exported="false"/>
发生的情况是 ${applicationId} 被替换为库的 packageName 而不是与顶级 apk 相关的 applicationId...
有没有办法确保将 launching applicationId 放在 android:authorities 值中?
最佳答案
在使用几个不同的变体和唯一 ID 时遇到了同样的问题,最终在 Gradle 构建应用程序时替换了占位符键,有点像这样:
Gradle 3+
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
output.processManifest.doLast {
File manifestFile = file("$manifestOutputDirectory/AndroidManifest.xml")
replaceInFile(manifestFile, 'P_AUTHORITY', variant.applicationId)
}
}
}
def replaceInFile(file, fromString, toString) {
def updatedContent = file.getText('UTF-8')
.replaceAll(fromString, toString)
file.write(updatedContent, 'UTF-8')
}
Gradle < 3
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
output.processManifest.doLast{
replaceInManifest(output, 'P_AUTHORITY', variant.applicationId)
}
}
}
def replaceInManifest(output, fromString, toString) {
def manifestOutFile = output.processManifest.manifestOutputFile
def updatedContent = manifestOutFile.getText('UTF-8').replaceAll(fromString, toString)
manifestOutFile.write(updatedContent, 'UTF-8')
}
然后在 list 中:
<provider
android:name=".core.MyContentProvider"
android:authorities="P_AUTHORITY"
android:exported="false"/>
这已经派上用场好几次了
关于android - 在库 list 中使用 ${applicationId},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30790768/