如何解决Java11不支持DSA密钥库生成RN APK的问题?
解决Java 11下无法使用DSA密钥库签名React Native APK的问题
可行方案:仅在签名阶段使用Java 8环境
由于已上架应用不能更换签名密钥(否则无法向现有用户推送更新),核心思路是继续使用原DSA密钥库,仅将APK签名步骤切换回Java 8环境,其余构建流程仍保留Java 11:
方式一:配置Gradle指定签名用JDK
在模块级build.gradle中,为签名任务指定Java 8的jarsigner路径,示例配置:android { signingConfigs { release { storeFile file("your-keystore.jks") storePassword "你的密钥库密码" keyAlias "你的密钥别名" keyPassword "你的密钥密码" } } // 为签名任务指定Java 8的jarsigner执行文件 tasks.withType(JarSigner) { executable = "/path/to/java8/bin/jarsigner" } }方式二:手动拆分构建与签名步骤
- 用Java 11执行Gradle命令生成未签名的Release APK:
./gradlew assembleRelease -Pandroid.injected.signing.store.file=placeholder -Pandroid.injected.signing.store.password=placeholder -Pandroid.injected.signing.key.alias=placeholder -Pandroid.injected.signing.key.password=placeholder - 切换到Java 8环境,使用
jarsigner对未签名APK签名:jarsigner -verbose -sigalg SHA1withDSA -digestalg SHA1 -keystore your-keystore.jks app/build/outputs/apk/release/app-release-unsigned.apk 你的密钥别名 - (可选)用Android SDK的
zipalign优化签名后的APK:zipalign -v 4 app/build/outputs/apk/release/app-release-unsigned.apk app-release-signed-aligned.apk
- 用Java 11执行Gradle命令生成未签名的Release APK:
不可行方案说明
- 提取证书重新签发:该操作需要使用新的RSA密钥对重新签名APK,生成的签名与原应用完全不一致,无法通过应用商店的更新校验,只能作为新应用上架,会丢失现有用户及应用数据,因此不建议采用。
内容的提问来源于stack exchange,提问作者Dev strange
相关产品推荐
相关产品推荐

