You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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"
        }
    }
    
  • 方式二:手动拆分构建与签名步骤

    1. 用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
      
    2. 切换到Java 8环境,使用jarsigner对未签名APK签名:
      jarsigner -verbose -sigalg SHA1withDSA -digestalg SHA1 -keystore your-keystore.jks app/build/outputs/apk/release/app-release-unsigned.apk 你的密钥别名
      
    3. (可选)用Android SDK的zipalign优化签名后的APK:
      zipalign -v 4 app/build/outputs/apk/release/app-release-unsigned.apk app-release-signed-aligned.apk
      

不可行方案说明

  • 提取证书重新签发:该操作需要使用新的RSA密钥对重新签名APK,生成的签名与原应用完全不一致,无法通过应用商店的更新校验,只能作为新应用上架,会丢失现有用户及应用数据,因此不建议采用。

内容的提问来源于stack exchange,提问作者Dev strange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:30:59