【问题标题】:Android Studio: how to create a second debug build typeAndroid Studio:如何创建第二个调试构建类型
【发布时间】:2016-05-04 04:35:23
【问题描述】:

我想创建第二种构建类型,它应该与现有的调试类型完全一样。目前我有两种构建类型:调试和发布。只需单击即可运行调试,并使用调试密钥库自动签名。 我通过Build -> Generate signed APK 向导手动编译发布版本。

所以为了克隆调试构建类型,我首先在 app build.graddle 文件中添加了第二个名为“local”的构建类型:

buildTypes {
    ...
    debug {
        debuggable true
        minifyEnabled false
    }
    local {
        debuggable true
        minifyEnabled false
    }
}

然后我创建了app/src/local/res 并添加了一些文件。

然后我执行 gradle resync 并在左侧选项卡中选择新的构建类型:

最后我点击了运行按钮,我希望它能够正常工作。这个IntelliJ help article 说调试签名配置是默认配置:

这意味着如果您不手动配置工件并且 在运行/调试配置中选择部署默认 APK 选项: Android Application 对话框,IntelliJ IDEA 将使用预定义的 生成的证书中的值

而是显示此对话框:

当我单击修复按钮时,它会打开整个应用模块的签名配置对话框。但是,我不想签署此 apk 以进行发布,我需要使用调试证书对其进行签名。我还注意到已经创建了一个新的assembleLocal gradle 任务,但它会生成一个未对齐的 apk。在此文件夹中,我可以看到常规调试 apk 在其未对齐版本和最终版本中正确生成。

到底如何才能克隆调试构建类型?

【问题讨论】:

  • 你应该接受正确的答案,对我来说是 ivan.panasiuk 答案

标签: android debugging android-studio gradle build


【解决方案1】:

此外,您可以使用以下命令使您的构建类型类似于调试:

initWith(buildTypes.debug)

这是一个例子:

...
buildTypes {

    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        buildConfigField 'String', 'URL_API_BASE_SERVICE', '"http://theidasworld.com"'
    }
    debug {
        versionName 'APP BETA'
        buildConfigField "Integer", "PIN", "0000"  
        buildConfigField 'String', 'URL_API_BASE_SERVICE', '"http://debug.theidasworld.com"'
    }
    inspection {
        initWith(buildTypes.debug) // keep versionName and PIN from 'debug'
        buildConfigField 'String', 'URL_API_BASE_SERVICE', '"http://inspection.theidasworld.com"'
    }
}
...

【讨论】:

  • 非常感谢,我尝试设置signingConfig signingConfigs.debug,我希望它可以工作,但它没有,你的解决方案做到了!谢谢
【解决方案2】:

您可以在build.gradle 文件中指定signingConfig 应与buildType 一起使用。

要使用与默认调试buildType 相同的signingConfig 进行签名,请使用以下命令:

buildTypes {
    local {
        signingConfig signingConfigs.debug
    }

    /* NOTE: the debug block is not required because it is a default
     * buildType configuration; all of its settings are defined implicitly
     * by Android Studio behind the scenes.
     */
}

如果您希望使用位于本地系统上的自定义密钥库,请改用以下内容:

signingConfigs {
    local {
        storeFile file("/path/to/custom.keystore")
        storePassword "password"
        keyAlias "MyLocalKey"
        keyPassword "password"
    }
}

buildTypes {
    local {
        signingConfig signingConfigs.local
    }
}

【讨论】:

  • 抱歉,我们没有在 build.gradle 中包含签名配置,因为每个团队成员都有不同的操作系统和密钥库路径,而且 VCS 同步会破坏其他开发人员的工作空间。但最重要的是,我不想签署释放。它应该使用调试配置正在使用的相同调试证书进行签名。
  • @MisterSmith 每个构建类型都使用密钥库签名。当然,您可以使用调试密钥库,检查答案的第一部分。答案的重要部分是您必须在 build.gradle 中定义签名配置,因为本地构建类型是自定义构建类型并且没有默认值。
  • 我明白这一点。但是我应该在“本地”signingConfig 中写什么以便它使用默认的调试密钥库?
  • 应该足够了signingConfig signingConfigs.debug。如果它不起作用添加signingConfigs { debug { storeFile file("debug.keystore") }}
  • 我自己找到了为调试构建隐式设置的signingConfig 选项。天哪。
【解决方案3】:

其他方式可能是使用风味,如下所示:

productFlavors {

  app1 {}

  app2 {}

}

【讨论】:

  • 是的,这可能是最简单的方法。
  • 这是一个很好的解决方案,但我对 falviours 的问题是我将有 buildType&flavors 组合。如果我只想在不同的调试环境之间切换呢?
  • 您在选项卡上有构建变体。在那里你可以选择构建变体。
【解决方案4】:

对于 Kotlin 构建脚本,above answer 的等效项是这样的:

android {
  buildTypes {
    create("local") {
      initWith(buildTypes["debug"])
      buildConfigField("String", "URL_API_BASE_SERVICE", """"http://..."""")
      buildConfigField("Boolean", "IS_CI", "${System.getenv("CI") == "true"}") // boolean example
      isDebuggable = true
    }
    testBuildType = "local"
  }
}

【讨论】:

    猜你喜欢
    • 2013-05-15
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 2017-11-24
    相关资源
    最近更新 更多