每个app在发布前都需要对其进行签名,不签名的包是不能安装使用的。
通常app签名操作是由开发者进行操作的,这个对用户是无感的。对于同一个app进行不同签名的时候,我们在设备上做替换的时候会出现一个问题,提示包的签名是不一样的,是否要卸载当前设备中的app,用来满足新包的安装。可见app的签名,是系统用于识别和区分应用的重要凭证。
如何进行签名
1、生成签名证书
1.1 使用命令 keytool 方式生成签名证书
以windows平台为例,通过win + r组合键,输入“cmd”,打开“命令提示符”,输入一下内容即可
keytool -genkey -v -keystore app-android.keystore -alias androidApp -keyalg RSA -keysize 2048 -validity 10000

这样我们就获取了一个签名证书 app-android.keystore
1.2 使用工具生成签名证书
使用google官方推荐的开发工具Android Studio生成签名工具,如图所示,也需要一步一步的填写相关的内容信息

通常我会选择“apk”选项


因为我们的项目中有多个module,所以你可以选择对哪个module项目进行签名,因为我们是新建 key store,所以应该选择 “create new”选项,如果之前没有配置过 key store 的话,应该直接会显示下面图片的内容

我们填写相关的内容就可以了,注意一下“Key store path”,我们生成的签名证书将存放在这个位置。
好啦,以上就是生成签名证书的操作了。
2、使用签名证书进行签名
签名证书是有了,怎么使用呢?
2.1 使用IDEA进行签名
其实上面生成签名证书的过程中,我们已经演示了如何使用IDEA方式对app进行签名了,让我们接着上面的步骤继续操作。

上面有4个可选项,你可以选择对上面的哪几个或者一个进行签名操作。

这样我们就获取了对应的签名包了。
2.2 使用gradle配置进行签名
gradle是google官方推荐的打包工具,我们使用的AndroidStudio也是使用它来编译打包的。
每个module目录下面都有一个属于自己的build.gradle文件用于配置一些信息,今天我们只处理有关包签名的代码处理。
build.gradle文件是使用groovy语言书写的。但是最近一段时间我们在新建Android项目的时候,我们会发现下面的选项

文件变成了build.gradle.kts了,这个文件是使用kotlin语言书写的。虽然思想是一样的,但是在编码和规则上面还是有一定的区别的。下面我们还是分开讲一下吧
- build.gradle
    signingConfigs {
        release {
            keyAlias 'appkey'
            keyPassword 'appkey'
            storeFile file('app_key.jks')
            storePassword 'appkey'
        }
        debug {
            keyAlias 'appkey'
            keyPassword 'appkey'
            storeFile file('app_key.jks')
            storePassword 'appkey'
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
        debug {
            signingConfig signingConfigs.debug
        }
    }
注意:signingConfigs{}一定要放在buildTypes {}前面,否则会报错的
- build.gradle.kts
signingConfigs {
        create("release") {
            keyAlias = "appkey"
            keyPassword = "appkey"
            storeFile = file("app_key.jks")
            storePassword = "appkey"
        }
        create("debug2") {
            keyAlias = "appkey"
            keyPassword = "appkey"
            storeFile = file("app_key.jks")
            storePassword = "appkey"
        }
    }
    buildTypes {
        release {
            isMinifyEnabled = true
            isShrinkResources = true
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
            signingConfig = signingConfigs.getByName("release")
        }
        debug {
            isMinifyEnabled = false
            isShrinkResources = false
            signingConfig = signingConfigs.getByName("debug2")
        }
    }
上面就是gradle中配置签名证书的两种方式。同样的apk生成的位置也是不太一样的,这种方式会在build文件中

好啦,以上就是有关签名证书的生成和使用的相关处理了