安卓APK应用签名生成

安卓APK应用签名生成

耀鳞光翼 Lv3

方式一:Android Studio生成

  1. 生成签名

    将项目Sync with Gradle后,点击菜单build-GenerateSSigned AppBundle or APK

ASgenerate
ASgenerate

然后选择生成APP的打包格式:APK或ABB

image-20241229140453776
image-20241229140453776

选择Create new....新建KeyStore文件

image-20241229140653126
image-20241229140653126

填写签名存储文件的相关信息:

image-20241229140802895
image-20241229140802895

KeyStore:

  • Key store path:选择KeyStore文件的存储路径,并命名xxx.jks
  • Password:设置jks文件的密码
  • confirm:再次确认密码

KEY:

  • Alias:设置密钥名称
  • Password:设置密钥的密码
  • confirm:再次确认密码
  • Validity(years):密钥有效时间(单位为年)

Certificate:

  • First and Last Name:证书创建人姓名
  • Qrganizational Unit:组织单位名称
  • Organization:组织名称
  • City or Locality:所在城市或区域名
  • State or Province:所在州或者省份名
  • Country Code(XX):双字母国家/地区代码
  1. 使用方式(为应用签名):

    build-GenerateSSigned AppBundle or APK中填写相关信息:

    image-20241229141839197
    image-20241229141839197

    Key store path:选择KeyStore的jks文件所在位置

    Key store password:输入KeyStore文件的密码

    Key alias:选择对应的密钥名称

    Key password:填写密钥密码

方式二:利用keyTool手动生成签名文件

​ 有时候在从他人的源码编译安装时,可能在代码中已经定义了签名文件存储位置,密钥等相关信息,但上传到代码托管平台时,不会把自己的密钥上传。因此在Sync with Gradle途中就会提示缺少密钥并报错。

​ 由于此时未完成Sync with Gradle,在Build菜单下是不会出现GenerateSSigned AppBundle or APK选项的,也就无法利用Android Studio来生成签名文件,此时就需要手动创建,并将其放置在代码中显示的存储位置。

  1. 手动生成jks文件:

    1. 首先cd 到Android Studio 的 jre 文件夹中的bin目录下(只有在此目录下才能调用keyTool)

    2. 在该目录下打开命令行,并按照如下提示输入命令:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      keytool -genkey -v -keystore demo.jks -alias demo  -storepass 123456 -keypass 123456 -keyalg RSA -validity 14000

      备注:
      -keystore:设置生成的文件名称,包含后缀;
      -alias:设置别名
      -storepass:设置文件的密码
      -keypass:设置key的密码
      -keyalg:设置使用的加密算法,一般写RSA
      -validity:设置有效期,尽可能长
    3. 根据提示补充证书相关信息:

      您的名字与姓氏是什么?
      [Unknown]: wu
      您的组织单位名称是什么?

      [Unknown]: xxx公司
      您的组织名称是什么?
      [Unknown]: xxx组织
      您所在的城市或区域名称是什么?

      [Unknown]: 北京
      您所在的省/市/自治区名称是什么?
      [Unknown]: 京
      该单位的双字母国家/地区代码是什么?
      [Unknown]: 86
      CN=wu, OU=xxx公司, O=xxx组织, L=北京, ST=京, C=86是否正确?
      [否]: 是

      正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 14,000 天):
      CN=wu, OU=xxx公司, O=xxx组织, L=北京, ST=京, C=86
      [正在存储demo.jks]

    4. 若提示需要迁移为行业标准格式 PKCS12,则继续输入keytool -importkeystore -srckeystore demo.jks -destkeystore demo.jks -deststoretype pkcs12完成迁移

  2. 创建sign.properties文件:

    在工程根目录下创建sign.properties文件,并替换为自己的签名文件:

    1
    2
    3
    4
    STORE_FILE=d:/xxx/debug.keystore
    STORE_PASSWORD=android
    KEY_ALIAS=AndroidDebugKey
    KEY_PASSWORD=android
  3. 在App module中的builg.gradle中,修改配置文件中的签名信息:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'kotlin-kapt'
    id 'kotlin-android-extensions'
    }

    android {
    namespace 'com.lyihub.privacy_radar'
    compileSdk 33

    signingConfigs {
    release {
    def Properties buildProps = getSign()
    storeFile file(buildProps['STORE_FILE'])
    keyAlias buildProps['KEY_ALIAS']
    keyPassword buildProps['KEY_PASSWORD']
    storePassword buildProps['STORE_PASSWORD']
    }
    }

    defaultConfig {
    applicationId "com.lyihub.privacy_radar"
    minSdk 24
    targetSdk 33
    versionCode 1
    versionName "1.0"

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
    release {
    minifyEnabled false
    signingConfig signingConfigs.release
    proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
    debug {
    signingConfig signingConfigs.release
    }
    }
    compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
    jvmTarget = '1.8'
    }
    }

    /**
    * 读取配置签名
    * @return
    */
    def getSign() {
    def Properties buildProperties = new Properties()
    buildProperties.load(new FileInputStream(file('../sign.properties')))
    return buildProperties
    }

    dependencies {

    implementation 'androidx.core:core-ktx:1.9.0'
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.8.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'

    implementation 'com.github.Victor2018:ScreenMatchLib:v1.5'
    implementation 'com.github.Victor2018:easypermissions:v1.1.0'
    // implementation 'com.journeyapps:zxing-android-embedded:4.2.0'
    implementation 'com.github.Victor2018:ZxingLib:v2.0'
    implementation 'io.github.lucksiege:pictureselector:v3.11.2'


    //glide
    implementation 'com.github.bumptech.glide:glide:4.11.0'
    kapt 'com.github.bumptech.glide:compiler:4.11.0'

    }

    上述只是一个样例,实际操作请比对自己的配置文件,看清路径和对应的名称

最后编译安装即可。

  • 标题: 安卓APK应用签名生成
  • 作者: 耀鳞光翼
  • 创建于 : 2024-12-29 14:56:00
  • 更新于 : 2025-01-01 22:44:30
  • 链接: https://blog.lightwing.top/2024/12/29/AndroidSign/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论