1

我正在制作一个大型项目模块化。我已经分离了代码和布局文件,除了一个问题外一切正常。

我需要在模块中创建 3 种构建类型,即 beta、stage 和 live(原因稍后提到)。现在有一件事我无法理解。

  • 当直接从 Android Studio 运行时,我可以选择在构建时使用库模块的哪个构建变体。但
  • 生成签名的 apk 时,它不会询问库的构建类型。

一定有一些

  • 可以设置的默认值来配置它。我正在寻找那些可以使用的配置 选项
  • 生成签名 apk 时默认选择哪种构建类型的库?

我在库模块中创建构建变体的原因是我在模块中使用了 Content Provider,并且在同一设备中同时安装多个构建类型时出现 CONTENT_PROVIDER_AUTHORITY_CONFLICT 错误。

因此,为了同时安装 beta、stage 和 live build,我在 build.gradle 中添加了 Content Authority 作为字符串资源

apply plugin: 'com.android.library'
android {
compileSdkVersion Integer.parseInt(project.COMPILE_SDK_VERSION)
buildToolsVersion project.BUILD_TOOLS_VERSION
defaultConfig {
    minSdkVersion Integer.parseInt(project.MIN_SDK_VERSION)
    targetSdkVersion Integer.parseInt(project.TARGET_SDK_VERSION)
    vectorDrawables.useSupportLibrary true
}
buildTypes {
beta {
        minifyEnabled false
        resValue("string", "account_type", "com.****.****.dev")
        resValue("string", "_authority", "com.****.****.dev.syncadapter.finance")
        buildConfigField "String", "FinanceContentProvider", "\"com.****.****.dev.syncadapter.finance\""
    }
    staging {
        minifyEnabled false
        resValue("string", "account_type", "com.****.****.stage")
        resValue("string", "_authority", "com.****.****.stage.syncadapter.finance")
        buildConfigField "String", "FinanceContentProvider", "\"com.****.****.stage.syncadapter.finance\""
    }
    live {
        minifyEnabled false
        resValue("string", "account_type", "com.****.****.live")
        resValue("string", "_authority", "com.****.****.live.syncadapter.finance")
        buildConfigField "String", "FinanceContentProvider", "\"com.****.****.syncadapter.finance\""
4

1 回答 1

0

您需要在以下构建类型中使用它:

flavorDimensions 'tier'
    productFlavors {

        beta {
            buildConfigField("Your_field", "Data", "Data")
        }
        staging {
              buildConfigField("Your_field", "Data", "Data")
        }
        live {
              buildConfigField("Your_field", "Data", "Data")
              }

        android.applicationVariants.all { variant ->
            variant.outputs.all {
                outputFileName = "AppName_${variant.productFlavors[0].name}-${buildType.name}-${defaultConfig.versionCode}.apk"
            }
        }

    }

希望这可以帮助。

于 2018-03-21T12:04:48.717 回答