首页 > 解决方案 > 具有多种风格的android签名应用程序的问题

问题描述

我尝试制作自动应用程序标志。我已经通过命令生成了密钥:

keytool -genkey -v -keystore app/app_keystore.keystore -alias demo -keyalg RSA -keysize 2048 -validity 10000
keytool -genkey -v -keystore app/app_keystore.keystore -alias release -keyalg RSA -keysize 2048 -validity 10000

我还为我的 Android 应用准备了 build.gradle:

def keystorePropertiesFile = rootProject.file("keystore.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.0"

    signingConfigs {
        demo {
            try {
                keyAlias keystoreProperties['demoAlias']
                keyPassword keystoreProperties['keyPassword']
                storeFile file(keystoreProperties['storeFile'])
                storePassword keystoreProperties['storePassword']
            } catch (ignored) {
                throw new InvalidUserDataException("Bad credentials")
            }
        }
        release {
            try {
                keyAlias keystoreProperties['releaseAlias']
                keyPassword keystoreProperties['keyPassword']
                storeFile file(keystoreProperties['storeFile'])
                storePassword keystoreProperties['storePassword']
            } catch (ignored) {
                throw new InvalidUserDataException("Bad credentials")
            }
        }
    }

    defaultConfig {
        applicationId "com.company.app"
        minSdkVersion 26
        targetSdkVersion 30
        versionCode mVersionCode
        versionName mVersionName
        setProperty("archivesBaseName", "app_v$versionName")

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    flavorDimensions "server"

    productFlavors {
        demo {
            dimension "server"
            versionName "${mVersionName}.demo"
            signingConfig signingConfigs.demo
        }
        release {
            dimension "server"
            versionName "${mVersionName}.release"
            signingConfig signingConfigs.release
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_1_8.toString()
    }

}

这些配置应该返回带有证书的应用程序,但是当我通过命令检查应用程序证书时:

find . -name "*.apk" -exec echo "APK: {}" \; -exec sh -c 'keytool -printcert -jarfile "{}"' \;

我有 Not a signed jar file。我通过命令构建应用程序

./gradlew assembleDemoRelease assembleReleaseRelease

看起来应用程序没有证书。当我在属性中更改密码时,我遇到了一个错误——因此对生成证书进行了评估。请帮我创建签名的应用程序。谢谢你。

块引用

标签: androidgradlecertificatereleasekeytool

解决方案


推荐阅读