android studio: release apk is not signed

瘦欲@ 提交于 2019-12-03 01:57:34

Go to File\Project Structure

Done! ;)

Set signing config in project structure.

  1. File -> Project Structure...
  2. Select Modules/app (or other module)
  3. Click Signing tab and fill in.
    Key Alias and Key Password comes first. Not same order in "Generate Signed APK" dialog.
  4. Click Build Types tab and select release.
    Select "config" in Signing config dropdown list.
  5. Click OK to close Project Structure.
  6. Run -> Run app

Run (or Debug) app seems to use apks built with "Buiild -> Build APK". So, we should set signing config if build variants of app module is "release".

Add this line to your release {...} inside build.gradle

signingConfig signingConfigs.config

First, Create a keystore file if there isn't one.

  1. Click Build from the dropdown menu
  2. Select Generate Signed APK
  3. Click Next
  4. Click Create New Keystore
  5. Fill out the form for keystore path, alias, password for keystore and alias, at least one field in the certificate area.
  6. Click OK
  7. A keystore file should be created in the specified keystore path.

Second update the app build gradle file to someting like this one to include the signing config.

android {
    signingConfigs {
        config {
            keyAlias 'mykeyalias'
            keyPassword 'android'
            storeFile file('/Users/yourname/path/to/the/android/project/folder/android_project_folder_name/app/debug.keystore')
            storePassword 'android'
        }
    }
    buildTypes {
        debug {
            applicationIdSuffix = ".debug"
            versionNameSuffix "-debug"
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config
        }
    }
}

Third, build and run the app, done.

In https://developer.android.com/studio/publish/app-signing#secure-shared-keystore it is written that you shouldn't keep credentials information in build.gradle and VCS. So create a signing config file (Build > Generate Signed APK...), then do so.

Create a file named keystore.properties in the root directory of your project. This file should contain your signing information, as follows:

storePassword=myStorePassword
keyPassword=mykeyPassword
keyAlias=myKeyAlias
storeFile=myStoreFileLocation

In your module's build.gradle file, add code to load your keystore.properties file before the android {} block.

// Create a variable called keystorePropertiesFile, and initialize it to your
// keystore.properties file, in the rootProject folder.
def keystorePropertiesFile = rootProject.file("keystore.properties")

// Initialize a new Properties() object called keystoreProperties.
def keystoreProperties = new Properties()

// Load your keystore.properties file into the keystoreProperties object.
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

android {
    ...
}

You can refer to properties stored in keystoreProperties using the syntax keystoreProperties['propertyName']. Modify the signingConfigs block of your module's build.gradle file to reference the signing information stored in keystoreProperties using this syntax.

android {
    signingConfigs {
        config {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
        }
    }
    ...
}

Optionally in build.gradle you can add:

buildTypes {
    release {
        ...
        signingConfig signingConfigs.config
    }
}

Now you may make a signed apk. Don't forget to exclude keystore.properties from VCS.

Try add this in your build file:

buildTypes {
release {
        signingConfig signingConfigs.release
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    debug {
        minifyEnabled false
    }
}
pseudozach

I had the same issue turned out I misconfigured the signingConfigs property.

Specifically, I thought I didn't have a password for the key where I actually had set it. After adding the missing information, it worked.

signingConfigs {
        config {
            keyAlias 'key0'
            storeFile file('C:/Users/xxx/xxx/keystore/xxx.jks')
            storePassword '123'
            keyPassword '123' // this was missing
        }
    }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!