gpt4 book ai didi

android - 如何使用 gradle 使用平台 key 对 android 应用程序进行签名?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:03:56 24 4
gpt4 key购买 nike

我看到了几个类似的问题,例如:

但我觉得我的问题不一样。

首先我使用:

android:sharedUserId="android.uid.system"

所以我需要使用平台 key 签署我的应用程序。我可以通过这种方式做到这一点:

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

但是我想从 gradle 进行签名,所以我在 this 中生成了 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

并且我修改了 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
}
}

我检查过 my_keystore.jks 的平台别名是:

keytool -list -v -keystore my_keystore.jks | grep Alias
Alias name: platform

但是当我尝试这样做时:

./gradlew assembleRelease

或:

./gradlew signingReport

我得到:

Failed to read key platform from store "(...)/my_keystore.jks": Invalid keystore format

更新:我已经尝试按照 dr_g 提示进行操作,并且能够使用 Android Studio(构建 -> 生成已签名的 APK)对应用进行签名,所以我猜 keystore 没问题,但在使用时我仍然遇到相同的错误组装发布。我也尝试过按照 deadfish 的建议生成我自己的 keystore ,而且 Android Studio 生成的 keystore 确实适用于 gradle 和 assembleRelease 工作,但它不是平台 key ,所以不幸的是我不能使用它。

问题已解决:事实证明,我的问题确实与我提到的问题不同。它与用于生成 key 的 keytool(不是 gradle)有关,这是因为虽然我的默认 java 是 8,但我的默认 keytool 来自 java 10 ......当我从 java 8 切换到 keytool 时,一切都开始正常工作。

最佳答案

请尝试使用 .keystore 变体。可能有修复 java keystore (.jks) 格式的方法,但可能需要更多时间。

1) 从单独的 key 文件生成 .keystore 文件

$ openssl pkcs8 -inform DER -nocrypt -in \
$ANDROID_ROOT/build/target/product/security/platform.pk8 -out platform.key
$ openssl pkcs12 -export -in \
$ANDROID_ROOT/build/target/product/security/platform.x509.pem -inkey \
platform.key -name platform -out platform.pem -password pass:password
$ keytool -importkeystore -destkeystore platform.keystore -deststorepass \
password -srckeystore platform.pem -srcstoretype PKCS12 -srcstorepass
password

2) 测试您的新 keystore :

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore \
platform.keystore -storepass password your-app.apk platform

3) 在您的 gradle 构建中部署 keystore :

signingConfigs {
debug {
storeFile file('debug.keystore')
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
release {
storeFile file('platform.keystore')
storePassword 'password'
keyAlias 'platform'
keyPassword 'password'
}
}

上面的 build.gradle 还展示了一个使用 android 调试 keystore 作为调试构建标准的示例。

关于android - 如何使用 gradle 使用平台 key 对 android 应用程序进行签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51723768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com