android - 在库 list 中使用 ${applicationId}

标签 android gradle manifest-merging

我正在开发一个使用内部 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/

相关文章:

android - Instant Apps 功能模块中的资源合并

android - 任务 :app:processDebugmanifest 执行失败

android - 我可以对 list 合并替换标签进行异常(exception)处理吗?

android - 如何将自定义字体添加到 TextView 并证明它的合理性

android - Android中引起的onLowMemory

java - Gradle:一次运行2个Jar任务仅生成一个jar文件

android - 如何设置 Android 库以使用 gradle

android - 找不到符号类 RTCClientVideoTracksCallback

android - 什么是 readStream() 方法?我只是在任何地方都找不到它,

android - 使用 gradle 从 ivy 中检索压缩的依赖项