我正在开发一个使用内部ContentProvider的SDK,我想在几个项目中使用这个SDK,并在库清单中声明它,所以我尝试了以下方法:
<provider
android:name=".core.MyContentProvider"
android:authorities="${applicationId}"
android:exported="false"/>所发生的是${applicationId}被替换为库的packageName而不是与apk相关的顶级applicationId.
是否有一种方法可以确保将启动 applicationId放在值中?
发布于 2015-06-11 20:53:03
在几个不同的变体和唯一的is中遇到了相同的问题,最终在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')
}级< 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')
}然后在舱单上:
<provider
android:name=".core.MyContentProvider"
android:authorities="P_AUTHORITY"
android:exported="false"/>会有很多次派上用场
发布于 2019-03-30 07:41:43
您可以在清单文件中使用${applicationId}。只需确保库的gradle文件中没有"applicationId".如果您在"defaultConfig",下的gradle文件中声明了它,请删除它。
//So your gradle file of library(SDK) module looks like..
defaultConfig {
minSdkVersion Version.minSdk
targetSdkVersion Version.targetSdk
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
//And your application gradle file looks like..
defaultConfig {
applicationId "com.example.android"
minSdkVersion Version.minSdk
targetSdkVersion Version.targetSdk
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}发布于 2022-03-18 14:19:13
只要让它成为一个分级风味变量,它将加载不同口味的动态值。我是为FacebookContenProvider做的,但同样的原则也适用
清单:
<provider android:authorities="@strings/authority"
android:name="com.facebook.FacebookContentProvider"
android:exported="true"/>格莱德尔:
productFlavors {
flavorName {
...
resValue "string", "authority", "com.facebook.app.FacebookContentProvider'YOUAPPID'"
}
}https://stackoverflow.com/questions/30790768
复制相似问题