我刚刚将我的应用程序转换为即时应用程序,问题是它的设置有点复杂,因为我有3个维度:
-
经验
- instant
- installed
-
类型
- demo
- controlled
- user
-
调整
- normal
- perf
因此,到instant app的转换过程并非一帆风顺,必须添加一些渐变代码来忽略一些口味的排列,为构建变体设置源代码和清单位置,处理不同清单中活动的深层链接,以及我设法解决的一系列问题。除了firebase之外,一切似乎都很好。
我想了解firebase是如何路由google服务的。json文件,如何设置不同的位置或如何使其重复文件或其他内容。
当我添加firebase和google服务时。json文件到安装目录,我得到以下错误:
文件谷歌服务。缺少json。Google服务插件无法
function without it.
Searched Location:
myapp_project/base/src/feature/instant/user/normal/release/google-services.json
... and so on with other flavors and combinations
这对我来说没有太大意义,因为目录树结构的格式不好。我的目录树如下:
- myapp_project
- base
- src
- controlled
- demo
- main
- user
- userNormal
- userPerf
- installed
- instant
我尝试创建所需的目录,并将文件添加到所有目录中。然后它可以完美地编译,但它没有连接到firebase。
使现代化
在这件事上,我意识到gradle在许多目录中搜索了该文件,但其中有我的“基本”目录,所以只添加了google服务。json文件现在可以编译,无需为每个目录创建文件。我还将文件中的包字符串更改为。使其不会抛出包未找到错误。但是,它仍然编译得很好,但无法连接到firebase服务器。
基本渐变文件
apply plugin: 'com.android.feature'
apply plugin: 'kotlin-android'
import org.apache.tools.ant.taskdefs.condition.Os
android {
baseFeature true
compileSdkVersion 28
buildToolsVersion '28.0.3'
defaultConfig {
minSdkVersion 21
targetSdkVersion 28
testInstrumentationRunner
"android.support.test.runner.AndroidJUnitRunner"
}
def keystoreProperties = Os.isFamily(Os.FAMILY_WINDOWS) ?
"KeyStoreWin.properties" : "KeyStore.properties"
Properties props = new Properties()
props.load(new FileInputStream(file(project.property(keystoreProperties))))
signingConfigs {
storeSignature {
storeFile file(props['KEYSTORE'])
storePassword props['KEYSTORE_PASSWD']
keyAlias props['KEYSTORE1']
keyPassword props['KEYSTORE_PASSWD1']
}
}
buildTypes {
debug {
debuggable true
}
release {
signingConfig signingConfigs.storeSignature
debuggable false
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
renderscriptDebuggable false
}
}
flavorDimensions "experience", "type", "adjustment"
productFlavors {
instant {
dimension "experience"
versionCode 1
}
installed {
dimension "experience"
versionCode 2
}
user {
dimension "type"
}
demo {
dimension "type"
}
controlled {
dimension "type"
}
normal {
dimension "adjustment"
}
perf {
dimension "adjustment"
}
}
variantFilter { variant -> def names = variant.flavors*.name
if (names.contains("controlled") && names.contains("perf")) {
setIgnore(true)
}
if (names.contains("demo") && names.contains("perf")) {
setIgnore(true)
}
if (names.contains("user") && names.contains("perf") &&
variant.buildType.name == 'debug') {
setIgnore(true)
}
if (names.contains("instant") && names.contains("perf")) {
setIgnore(true)
}
if (names.contains("instant") && names.contains("demo")) {
setIgnore(true)
}
if (names.contains("instant") && names.contains("controlled")) {
setIgnore(true)
}
}
sourceSets {
instantUserNormal {
java.srcDirs = ['src/userNormal/java', 'src/userNormal/java/']
res.srcDirs = ['src/userNormal/res', 'src/userNormal/res/']
manifest.srcFile 'src/userNormal/AndroidManifest.xml'
}
installedUserNormal {
java.srcDirs = ['src/userNormal/java', 'src/userNormal/java/']
res.srcDirs = ['src/userNormal/res', 'src/userNormal/res/']
manifest.srcFile 'src/userNormal/AndroidManifest.xml'
}
installedUserPerf {
java.srcDirs = ['src/userPerf/java', 'src/userPerf/java/']
res.srcDirs = ['src/userPerf/res', 'src/userPerf/res/']
manifest.srcFile 'src/userPerf/AndroidManifest.xml'
}
}
defaultConfig {
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
packagingOptions {
exclude 'META-INF/proguard/androidx-annotations.pro'
}
}
repositories {
google()
maven { url "https://jitpack.io" }
mavenCentral()
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
... all dependencies here
}
apply plugin: 'kotlin-android-extensions'
apply plugin: 'com.google.gms.google-services'
已安装梯度:
import org.apache.tools.ant.taskdefs.condition.Os
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
buildToolsVersion '28.0.3'
defaultConfig {
applicationId "com.domain.myapp"
minSdkVersion 21
targetSdkVersion 28
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
def keystoreProperties = Os.isFamily(Os.FAMILY_WINDOWS) ?
"KeyStoreWin.properties" : "KeyStore.properties"
Properties props = new Properties()
props.load(new
FileInputStream(file(project.property(keystoreProperties))))
signingConfigs {
storeSignature {
storeFile file(props['KEYSTORE'])
storePassword props['KEYSTORE_PASSWD']
keyAlias props['KEYSTORE_UPS']
keyPassword props['KEYSTORE_UPS_PASSWD']
}
}
buildTypes {
debug {
debuggable true
versionNameSuffix "v1d"
}
release {
signingConfig signingConfigs.storeSignature
debuggable false
versionNameSuffix "v1r"
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
renderscriptDebuggable false
}
}
flavorDimensions "experience", "type", "adjustment"
productFlavors {
instant {
dimension "experience"
}
installed {
dimension "experience"
}
user {
dimension "type"
}
demo {
dimension "type"
applicationIdSuffix ".demo"
}
controlled {
dimension "type"
applicationIdSuffix ".controlled"
}
normal {
dimension "adjustment"
}
perf {
dimension "adjustment"
}
}
variantFilter { variant -> def names = variant.flavors*.name
if (names.contains("controlled") && names.contains("perf") {
setIgnore(true)
}
if (names.contains("demo") && names.contains("perf")) {
setIgnore(true)
}
if (names.contains("user") && names.contains("perf") && variant.buildType.name == 'debug') {
setIgnore(true)
}
if (names.contains("instant") && names.contains("perf")) {
setIgnore(true)
}
if (names.contains("instant") && names.contains("demo")) {
setIgnore(true)
}
if (names.contains("instant") && names.contains("controlled")) {
setIgnore(true)
}
}
packagingOptions {
exclude 'META-INF/proguard/androidx-annotations.pro'
}
}
repositories {
google()
maven { url "https://jitpack.io" }
mavenCentral()
}
dependencies {
implementation project(':base')
}
更新2
我的日志显示以下错误:
E/FA: GoogleService failed to initialize, status: 10, Missing google app id value from from string resources with name google_app_id.
E/FA: Missing google_app_id. Firebase Analytics disabled. See https....
但是,google\u app\u id存在于生成目录自动生成的值中。每个构建变量的xml文件
如何解决此问题?
已解决更新3
我不得不在基础上应用firebase插件两次,并安装了gradle文件。如其中一条评论中分享的帖子所示。
apply plugin: 'com.google.gms.google-services'