【问题标题】:Issues with signing APK with keystore.jks, built with ionic cordova使用 ionic cordova 构建的 keystore.jks 签名 APK 的问题
【发布时间】:2021-04-26 20:46:46
【问题描述】:

我使用以下行构建我的应用程序

ionic cordova build android --prod --release

这将创建一个“app-release-unsigned.apk”文件。我有一个 'keystore.jks' 文件可用,尽管我到处都能找到人们谈论 .keystore 文件,但我认为这是我需要签署的文件。

我尝试过的事情如下:

1。使用 build.json 文件构建

ionic cordova build android --prod --release --BuildConfig=build.json

Json 内容:

{
  "android":
  {
    "release":
    {
      "keystore": "keystore.jks",
      "storePassword": "************", // Filled in password
      "password" : "************", // Filled in password
      "alias" : "**" // Also tried removing this line, didn't make any difference
    }
  }
}

问题:构建仍然未签名。 (我也尝试使用选项 2 解决此问题)

2。使用 jarsigner 命令签署 apk

我尝试在我的应用程序的根目录执行以下命令,其中也放置了密钥库文件。

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore keystore.jks platforms/android/app/build/release/apk/app-release-unsigned.apk bp

问题:在这个命令之后,它要求Enter Passphrase for keystore。我尝试填写我的密码和存储密码,但随后出现错误jarsigner error: java.lang.RuntimeException: keystore load: Keystore was tampered with, or password was incorrect

我还尝试使用 keypass 和 storepass 作为标志运行 jarsigner 命令,但这也没有用。 我很确定我的密码是正确的。

最后我看到您可以使用 Android Studio 来构建生成的 APK。在 Android Studio 构建菜单中,只有这个选项对我不可用。我正在使用 SDK Api 级别 28。

TL;DR:无法构建签名应用,不知道原因。

【问题讨论】:

  • 试试ionic cordova build android --prod --release --buildConfig build.json --verbose
  • @Yatinpatel 它构建并且我在我的platforms/android/app/build/outputs/apk/release/app-release-unsigned.apk 文件夹中获得了一个 APK。虽然它仍然没有签名..

标签: android angular macos cordova ionic-framework


【解决方案1】:

您可以尝试使用命令行和apksigner 构建:

从 Android Studio 下载最新的平台工具/构建工具

File --> Settings --> Android SDK --> SDK Tools --> Download platform-tools

它将包含apksigner(请确保您最近的 JDK 至少 > 11 才能使用它,否则您会遇到错误)

然后打开终端: cd Project/android

gradlew assembleRelease

cd android\app\build\outputs\apk\release

在此处添加您的 keystore.jks 文件。

在这个存储库中,做:

call zipalign -v -p 4 app-release-unsigned.apk app-release-unsigned-aligned.apk

然后:

call apksigner sign --ks keystore.jks --ks-pass pass:YOURPASSWORD --key-pass pass:YOURPASSWORD --out app-release-signed.apk app-release-unsigned-aligned.apk

然后你就有了签名的 apk。我正在使用这种方式将我的 APK 交付给客户。

【讨论】:

  • 我知道你的答案是 React?由于您的项目设置有些不同。这是否以同样的方式适用于 Angular 项目?
  • 这是我为我的 Angular 项目构建的方式。我在使用 jarsigner 时遇到了问题,所以我转向了 apksigner
猜你喜欢
  • 1970-01-01
  • 2016-07-10
  • 2019-11-15
  • 1970-01-01
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
  • 1970-01-01
相关资源
最近更新 更多