【问题标题】:How to sign an apk through command line如何通过命令行签署apk
【发布时间】:2018-06-05 17:19:32
【问题描述】:

请注意,我们已经在 Android SDK 的帮助下通过命令行创建了一个 apk 文件。现在由于将其上传到 google play store 需要对 apk 进行签名。我们该怎么做呢。

【问题讨论】:

    标签: android apk signed-apk


    【解决方案1】:

    步骤 1

    首先你需要生成一个私人签名密钥

    keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
    

    此命令将提示您输入密钥库和密钥的密码(也适用于一些附加字段)。请记住随时保持您的keystore文件private

    第二步

    接下来你需要设置 gradle

    1. 将您在步骤 1 中生成的my-release-key.keystore 放在android/app
    2. android/app 下更新您的~/.gradle/gradle.properties 并添加以下内容

      MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
      MYAPP_RELEASE_KEY_ALIAS=my-key-alias
      MYAPP_RELEASE_STORE_PASSWORD=<The password you choose earlier with the keytool>
      MYAPP_RELEASE_KEY_PASSWORD=<The password you choose earlier with the keytool>
      

    第三步

    最后你需要更新你的android/app/build.gradle

    android {
        ...
        defaultConfig { ... }
        signingConfigs {
            release {
                if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
                    storeFile file(MYAPP_RELEASE_STORE_FILE)
                    storePassword MYAPP_RELEASE_STORE_PASSWORD
                    keyAlias MYAPP_RELEASE_KEY_ALIAS
                    keyPassword MYAPP_RELEASE_KEY_PASSWORD
                }
            }
        }
        buildTypes {
            release {
                ...
                signingConfig signingConfigs.release
            }
        }
    }
    

    现在您可以通过在您的 android 目录中运行以下命令,通过命令行简单地生成签名版本

    ./gradlew assembleRelease
    

    然后可以在您的 build/outputs/apk/release 目录下找到生成的 apk。

    【讨论】:

    • 其他两个步骤肯定可以完成。但是第一步,当我在 cli 中运行该命令时,它说它不是被识别的内部命令。我该怎么办。
    • 我假设您在 Windows 上,如果是这种情况,您需要从 C:\Program Files\Java\jdkx.x.x_x\bin 运行密钥工具
    • 并非所有的 android apk 都是在 Android Studio 中创建的,因此这只适用于 60% 的开发团队。其他答案更好。我怀疑这甚至可以在不自己托管的情况下在管道上实现
    【解决方案2】:
    1. 首先您需要一个密钥库来开始该过程。您将使用此密钥库对您的 apk 进行签名,并且您需要使用相同的密钥库进行签名以备将来更新。在此处了解有关密钥库的更多信息:https://developer.android.com/studio/publish/app-signing#generate-key

    2. 生成密钥库后,您应该使用jarsigner 实用程序(在 JDK 文件夹中可用)

    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore your-release-key.keystore android-release-unsigned.apk alias -storepass password
    
    1. 下一步是使用zipalign 工具(在android SDK 文件夹中)来验证apk。
    path-to-android-sdk/build-tools/version/zipalign -v 4 android-release-unsigned.apk android-prod-released-signed.apk
    
    1. 最后一步是使用apksigner 工具(在android SDK 文件夹中)进行验证
    path-to-android-sdk/build-tools/version/apksigner verify android-prod-released-signed.apk
    

    PS:用实际值替换路径、文件和密码

    【讨论】:

      【解决方案3】:

      按照以下命令使 apk 播放商店准备就绪:

      第 1 步:创建未签名的 apk:

      ./gradlew assembleRelease
      

      第 2 步:创建签名的 apk:

      jarsigner -keystore YOUR_KEYSTORE_PATH -storepass YOUR_KEYSTORE_PASSWORD app/build/outputs/apk/release/app-release-unsigned.apk YOUR_KEY_ALIAS
      

      第 3 步:压缩对齐 apk:

      your_android-sdk_path/android-sdk/build-tools/your_build_tools_version/zipalign -v 4 app/build/outputs/apk/release/app-release-unsigned.apk release.apk
      

      【讨论】:

        最近更新 更多