Android Studio:如何创建第二个调试版本类型

时间:2016-01-27 09:43:33

标签: android debugging android-studio gradle build

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

因此,为了克隆调试构建类型,我首先添加了第二个构建类型,名为" local"到app build.graddle文件:

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

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

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

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

  

这意味着如果您没有手动配置工件   在“运行/调试配置”中选择“部署默认APK”选项:   在Android应用程序对话框中,IntelliJ IDEA将使用预定义的   生成的

的证书中的值

而是显示此对话框:

run dialog

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

我如何才能克隆调试版本类型?

3 个答案:

答案 0 :(得分:27)

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

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

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
    }
}

答案 1 :(得分:25)

此外,您可以使用以下命令使您的Build类型类似于debug:

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"'
    }
}
...

答案 2 :(得分:1)

其他方式可能是使用口味。

示例:

producFlavors{

app1{}

app2{}

}