不能对 Android 库中的不同构建风格使用不同的命名空间

Can not use different namespaces for different build flavors in Android library

提问人:alijandro 提问时间:3/22/2023 更新时间:3/22/2023 访问量:831

问:

我尝试在我的 Android 库项目中为不同的产品风格使用不同的包名称。使用以下配置namespace

    productFlavors {
        foo {
            namespace 'com.example.foo'
            manifestPlaceholders = [pkgName:"com.example.foo"]
        }
        // the later one always win
        bar {
            namespace 'com.example.bar'
            manifestPlaceholders = [pkgName:"com.example.bar"]
        }
    }

它看起来在不同的产品口味中不起作用。它总是使用后一个命名空间,即使我切换到不同的产品风格。namespace

我尝试徒劳地使用属性,并发出以下警告manifestPlaceholderspackageAndroidManfiest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="${pkgName}">

</manifest>

不能在清单中对包使用占位符;改为 在 build.gradle 中设置 applicationId

如何在 Android 库中为不同的构建风格使用不同的命名空间?

android-gradle-plugin android-library

评论

0赞 Stephan 3/22/2023
您是否尝试过使用而不是?applicationIdmanifestPlaceholders
0赞 alijandro 3/22/2023
@Stephan请参阅文档中的注释> com.android.builder.errors.EvalIssueException: Library projects cannot set applicationId.
0赞 Stephan 3/22/2023
我明白了,但它需要清单中的包吗?在这里(developer.android.com/guide/topics/manifest/manifest-intro)它说:“如果资源由你的应用提供,你可以省略包名称(包括如果它是由库依赖项提供的,因为库资源已合并到你的资源中)”
0赞 Jemshit 8/18/2023
你找到解决方案了吗?
0赞 Jemshit 8/18/2023
显然,它需要匹配“包名称”,而不是 appId,因此对于所有产品风格都是相同的。但是需要在每个模块中单独声明,因为每个模块都会有不同的包名

答: 暂无答案