方式一:Android Studio生成生成签名
将项目Sync with Gradle后,点击菜单build-GenerateSSigned AppBundle or APK
ASgenerate
然后选择生成APP的打包格式:APK或ABB
image-20241229140453776
选择Create new....新建KeyStore文件
image-20241229140653126
填写签名存储文件的相关信息:
image-20241229140802895
KeyStore:
Key store path:选择KeyStore文件的存储路径,并命名xxx.jksPassword:设置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):双字母国家/地区代码使用方式(为应用签名):
在build-GenerateSSigned AppBundle or APK中填写相关信息:
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来生成签名文件,此时就需要手动创建,并将其放置在代码中显示的存储位置。
手动生成jks文件:
首先cd 到Android Studio 的 jre 文件夹中的bin目录下(只有在此目录下才能调用keyTool)
在该目录下打开命令行,并按照如下提示输入命令:
123456789keytool -genkey -v -keystore demo.jks -alias demo -storepass 123456 -keypass 123456 -keyalg RSA -validity 14000备注:-keystore:设置生成的文件名称,包含后缀;-alias:设置别名-storepass:设置文件的密码-keypass:设置key的密码-keyalg:设置使用的加密算法,一般写RSA-validity:设置有效期,尽可能长根据提示补充证书相关信息:
您的名字与姓氏是什么?[Unknown]: wu您的组织单位名称是什么?
[Unknown]: xxx公司您的组织名称是什么?[Unknown]: xxx组织您所在的城市或区域名称是什么?
[Unknown]: 北京您所在的省/市/自治区名称是什么?[Unknown]: 京该单位的双字母国家/地区代码是什么?[Unknown]: 86CN=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]
若提示需要迁移为行业标准格式 PKCS12,则继续输入keytool -importkeystore -srckeystore demo.jks -destkeystore demo.jks -deststoretype pkcs12完成迁移
创建sign.properties文件:
在工程根目录下创建sign.properties文件,并替换为自己的签名文件:
1234STORE_FILE=d:/xxx/debug.keystoreSTORE_PASSWORD=androidKEY_ALIAS=AndroidDebugKeyKEY_PASSWORD=android在App module中的builg.gradle中,修改配置文件中的签名信息:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182plugins { 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'}上述只是一个样例,实际操作请比对自己的配置文件,看清路径和对应的名称
最后编译安装即可。