简短问题:
如何更改库模块中 debug 或 release 构建类型的软件包名称?
上下文:
在具有MVP + Clean架构的Android项目中,我们在库模块中具有存储库模式。我们希望将Firebase包含在具有两个环境(开发和生产)的该库中。
我已经在Firebase中创建了项目(com.example.com
和com.example.com.dev
,然后将相应的google-services.json
下载到src / main和src / debug文件夹中。
Gradle google-services 插件使用 google-services.json 中定义的客户端ID验证模块软件包名称,但Android限制更改{{1} }在图书馆中(我找不到技术原因)
我尝试过的事情:
applicationId
和src / debug /中的com.example.com
,但是第二个只是被忽略com.example.com.dev
。我运行manifest.srcFile
时文件在列表中,但包名称没有改变目前,我只有两种合适的解决方案: 1.将Firebase的设置和实施保留在资源库外部的app模块中。 2. Firebase只有一个环境。
非常感谢您的帮助或建议。
EDIT :
请考虑我需要在模块(库)中而不是在应用程序中修改软件包。由于某些奇怪的原因,当我尝试在模块中使用./gradlew sourceSets
或applicationIdSuffix
时,Gradle会显示此错误:
错误:库项目无法设置applicationIdSuffix。
答案 0 :(得分:1)
图书馆项目无法设置applicationId。
这是Android Library项目的设计行为。
库模块中有两种不同的样式,并且设置不同 每个清单。该软件包仍然不会更改。
可能您需要将 Build Variants 更改为特定的口味/内部类型,然后才能看到更新的软件包名称生效。
请参见以下屏幕截图。
答案 1 :(得分:0)
另一个解决方案是使用applicationIdSuffix是productFlavors中的build.gradle文件。 像这样:
android {
compileSdkVersion 27
dataBinding.enabled = true
defaultConfig {
applicationId "com.iftalab.vista"
minSdkVersion 19
targetSdkVersion 27
versionCode 1
versionName "1.0"
flavorDimensions "default"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt')
}
}
productFlavors {
main {
applicationIdSuffix ".main"
}
admin {
applicationIdSuffix ".admin"
}
}
}
答案 2 :(得分:0)
我花了一些时间研究并尝试不同的替代方法,以在库模块中针对每种口味或构建类型获得两种不同的包名称,我的简短答案是:您不能,至少没有这样做棘手和肮脏的东西。
一些建议使用参数applicationIdSuffix
或applicationId
的人,该选项不起作用,因为库模块的设计将这些参数限制为app模块。在库中,必须在清单中定义包必须。
该限制将选项限制为口味,但是清单中的package属性未合并,并且scr/main/AndroidManifest.xml
和src/flavor/AndroidManifest.xml
具有不同的包名称时,您会收到错误消息。
一个棘手的解决方案是从任务名称中获取当前选择的风味,然后更改sourceSets中的主清单。
sourceSets {
main {
manifest.srcFile "src/$flavor_name/AndroidManifest.xml"
}
}
这种黑客手段行之有效,但总的来说是个坏主意,我更喜欢更改架构设计,并以不同的方式实现两个Firebase变体的存储库。
Gradle插件:3.2.0