109

Does Android Studio sign debug builds? If so, where is the keystore it uses to do it?

5
  • 1
    It does sign anyway because only signed builds can be installed. Commented May 18, 2013 at 9:24
  • 3
    I think this is a valid programming question. It directly relates to the toolchain used when developing Android apps. Commented Aug 2, 2013 at 21:28
  • Duplicate of stackoverflow.com/questions/16965058/… Commented Nov 22, 2018 at 6:44
  • @Prachi how can this be a duplicate of a question asked more than 3 years later? Maybe it's the other one a duplicate of this. Commented Nov 22, 2018 at 6:50
  • See also stackoverflow.com/questions/12456491/… Commented Apr 19, 2019 at 22:08

7 Answers 7

179

It is at the same location: ~/.android/debug.keystore

Sign up to request clarification or add additional context in comments.

7 Comments

Isn't it in ~/.android instead?
keytool -list -v -keystore ~/.android/debug.keystore
This is the windows version of the keytool command: keytool -exportcert -alias androiddebugkey -keystore C:\Users\<User>\.android\debug.keystore -list -v
The default password is "android" and key alias is "androiddebugkey".
And the default password for androiddebugkey is also "android".
|
64

If you use Windows, probably the location is like this:

C:\User\YourUser\.android\debug.keystore

Comments

30

You can specify your own debug keystore if you wish. This solution also gives you the ability to store your keys outside of the project directory as well as enjoy automation in the signing process. Yes you can go to File -> Project Structure and assign signing keystores and passwords in the Signing tab but that will put plaintext entries into your gradle.build file which means your secrets might be disclosed (especially in repository commits). With this solution you get the control of using your own keystore and the magic of automation during debug and release builds.

1) Create a gradle.properties (if you don't already have one).

The location for this file depends on your OS:

   /home/<username>/.gradle/ (Linux)
   /Users/<username>/.gradle/ (Mac)
   C:\Users\<username>\.gradle (Windows)

2) Add an entry pointing to yourprojectname.properties file. (example for Windows)

yourprojectname.properties=c:\\Users\\<username>\\signing\\yourprojectname.properties

3) Create yourprojectname.properties file in the location you specified in Step 2 with the following information:

keystore=C:\\path\\to\\keystore\\yourapps.keystore
keystore.password=your_secret_password

4) Modify your gradle.build file to point to yourprojectname.properties file to use the variables.

if(project.hasProperty("yourprojectname.properties")
        && new File(project.property("yourprojectname.properties")).exists()) {

    Properties props = new Properties()
    props.load(new FileInputStream(file(project.property("yourprojectname.properties"))))

    android {
        signingConfigs {
            release {
                keyAlias 'release'
                keyPassword props['keystore.password']
                storeFile file(props['keystore'])
                storePassword props['keystore.password']
            }
            debug {
                keyAlias 'debug'
                keyPassword props['keystore.password']
                storeFile file(props['keystore'])
                storePassword props['keystore.password']
            }
        }
        compileSdkVersion 19
        buildToolsVersion "20.0.0"
        defaultConfig {
            applicationId "your.project.app"
            minSdkVersion 16
            targetSdkVersion 17
        }
        buildTypes {
            release {
            }
        }
    }

}

dependencies {
    ...
}

5) Enjoy! Now all of your keys will be outside of the root of the directory and yet you still have the joys of automation for each build.

If you get an error in your gradle.build file about the "props" variable it's because you are not executing the "android {}" block inside the very first if condition where the props variable gets assigned so just move the entire android{ ... } section into the condition in which the props variable is assigned then try again.

I pieced these steps together from the information found here and here.

3 Comments

Regarding "2) Add an entry...". Add an entry into where?
love the idea of build automation
Thanks, this is a great way of keeping production passwords outside source control (so they aren't available to all devs)!
15

Android Studio debug.keystore file path depend on environment variable ANDROID_SDK_HOME.

If ANDROID_SDK_HOME defined, then file placed in SDK's subfolder named .android .
When not defined, then keystore placed at user home path in same subfolder:
- %HOMEPATH%\.android\ on Windows
- $HOME/.android/ on Linux

3 Comments

Could you please elaborate more your answer adding a little more description about the solution you provide?
why 87 people think it's in ~/.android/debug.keystore,they all don't have a environment variable named "ANDROID_SDK_HOME"???
Here's the docs explaining possible variables developer.android.com/studio/command-line/variables According to it, ANDROID_SDK_HOME is for older tools and ANDROID_USER_HOME use used now (as of Sept 2022).
5

Here's how i finally created the ~/.android/debug.keystore file.

First some background. I got a new travel laptop. Installed Android Studio. Cloned my android project from git hub. The project would not run. Finally figured out that the debug.keystore was not created ... and i could not figure out how to get Android Studio to create it.

Finally, i created a new blank project ... and that created the debug.keystore!

Hope this helps other who have this problem.

Comments

1

On Mac, you will find it here: /Users/$username/.android

Comments

1

If you use Windows, you will found it follow this: File-->Project Structure-->Facets

chose your Android project and in the "Facet 'Android'" window click TAB "Packaging",you will found what you want

1 Comment

There is no such a menu as 'Facets'

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.