Max*_*ruz 5 android gradle firebase
简短的问题:
如何更改调试或发布的包名称库模块中
语境:
在具有 MVP + Clean 架构的 Android 项目中,我们在库模块中拥有存储库模式。我们希望在具有两个环境(开发和生产)的库中包含 Firebase。
com.example.com
我已经在 Firebase (和)中创建了项目com.example.com.dev
,然后下载了相应的google-services.json
到 src/main 和 src/debug 文件夹。
Gradle google-services插件使用google-services.json中定义的客户端 ID 验证模块包名称,但 Android 限制在库中更改applicationId
(我找不到技术原因)
我尝试过的事情:
com.example.com
在 src/main 和com.example.com.dev
src/debug/ 中,但第二个它被忽略manifest.srcFile
在 Gradle sourceSets 中设置。当我运行时,该文件位于列表中./gradlew sourceSets
,但包名称没有改变目前我只有两个合适的解决方案: 1. 将 Firebase 设置和实现保留在存储库外部的应用程序模块中。2. Firebase 只有一个环境。
非常感谢您的任何帮助或建议。
编辑:
考虑到我需要修改模块(库)中的包,而不是应用程序中的包。由于某些奇怪的原因,当我尝试在模块中使用applicationIdSuffix
or时,Gradle 显示此错误:applicationId
错误:库项目无法设置 applicationIdSuffix。
我花了一些时间研究并尝试不同的替代方案,以在库模块中为每种风格或构建类型实现两个不同的包名称,我的简短回答是:你不能,至少不做一些棘手和肮脏的事情。
有些人建议使用参数applicationIdSuffix
或applicationId
,该选项不起作用,因为库模块的设计将这些参数限制在应用程序模块中。在库中,包必须在清单中定义。
scr/main/AndroidManifest.xml
该限制将选项定界为风格,但是,清单中的包属性不会合并,并且当和具有不同的包名称时,您会收到错误src/flavor/AndroidManifest.xml
。
一个棘手的解决方案是从任务名称中获取当前选择的风格,然后更改源集中的主要清单。
sourceSets {
main {
manifest.srcFile "src/$flavor_name/AndroidManifest.xml"
}
}
Run Code Online (Sandbox Code Playgroud)
这个 hack 有效,但总的来说是一个坏主意,我更喜欢改变我的架构设计并以不同的方式实现两个 Firebase 变体的存储库。
摇篮插件:3.2.0
归档时间: |
|
查看次数: |
3689 次 |
最近记录: |