我想Fragment
为不同的构建变体创建 2 个版本,比如整个代码在风味 1 和风味 2 中会有所不同。我想在不根据BuildConfig.FLAVOR
代码中的参数执行 if-else 的情况下解决这个问题。这意味着如果我有,我希望在构建不同风格时使用不同代码MapFragment
命名的完全相同的类。MapFragment
我想要这样做的原因是我不想MapFragment
从其他版本中对此进行任何引用(在我的应用程序上的任何日志或细节中都有任何参考。这应该像string.xml
本地化一样工作,或者dimens.xml
。有什么办法可以实现这一目标?
原因是我使用的是华为地图和ag-connect
服务以及 Google Play 地图。问题是华为正在使用一些后台定位服务,然后拒绝我在 Google Play 上的应用。这种华为风格永远不应该在 Google Play 上提供,它就像华为商店应用程序的独立副本。
这意味着如果我.apk
从 Google Play(风格 1)构建,我不会包含任何来自华为风格的 ag-connect 服务或类或引用/导入,反之亦然。
更新:
当我检查下面的评论时,我尝试创建 sourceSets 并将我的风格重新实现到这些新集合中。但它仍然无法编译。
我还需要知道如何将这些口味与类型和来源结合起来。因为我有两个主要来源:谷歌和华为。然后,我需要 4 种风格用于这些来源,如 googleProd、googleProdTest、googleDev、googleDevTest 和华为相同,并且所有这些都应该具有构建类型调试/发布,以防我想将它们发布到 Google Play 商店进行测试。问题是我需要产品子风味之类的东西。每个华为风味(prod、test、dev、dev-test)将使用华为sourceSet(main+huawei),每个google风味(prod、test、dev、dev-test)将使用google sourceSet(main+google)。这意味着主要来源将是两者通用的代码,并且谷歌/华为来源具有相同片段的不同版本。
所以这些应该是最终的 buildVariants:
- googleProd (main+google src)
- googleTest (main+google src)
- googleDev (main+google src)
- googleDevTest (main+google src)
- huaweiProd (main+huawei src)
- huaweiTest (main+huawei src)
- huaweiDev (main+huawei src)
- huaweiDevTest (main+huawei src)
以及所有 8 个版本的发布/调试构建类型。总共有 16 个变体。
这意味着我需要知道如何将 src 与 , 和 flavor 合并google
,并将 src 与,和 flavor合并,prod
所以我不需要4 个相同的 huawei Fragment和4 个对所有口味都相同的 google Fragment。它应该像抽象类/父类一样工作。test
dev
dev-test
huawei
huaweiProd
huaweiTest
huaweiDev
huaweiDev-test
A problem occurred evaluating project ':app'.
No signature of method: build_1t7zaa85nxlbgjo4n3n9fcb4s.android() is applicable for argument types: (build_1t7zaa85nxlbgjo4n3n9fcb4s$_run_closure1) values: [build_1t7zaa85nxlbgjo4n3n9fcb4s$_run_closure1@56b08118]
代码梯度:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
//Google Crashlytics
apply plugin: 'com.google.firebase.crashlytics'
//Google Services
apply plugin: 'com.google.gms.google-services'
//Kotlin
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 29
def code = getVersionCodeTimestamp()
defaultConfig {
applicationId "----"
minSdkVersion 21
targetSdkVersion 29
versionCode code
versionName "2.5.5"
vectorDrawables.useSupportLibrary = true
}
lintOptions {
checkReleaseBuilds false
abortOnError false
}
packagingOptions {
exclude 'META-INF/atomicfu.kotlin_module'
}
signingConfigs {
app{
...
}
}
buildTypes {
release {
manifestPlaceholders = [crashlyticsCollectionEnabled:"true"]
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.app
}
debug {
manifestPlaceholders = [crashlyticsCollectionEnabled:"false"]
signingConfig signingConfigs.app
}
}
sourceSets {
google {
java.srcDirs('src/main/java', 'src/google/java')
}
huawei {
java.srcDirs('src/main/java', 'src/hua/java')
}
}
flavorDimensions "production"
productFlavors {
google {
prod {
dimension "production"
...
}
test {
dimension "production"
...
}
dev {
...
}
dev_test {
...
}
}
huawei {
prod {
dimension "production"
...
}
test {
dimension "production"
...
}
dev {
...
}
dev_test {
...
}
}
}
}
dependencies {
implementation project(':pin')
//Kotlin SDK
implementation 'androidx.core:core-ktx:1.3.2'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
//Glide
implementation 'com.github.bumptech.glide:glide:4.11.0'
//Kotlin Coroutines
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.8'
//AndroidX
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.appcompat:appcompat:1.3.0-alpha02'
implementation 'androidx.palette:palette-ktx:1.0.0'
//Google SDK
implementation 'com.google.android.material:material:1.3.0-alpha03'
implementation 'com.google.android.gms:play-services-location:17.1.0'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.maps.android:android-maps-utils:2.0.3'
implementation 'com.google.zxing:core:3.4.0'
//Google Crashlytics SDK
implementation ('com.google.firebase:firebase-crashlytics:17.2.2') {
transitive = true
}
//Google Analytics SDK
implementation 'com.google.firebase:firebase-analytics:18.0.0'
//Google Firebase Messaging
implementation 'com.google.firebase:firebase-messaging:21.0.0'
implementation 'com.google.firebase:firebase-core:18.0.0'
//Huawei SDK
huaweiImplementation 'com.huawei.hms:identity:4.0.1.300'
huaweiImplementation 'com.huawei.hms:location:4.0.3.303'
huaweiImplementation 'com.huawei.hms:maps:4.0.1.301'
}