首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在库清单中使用${applicationId}

在库清单中使用${applicationId}
EN

Stack Overflow用户
提问于 2015-06-11 20:26:12
回答 3查看 19.1K关注 0票数 29

我正在开发一个使用内部ContentProvider的SDK,我想在几个项目中使用这个SDK,并在库清单中声明它,所以我尝试了以下方法:

代码语言:javascript
复制
    <provider
        android:name=".core.MyContentProvider"
        android:authorities="${applicationId}"
        android:exported="false"/>

所发生的是${applicationId}被替换为库的packageName而不是与apk相关的顶级applicationId.

是否有一种方法可以确保将启动 applicationId放在值中?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-11 20:53:03

在几个不同的变体和唯一的is中遇到了相同的问题,最终在Gradle构建应用程序时替换了占位符键,有点像这样:

Gradle 3+

代码语言:javascript
复制
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

代码语言:javascript
复制
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')
}

然后在舱单上:

代码语言:javascript
复制
<provider
    android:name=".core.MyContentProvider"
    android:authorities="P_AUTHORITY"
    android:exported="false"/>

会有很多次派上用场

票数 10
EN

Stack Overflow用户

发布于 2019-03-30 07:41:43

您可以在清单文件中使用${applicationId}。只需确保库的gradle文件中没有"applicationId".如果您在"defaultConfig",下的gradle文件中声明了它,请删除它。

代码语言:javascript
复制
//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"
 }
票数 7
EN

Stack Overflow用户

发布于 2022-03-18 14:19:13

只要让它成为一个分级风味变量,它将加载不同口味的动态值。我是为FacebookContenProvider做的,但同样的原则也适用

清单:

代码语言:javascript
复制
<provider android:authorities="@strings/authority"
        android:name="com.facebook.FacebookContentProvider"
        android:exported="true"/>

格莱德尔:

代码语言:javascript
复制
productFlavors {
    flavorName {
        ...
        resValue "string", "authority", "com.facebook.app.FacebookContentProvider'YOUAPPID'"
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30790768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档