• 无法同时使用签名方案v1和v2问题 & 不同环境使用不同签名文件自动打包配置


    Android资源文件local.properties使用以及Gradle文件中的值、Manifests文件中的值

    1、没有v1签名问题

    从Android Studio项目中生成一个签名的apk,但是当同时启用签名方案v1和v2时,APK签名方案v1似乎不起作用,v1似乎失效了,apksigner -verify -v返回:

    Verifies
    Verified using v1 scheme (JAR signing): false
    Verified using v2 scheme (APK Signature Scheme v2): true
    Verified using v3 scheme (APK Signature Scheme v3): false
    Number of signers: 1
    
    • 1
    • 2
    • 3
    • 4
    • 5

    可以单独使用v1或v2进行验证。

    app支持的最低API级别太高minSdkVersion>=24(android 7),
    只有minSdkVersion<=23(android 6),才支持v1签名。

    注:只有v2签名的apk,包体中不含签名文件。只有v1签名或v1+v2签名的apk,包体中有签名文件CERT.SF、Cert.RSA

    2、不同环境(sit/uat/prd)使用不同签名文件自动打包

    2.1、在与app文件夹同级目录下添加3个文件:sitstore.properties, uatstore.properties, prdstore.properties

    prdstore.properties

    APP_KEY_ALIAS=testKey
    APP_KEY_PASSWORD=test123456
    APP_STORE_FILE=../keystore/testkey.keystore
    APP_STORE_PASSWORD=test123456
    
    • 1
    • 2
    • 3
    • 4

    2.2、配置build.gradle(app)

    
    Properties keyProperties = new Properties()
    
    android {
    	...
    	
        productFlavors {
            sit {
                ...
    			
                keyProperties.load(project.rootProject.file('sitstore.properties').newDataInputStream())
            }
    
            uat {
                ...
    			
                keyProperties.load(project.rootProject.file('uatstore.properties').newDataInputStream())
            }
    
            prod {
                ...
    			
                keyProperties.load(project.rootProject.file('store.properties').newDataInputStream())
            }
        }
    
    
        /**
         * 签名信息
         */
        signingConfigs {
            config {
                keyAlias keyProperties.getProperty("APP_KEY_ALIAS")
                keyPassword keyProperties.getProperty("APP_KEY_PASSWORD")
                storeFile file(keyProperties.getProperty("APP_STORE_FILE"))
                storePassword keyProperties.getProperty("APP_STORE_PASSWORD")
            }
        }
    
    
        /**
         * 不同版本
         */
        buildTypes {
            release {
                ...
    			
                signingConfig signingConfigs.config
            }
    
            debug {
                ...
    			
                signingConfig signingConfigs.config
            }
    
            unsignedRelease {
    		    ...
    			
                signingConfig null
            }
        }
    
    }
    
    • 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

    3、查看签名信息方法

    jarsigner/apksigner详细使用方式

    3.1、jarsigner

    jarsigner -verbose -keystore keystore文件 -signedjar 签名以后的apk名称 要签名的apk  keystore中的别名
    
    • 1

    只能查看含v1方式签名的apk

    3.2、apksigner

    apksigner sign --ks keystore位置 --v3-signing-enabled false apk位置
    
    • 1

    可以查看使用了v1v2v3哪种签名方案,无法查看签名文件信息

    3.3、解压查看

    (1)将apk解压
    
    (2)找到META-INF 下的.RSA文件
    
    (3)在控制台上输入命令:"keytool -printcert -file xxx.RSA",即可查看签名文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    keytool -printcert -file xxx.RSA
    
    • 1

    只能查看含v1方式签名的apk

  • 相关阅读:
    SQL Server端口配置指南
    CC6链子
    AMBA:AXI/AHB/APB学习笔记
    Unity技术手册 - 干扰/噪音/杂波(Noise)子模块
    springboot测试类,注解
    vue.js javascript页面表单验证滚动
    深度学习入门(四十六)计算机视觉——区域卷积神经网络(R-CNN)系列
    【备忘录】修复docker环境下的nacos安全漏洞:身份认证绕过漏洞
    直接插入排序算法详解之C语言版
    基于车联网的网络切片GBR动态专载触发方案
  • 原文地址:https://blog.csdn.net/weixin_41733225/article/details/127801692