Android Studio-向Gradle添加签名配置

12

我对安卓领域很陌生,只是想在手机上运行一个简单的“Hello World”应用程序。但是我学到,由Android Studio生成的APK是未签名的。为了签名,我已经创建了密钥库和私有密钥,并成功签署了APK并在手机上安装并运行。

然后我跟着这个链接添加签名配置到gradle中自动使用新创建的密钥库文件进行签名。

我按照上述链接中的步骤操作,没有遗漏任何内容。但当我完成签名配置时,出现错误:

Gradle项目同步失败。基本功能(例如编辑、调试)将无法正常工作。

Error:(19, 0) Could not find property 'config' on SigningConfig container.

我很惊讶!而且现在我也不能手动签名我的APK了。现在当我尝试手动签名时,它会提示 gradle 同步不一致

我猜这个文件将有助于帮助我解决此错误。该项目的build.gradle文件。我正在尝试理解这里提到的是否与通过Android Studio UI进行的签名配置相同。

apply plugin: 'com.android.application'

android {
    signingConfigs {
        release {
            storeFile file("<path>\\firstKeystore.jks")
            storePassword "******"
            keyAlias "usual password"
            keyPassword "******"
        }
    }
    compileSdkVersion 19
    buildToolsVersion '20.0.0'
    defaultConfig {
        applicationId 'com.tech.vasanth.newsfeed'
        minSdkVersion 19
        targetSdkVersion 19
        versionCode 1
        versionName '1.0'
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config
            debuggable false
            jniDebugBuild false
            renderscriptDebugBuild false
            zipAlign true
        }
        debug {
            signingConfig signingConfigs.config
        }
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

1
这个回答解决了你的问题吗?如何使用Gradle创建签名发布APK文件? - VahidHoseini
3个回答

12

buildTypes.release 块中有一个错误,签名配置应该是:

signingConfig signingConfigs.release

请注意,这是您在上面的signingConfigs块中命名配置的方式。

同时,在buildTypes.debug块中不要包含签名配置(或者,如果您确实想要它,请设置如上所述)。


我按照你的建议进行了更改,现在我在buildTypes.debug signingConfig signingConfigs.config这一行遇到了错误。我可以将其删除吗? - Vasanth Nag K V
哦耶..谢谢,它起作用了! 我想知道的一件事是,我上面给出了一个链接,我在那里使用了工作室的UI来配置签名配置。所以我可以通过配置build.gradle来完成它吗?两者是相同的吗? - Vasanth Nag K V
是的,build.gradle文件包含有关构建的所有信息。您甚至可以在不打开Android Studio的情况下从命令行构建项目。 - Henry
哇,这很好知道,有没有指针可以让我玩建立命令行工具?感激不尽 :) - Vasanth Nag K V
1
只需进入项目的根目录并执行 gradlew build(如果您使用的是Linux,请使用./gradlew)。所有细节都可以在Gradle文档中找到 https://docs.gradle.org/current/userguide/userguide.html - Henry
我也发现了一个小问题,如果你使用gradle脚本来分配签名配置的话,你需要使用Build>Build APK而不是Build>Generate Signed APK Bundle选项。后者在这种情况下似乎不起作用。 - gtxtreme

8

我一直在使用以下配置进行调试/发布。

signingConfigs {
            release {
                keyAlias 'keyAlias'
                keyPassword 'keyPassword'
                storePassword 'storePassword'
                storeFile file("${rootDir}/keystores/app.keystore")
            }

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

在定义发布模块时:

 buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'other-rules.pro'
            signingConfig signingConfigs.release
        }
        debug {
            signingConfig signingConfigs.debug
        }
    }

注意: 这里的rootDir是您的项目根目录。请将您的密钥库存储在所述目录中。


4
获取发布的结构如下所示:
signingConfigs {
    release {
        storeFile file("release.keystore")
        storePassword "******"
        keyAlias "******"
        keyPassword "******"
    }
}
buildTypes {
    release {
        signingConfig signingConfigs.release
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接