当我来签署我的应用程序时,我遇到了一个大问题:我已根据文档设置了签名配置:
signingConfigs {
release {
storeFile file("lomapnew.keystore")
storePassword "myPassword"
keyAlias "myAlias"
keyPassword "Something...."
}
}
Run Code Online (Sandbox Code Playgroud)
但我仍然收到此错误消息:"应在Gradle构建脚本中指定签名配置"

我看到几个类似的问题,如:
但我觉得我的问题不同了.
首先我使用:
机器人:sharedUserId = "android.uid.system"
所以我需要用平台密钥签署我的应用程序.我能用这种方式做到这一点:
cd $ANDROID_ROOT/out/host/linux-x86/framework
java -Djava.library.path=$ANDROID_ROOT/out/host/linux-x86/lib64 -jar signapk.jar $ANDROID_ROOT/build/target/product/security/platform.x509.pem $ANDROID_ROOT/build/target/product/security/platform.pk8 $APP_DIR/app/build/outputs/apk/debug/app-debug.apk $APP_DIR/MyApp-signed.apk
Run Code Online (Sandbox Code Playgroud)
但是我想从gradle进行签名,所以我用这种方式生成了jks文件:
./keytool-importkeypair -k my_keystore.jks -p my_password -pk8 $ANDROID_ROOT/build/target/product/security/platform.pk8 -cert $ANDROID_ROOT/build/target/product/security/platform.x509.pem -alias platform
Run Code Online (Sandbox Code Playgroud)
我已经修改app/build.gradle了:
signingConfigs {
release {
storeFile file("my_keystore.jks")
storePassword "my_password"
keyAlias "platform"
keyPassword "my_password"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
Run Code Online (Sandbox Code Playgroud)
我已经检查过my_keystore.jks有平台别名:
keytool -list -v -keystore my_keystore.jks | grep Alias
Alias name: platform
Run Code Online (Sandbox Code Playgroud)
但是当我尝试做的时候:
./gradlew …Run Code Online (Sandbox Code Playgroud) 在Stackoverflow中有一些与我的问题相关的问题,例如:
他们很好.但仍让我感到困惑.当我在Android Studio中选择Build-> Generate signed APK时,我收到了以下警告消息:

这是什么意思?这是否意味着我必须通过配置build.gradle来使用gradle命令行?然后是什么向导?如果我只是通过单击确定忽略警告并按照向导生成apk文件,当我将apk上传到Google Play时,我会收到错误消息,说明apk处于调试模式.
如果我按照说明设置build.gradle,如下所示:
signingConfigs {
debug {
storeFile file("debug.keystore")
}
release {
storeFile file("../key/test.keystore")
storePassword "password"
keyAlias "key"
keyPassword "password"
}
}
buildTypes {
release {
debuggable false
signingConfig signingConfigs.release
}
}
Run Code Online (Sandbox Code Playgroud)
当我在终端运行./gradlew assembleRelease时,一切都是文件.
总之,我很困惑:
谢谢你的任何建议.
我已经编写了一个 Android 应用程序,但发布过程的最后一步仍然没有完成。我假设当我运行 gradle bundleRelease 时,它会生成我可以在 Play 商店上传的 aab 文件。但是 Play 商店说捆绑包未签名。但是,构建过程说它正在签名:
> Task :app:preBuild UP-TO-DATE
> Task :app:preReleaseBuild UP-TO-DATE
> Task :app:compileReleaseRenderscript NO-SOURCE
> Task :app:generateReleaseResValues UP-TO-DATE
> Task :app:generateReleaseResources UP-TO-DATE
> Task :app:mergeReleaseResources UP-TO-DATE
> Task :app:checkReleaseManifest UP-TO-DATE
> Task :app:createReleaseCompatibleScreenManifests UP-TO-DATE
> Task :app:mainApkListPersistenceRelease UP-TO-DATE
> Task :app:processReleaseManifest UP-TO-DATE
> Task :app:bundleReleaseResources UP-TO-DATE
> Task :app:checkReleaseDuplicateClasses UP-TO-DATE
> Task :app:mergeExtDexRelease UP-TO-DATE
> Task :app:compileReleaseAidl NO-SOURCE
> Task :app:generateReleaseBuildConfig UP-TO-DATE
> Task :app:prepareLintJar UP-TO-DATE
> Task :app:generateReleaseSources UP-TO-DATE …Run Code Online (Sandbox Code Playgroud) 我需要能够使用Jenkins工作构建我的apk的发布版本.
从阅读以下SO问题
我知道我可以通过两种方式之一来做到这一点.要么让用户在cmd提示符下输入密码,要么将我的密码详细信息存储在未提交给git的纯文本文件中,并存放在我的本地计算机上.
但是,在jenkins上运行构建作业时,这些都不会起作用.1)我无法获得用户输入,因为这可能是在半夜运行(即使用户在他们的机器上,我甚至不知道如何从cmd行获取用户输入)2)任何人都可以获得对该构建框的访问权限,可以通过cmd行或在该jenkins服务器上运行的另一个build.gradle作业捕获该文件的内容.
有谁知道无论如何我可以隐藏我的密码,但Jenkins的工作可以访问它?
谢谢
我想将我的密钥库存储在我的Android工作室项目中,以便我可以在Generate Signed APK向导中使用相对路径.但是我无法弄清楚签名APK向导的位置.
如何使用我的android工作室项目的相对路径到我的密钥库以与Generate Signed APK向导一起使用?
Gradle似乎在我正在进行的项目中丢失了构建类型.我可以重新创建一个小问题,如下所示.我有以下文件:
build.gradle
local.properties
src/main/AndroidManifest.xml
Run Code Online (Sandbox Code Playgroud)
的build.gradle:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:+'
}
}
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
minSdkVersion 1
targetSdkVersion 23
}
buildTypes {
debug {
}
release {
}
}
}
Run Code Online (Sandbox Code Playgroud)
local.properties:
sdk.dir=/path/to/android-sdk-linux
Run Code Online (Sandbox Code Playgroud)
的src/main/AndroidManifest.xml中:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="example"/>
Run Code Online (Sandbox Code Playgroud)
我希望摇篮生成任务installDebug和installRelease,因为我定义debug和release作为buildTypes.但事实并非如此.该命令gradle tasks产生:
:tasks
------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------
...
Install tasks
-------------
installDebug …Run Code Online (Sandbox Code Playgroud) 我正在使用Android Studio,而对于其他项目,当我尝试生成已签名的APK时,我会app-release.apk更加困难地获取该文件.
但在这个特定的项目中,我只能得到一个app-release-unaligned.apk文件.
与我的其他项目的主要区别是使用transloadit jar和org.apache.httpcomponents库,我必须在我的graddle文件中写下packagingOptions字段.
这是我的build.grade文件
apply plugin: 'com.android.application'
android {
signingConfigs {
}
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.bambinotes.bambinotessnap"
minSdkVersion 16
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
zipAlignEnabled true
}
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENCE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/notice.txt'
exclude 'META-INF/ASL2.0'
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: …Run Code Online (Sandbox Code Playgroud) 我使用的是最新版本的 Android Studio,但是当我尝试将应用程序发送到 PlayStore 时,我不能,因为 SHA1 不同。
这是证书中的 SHA1:

但应用程序版本具有此 SHA1:

我的 KeyStore 在 Android Studio 中发现了一个问题。密钥库有一个 SHA1,但具有此密钥库的应用程序有另一个。
试试这个:
$ keytool -list -v -keystore mycert.keystore 将显示: SHA1: 67:F0:AE:82:85:7C:BD:C8:A0:CE:45:FA:6B:A5:92:E5:4A: 34:40:公元
但是当您在 Android Studio 中使用此密钥库构建应用程序时,您将收到: $keytool -list -printcert -jarfile app-release.apk 将显示: SHA1: 15:C3:B6:FB:B0:9B:21:DC :85:D6:04:FA:62:44:EA:F7:3D:85:FD:F8
我对 android 世界很陌生,我试图在我的手机上运行一个简单的 hello world 应用程序。当我尝试这个时,我了解到由 android studio 生成的 APK 是未签名的。所以为了签署这个,我经历了创建一个密钥存储的过程,然后是一个私钥,它的别名,我成功地签署了 APK 并安装在我的手机上并运行它。
然后我通过这个链接将签名配置添加到 gradle 以使用新创建的密钥存储文件自动签署版本。我已经正确地按照上述链接的步骤操作并且没有遗漏任何东西,但是当我完成我的签名配置时,我有一个错误说
Gradle 项目同步失败。基本功能(例如编辑、调试)将无法正常工作。
错误:(19, 0) 在 SigningConfig 容器上找不到属性“config”。
我吃了一惊!现在我也无法手动签署我的 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'), …Run Code Online (Sandbox Code Playgroud) android ×10
apk ×5
gradle ×5
signing ×2
build.gradle ×1
code-signing ×1
google-play ×1
jenkins ×1
keystore ×1
release ×1
sha1 ×1
signed ×1