*自从最初发布以来,我已经改写了帖子*
当我尝试运行一个刚构建的版本apk时,我收到一个错误“你当前选择的版本的apk没有签名。”这是在“编辑配置”弹出窗口中。这是我的步骤:
那么,为什么这个错误呢?生成的APK似乎有效。我已成功将其发布到Android商店(仅限alpha测试)并验证堆栈转储是否已被混淆。
我不能做的是将它(上面的步骤6)下载到我的设备。我想这没关系,因为我可以下载调试版本。
(*)Android Studio将发布apk的输出默认为更高的,可能更方便的目录。但是我发现当它们分散时很难管理生成文件的一致性,所以我更喜欢在一个地方生成所有apks。
在项目结构中设置签名配置。
运行(或调试)应用程序似乎使用“Build - > Build APK”构建的apks。因此,如果app模块的构建变体是“release”,我们应该设置签名配置。
将此行添加到build.gradle中的发行版{...}中
signingConfig signingConfigs.config
尝试在构建文件中添加:
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled false
}
}
首先,如果没有密钥库文件,请创建密钥库文件。
第二次将app build gradle文件更新为类似这样的包含签名配置的文件。
android {
signingConfigs {
config {
keyAlias 'mykeyalias'
keyPassword 'android'
storeFile file('/Users/yourname/path/to/the/android/project/folder/android_project_folder_name/app/debug.keystore')
storePassword 'android'
}
}
buildTypes {
debug {
applicationIdSuffix = ".debug"
versionNameSuffix "-debug"
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
}
}
第三,构建并运行应用程序,完成。
在https://developer.android.com/studio/publish/app-signing#secure-shared-keystore中写道,您不应该在build.gradle
和VCS中保留凭据信息。因此,创建一个签名配置文件(Build> Generate Signed APK ...),然后执行此操作。
在项目的根目录中创建名为
keystore.properties
的文件。此文件应包含您的签名信息,如下所示:storePassword=myStorePassword keyPassword=mykeyPassword keyAlias=myKeyAlias storeFile=myStoreFileLocation
在模块的build.gradle文件中,添加代码以在
keystore.properties
块之前加载android {}
文件。// Create a variable called keystorePropertiesFile, and initialize it to your // keystore.properties file, in the rootProject folder. def keystorePropertiesFile = rootProject.file("keystore.properties") // Initialize a new Properties() object called keystoreProperties. def keystoreProperties = new Properties() // Load your keystore.properties file into the keystoreProperties object. keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) android { ... }
您可以使用语法
keystoreProperties
来引用存储在keystoreProperties['propertyName']
中的属性。修改模块的signingConfigs
文件的build.gradle
块,以使用此语法引用存储在keystoreProperties
中的签名信息。android { signingConfigs { config { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile file(keystoreProperties['storeFile']) storePassword keystoreProperties['storePassword'] } } ... }
您可以选择在build.gradle
中添加:
buildTypes {
release {
...
signingConfig signingConfigs.config
}
}
现在你可以制作一个签名的apk。不要忘记从VCS中排除keystore.properties
。
我遇到了同样的问题,我错误配置了signingConfigs
属性。
具体来说,我以为我没有密码用于实际设置它的密钥。添加缺少的信息后,它工作。
signingConfigs {
config {
keyAlias 'key0'
storeFile file('C:/Users/xxx/xxx/keystore/xxx.jks')
storePassword '123'
keyPassword '123' // this was missing
}
}