Android Studio 没有为调试版本签署代码

Android Studio does not sign the code for debug build

Android Studio 拒绝签署我的调试版本代码。

我有一个较旧的项目,在 build.gradle 中没有任何签名说明,所以我根据此 Android gradle signingConfig error 和其他帖子添加了这些。

我的 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 file('../../../.android/debug.keystore')
            keyAlias 'androiddebugkey'
            keyPassword 'android'
            storePassword 'android'
        }
    }
    buildTypes {
        debug {
            signingConfig signingConfigs.debug
        }
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
    productFlavors {
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}

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

我注意到 signingConfigs

signingConfig signingConfigs.debug

下划线显示错误信息 "Cannot infer argument types..."

所以我转到 UI 中的项目设置,删除签名以及构建和签名之间的关系,保存它,然后将其添加回来。同样的问题。

我确定这是我刚刚忽略的非常小的事情,或者 Google 重命名了版本之间的命令,无论如何。

有人可以帮忙吗?

这里有几件事,假设您的 debug.keystore~/.android 文件夹中的那个。

改变这个:

    debug {
        storeFile file('../../../.android/debug.keystore')
        keyAlias 'androiddebugkey'
        keyPassword 'android'
        storePassword 'android'
    }

至此(将debug.keystore存入根项目):

    debug {
        storeFile rootProject.file('debug.keystore')
        keyAlias 'androiddebugkey'
        keyPassword 'android'
        storePassword 'android'
    }

你不需要覆盖 debug BuildType,它自然地用 debug 键签名,所以你可以删除:

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

为新 gradle experimental plugin 添加一个答案,因为语法不同:

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 块之外。