Android Studio未签署调试生成的代码

Android Studio未签署调试生成的代码,android,android-studio,gradle,code-signing,Android,Android Studio,Gradle,Code Signing,Android Studio拒绝签署我的调试生成代码 我有一个旧项目,在build.gradle中没有任何签名说明,所以我根据本文和其他帖子添加了这些说明 模块级(唯一的模块)上的build.gradle文件如下所示(摘录): 可以找到storeFile,因为当我更改路径时,会出现编译错误。当路径正确时,它会编译,但当我尝试在我的应用程序中使用Facebook SDK时,它会报告错误的密钥散列 我注意到,签名配置 signingConfig signingConfigs.debug 带下划线,

Android Studio拒绝签署我的调试生成代码

我有一个旧项目,在build.gradle中没有任何签名说明,所以我根据本文和其他帖子添加了这些说明

模块级(唯一的模块)上的build.gradle文件如下所示(摘录):

可以找到storeFile,因为当我更改路径时,会出现编译错误。当路径正确时,它会编译,但当我尝试在我的应用程序中使用Facebook SDK时,它会报告错误的密钥散列

我注意到,签名配置

signingConfig signingConfigs.debug
带下划线,并显示错误消息“无法推断参数类型…”

因此,我转到UI中的项目设置,删除了签名以及构建和签名之间的关系,保存了这个,然后又重新添加了它。同样的问题

我确信这是我刚刚忽略的一个非常小的东西,或者谷歌在不同版本之间重命名了这个命令,不管怎样


有人能帮忙吗?

这里有几件事,假设您的
debug.keystore
是来自
~/.android
文件夹的

更改此项:

    debug {
        storeFile file('../../../.android/debug.keystore')
        keyAlias 'androiddebugkey'
        keyPassword 'android'
        storePassword 'android'
    }
为此(将
debug.keystore
存储在根项目中):

您不需要覆盖
调试
构建类型
,它自然会以
调试
键进行签名,因此您可以删除:

    debug {
        signingConfig signingConfigs.debug
    }
最终的
build.gradle

android {
    compileSdkVersion 21
    buildToolsVersion '21.1.2'
    defaultConfig {
        applicationId "cc.appname.android"
        minSdkVersion 11
        targetSdkVersion 21
        versionCode 1
        versionName '1.0'
    }
    signingConfigs {
        debug {
            storeFile rootProject.file('debug.keystore')
            keyAlias 'androiddebugkey'
            keyPassword 'android'
            storePassword 'android'
        }
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
    productFlavors {
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}

由于语法不同,因此添加新的答案:

model {
    android {
        buildTypes {
            release {
                signingConfig = $("android.signingConfigs.myConfig")
                ...
            }
        }
    }
    android.signingConfigs {
        create("myConfig") {
            keyAlias = 'androiddebugkey'
            keyPassword = 'android'
            storeFile = new File("${System.properties['user.home']}/.android/debug.keystore")
            storePassword = 'android'
            storeType = "jks"
        }
    }
 }

注意:
android.signingConfigs
块必须放置在
android
块之外

谢谢你,贾里德,现在就可以签字了。有趣的是,当我转到UI时,它添加了错误的
signingConfig signingConfigs.debug
本身。我相信这不是一个bug就是缺少依赖项。至少它现在可以工作了。关于
rootProject.file('debug.keystore')
-谢谢你的提示,但是相对路径仍然从项目根开始。由于调试密钥库位于路径的更高位置,因此我仍然需要将
rootProject.file('../../.android/debug.keystore')
放回cd。因此,要么调试密钥库位于错误的位置(不在项目根目录中),要么这是出于构建系统的目的和惯例,但根本不需要从build.gradle中引用它还有。@CliveJefferies那是因为你把它放在了几个目录中。@JaredBurrows我没有把钥匙放在任何地方;)
android {
    compileSdkVersion 21
    buildToolsVersion '21.1.2'
    defaultConfig {
        applicationId "cc.appname.android"
        minSdkVersion 11
        targetSdkVersion 21
        versionCode 1
        versionName '1.0'
    }
    signingConfigs {
        debug {
            storeFile rootProject.file('debug.keystore')
            keyAlias 'androiddebugkey'
            keyPassword 'android'
            storePassword 'android'
        }
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
    productFlavors {
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}
model {
    android {
        buildTypes {
            release {
                signingConfig = $("android.signingConfigs.myConfig")
                ...
            }
        }
    }
    android.signingConfigs {
        create("myConfig") {
            keyAlias = 'androiddebugkey'
            keyPassword = 'android'
            storeFile = new File("${System.properties['user.home']}/.android/debug.keystore")
            storePassword = 'android'
            storeType = "jks"
        }
    }
 }