Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Protected Ctors](https://developer.android.com/reference/java/security/KeyStore.Builder#proctors) \| [Methods](https://developer.android.com/reference/java/security/KeyStore.Builder#pubmethods) \| [Inherited Methods](https://developer.android.com/reference/java/security/KeyStore.Builder#inhmethods)

# KeyStore.Builder


`
public
static

abstract
class
KeyStore.Builder
`


`

extends https://developer.android.com/reference/java/lang/Object


`

`


`

|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) ||
| ↳ | java.security.KeyStore.Builder |

<br />

*** ** * ** ***

A description of a to-be-instantiated KeyStore object.

An instance of this class encapsulates the information needed to
instantiate and initialize a KeyStore object. That process is
triggered when the [getKeyStore()](https://developer.android.com/reference/java/security/KeyStore.Builder#getKeyStore()) method is called.

This makes it possible to decouple configuration from KeyStore
object creation and e.g. delay a password prompt until it is
needed.
**See also:**

- `https://developer.android.com/reference/java/security/KeyStore`
- `https://developer.android.com/reference/javax/net/ssl/KeyStoreBuilderParameters`

## Summary

| ### Protected constructors ||
|---|---|
| ` https://developer.android.com/reference/java/security/KeyStore.Builder#Builder()() ` Construct a new Builder. |

| ### Public methods ||
|---|---|
| ` abstract https://developer.android.com/reference/java/security/KeyStore` | ` https://developer.android.com/reference/java/security/KeyStore.Builder#getKeyStore()() ` Returns the KeyStore described by this object. |
| ` abstract https://developer.android.com/reference/java/security/KeyStore.ProtectionParameter` | ` https://developer.android.com/reference/java/security/KeyStore.Builder#getProtectionParameter(java.lang.String)(https://developer.android.com/reference/java/lang/String alias) ` Returns the ProtectionParameters that should be used to obtain the `https://developer.android.com/reference/java/security/KeyStore.Entry` with the given alias. |
| ` static https://developer.android.com/reference/java/security/KeyStore.Builder` | ` https://developer.android.com/reference/java/security/KeyStore.Builder#newInstance(java.lang.String,%20java.security.Provider,%20java.security.KeyStore.ProtectionParameter)(https://developer.android.com/reference/java/lang/String type, https://developer.android.com/reference/java/security/Provider provider, https://developer.android.com/reference/java/security/KeyStore.ProtectionParameter protection) ` Returns a new Builder object. |
| ` static https://developer.android.com/reference/java/security/KeyStore.Builder` | ` https://developer.android.com/reference/java/security/KeyStore.Builder#newInstance(java.io.File,%20java.security.KeyStore.ProtectionParameter)(https://developer.android.com/reference/java/io/File file, https://developer.android.com/reference/java/security/KeyStore.ProtectionParameter protection) ` Returns a new Builder object. |
| ` static https://developer.android.com/reference/java/security/KeyStore.Builder` | ` https://developer.android.com/reference/java/security/KeyStore.Builder#newInstance(java.lang.String,%20java.security.Provider,%20java.io.File,%20java.security.KeyStore.ProtectionParameter)(https://developer.android.com/reference/java/lang/String type, https://developer.android.com/reference/java/security/Provider provider, https://developer.android.com/reference/java/io/File file, https://developer.android.com/reference/java/security/KeyStore.ProtectionParameter protection) ` Returns a new Builder object. |
| ` static https://developer.android.com/reference/java/security/KeyStore.Builder` | ` https://developer.android.com/reference/java/security/KeyStore.Builder#newInstance(java.security.KeyStore,%20java.security.KeyStore.ProtectionParameter)(https://developer.android.com/reference/java/security/KeyStore keyStore, https://developer.android.com/reference/java/security/KeyStore.ProtectionParameter protectionParameter) ` Returns a new Builder that encapsulates the given KeyStore. |

| ### Inherited methods |
|---|---|
| From class ` https://developer.android.com/reference/java/lang/Object ` |---|---| | ` https://developer.android.com/reference/java/lang/Object` | ` https://developer.android.com/reference/java/lang/Object#clone()() ` Creates and returns a copy of this object. | | ` boolean` | ` https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object obj) ` Indicates whether some other object is "equal to" this one. | | ` void` | ` https://developer.android.com/reference/java/lang/Object#finalize()() ` Called by the garbage collector on an object when garbage collection determines that there are no more references to the object. | | ` final https://developer.android.com/reference/java/lang/Class<?>` | ` https://developer.android.com/reference/java/lang/Object#getClass()() ` Returns the runtime class of this `Object`. | | ` int` | ` https://developer.android.com/reference/java/lang/Object#hashCode()() ` Returns a hash code value for the object. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#notify()() ` Wakes up a single thread that is waiting on this object's monitor. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#notifyAll()() ` Wakes up all threads that are waiting on this object's monitor. | | ` https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/java/lang/Object#toString()() ` Returns a string representation of the object. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait(long,%20int)(long timeoutMillis, int nanos) ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait(long)(long timeoutMillis) ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait()() ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*. | ||

## Protected constructors

### Builder

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected Builder ()
```

Construct a new Builder.

<br />

## Public methods

### getKeyStore

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract KeyStore getKeyStore ()
```

Returns the KeyStore described by this object.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/security/KeyStore` | the `KeyStore` described by this object <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/security/KeyStoreException` | if an error occurred during the operation, for example if the KeyStore could not be instantiated or loaded |

### getProtectionParameter

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract KeyStore.ProtectionParameter getProtectionParameter (String alias)
```

Returns the ProtectionParameters that should be used to obtain
the `https://developer.android.com/reference/java/security/KeyStore.Entry` with the given alias.
The `getKeyStore` method must be invoked before this
method may be called.

<br />

| Parameters ||
|---|---|
| `alias` | `String`: the alias of the KeyStore entry <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/security/KeyStore.ProtectionParameter` | the ProtectionParameters that should be used to obtain the `https://developer.android.com/reference/java/security/KeyStore.Entry` with the given alias. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException` | if the getKeyStore method has not been invoked prior to calling this method |
| `https://developer.android.com/reference/java/lang/NullPointerException` | if alias is null |
| `https://developer.android.com/reference/java/security/KeyStoreException` | if an error occurred during the operation |

### newInstance

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static KeyStore.Builder newInstance (String type, 
                Provider provider, 
                KeyStore.ProtectionParameter protection)
```

Returns a new Builder object.

Each call to the `https://developer.android.com/reference/java/security/KeyStore.Builder#getKeyStore()` method on the returned
builder will return a new KeyStore object of type `type`.
Its `https://developer.android.com/reference/java/security/KeyStore#load(java.security.KeyStore.LoadStoreParameter)`
method is invoked using a
`LoadStoreParameter` that encapsulates
`protection`.

The KeyStore is instantiated from `provider` if
non-null. Otherwise, all installed providers are searched.

Calls to `https://developer.android.com/reference/java/security/KeyStore.Builder#getProtectionParameter(java.lang.String)`
will return `protection`.

*Note* that the `https://developer.android.com/reference/java/security/KeyStore.Builder#getKeyStore()` method is executed
within the `https://developer.android.com/reference/java/security/AccessControlContext` of the code invoking this
method.

<br />

| Parameters ||
|---|---|
| `type` | `String`: the type of KeyStore to be constructed <br /> |
| `provider` | `Provider`: the provider from which the KeyStore is to be instantiated (or null) <br /> |
| `protection` | `KeyStore.ProtectionParameter`: the ProtectionParameter securing the Keystore <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/security/KeyStore.Builder` | a new Builder object <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/NullPointerException` | if type or protection is null |

### newInstance

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static KeyStore.Builder newInstance (File file, 
                KeyStore.ProtectionParameter protection)
```

Returns a new Builder object.

The first call to the `https://developer.android.com/reference/java/security/KeyStore.Builder#getKeyStore()` method on the returned
builder will create a KeyStore using `file` to detect the
keystore type and then call its `https://developer.android.com/reference/java/security/KeyStore#load(java.io.InputStream,%20char[])` method.
It uses the same algorithm to determine the keystore type as
described in `https://developer.android.com/reference/java/security/KeyStore#getInstance(java.io.File,%20java.security.KeyStore.LoadStoreParameter)`.
The `inputStream` argument is constructed from `file`.
If `protection` is a `PasswordProtection`, the password
is obtained by calling the `getPassword` method.
Otherwise, if `protection` is a
`CallbackHandlerProtection`,
the password is obtained by invoking the CallbackHandler.

Subsequent calls to `https://developer.android.com/reference/java/security/KeyStore.Builder#getKeyStore()` return the same object
as the initial call. If the initial call failed with a
KeyStoreException, subsequent calls also throw a KeyStoreException.

Calls to `https://developer.android.com/reference/java/security/KeyStore.Builder#getProtectionParameter(java.lang.String)`
will return a `https://developer.android.com/reference/java/security/KeyStore.PasswordProtection`
object encapsulating the password that was used to invoke the
`load` method.

*Note* that the `https://developer.android.com/reference/java/security/KeyStore.Builder#getKeyStore()` method is executed
within the `https://developer.android.com/reference/java/security/AccessControlContext` of the code invoking this
method.

<br />

| Parameters ||
|---|---|
| `file` | `File`: the File that contains the KeyStore data <br /> |
| `protection` | `KeyStore.ProtectionParameter`: the ProtectionParameter securing the KeyStore data <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/security/KeyStore.Builder` | a new Builder object <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` | if protection is not an instance of either PasswordProtection or CallbackHandlerProtection; or if file does not exist or does not refer to a normal file |
| `https://developer.android.com/reference/java/lang/NullPointerException` | if file or protection is null |

### newInstance

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static KeyStore.Builder newInstance (String type, 
                Provider provider, 
                File file, 
                KeyStore.ProtectionParameter protection)
```

Returns a new Builder object.

The first call to the `https://developer.android.com/reference/java/security/KeyStore.Builder#getKeyStore()` method on the returned
builder will create a KeyStore of type `type` and call
its `https://developer.android.com/reference/java/security/KeyStore#load(java.io.InputStream,%20char[])` method.
The `inputStream` argument is constructed from
`file`.
If `protection` is a
`PasswordProtection`, the password is obtained by
calling the `getPassword` method.
Otherwise, if `protection` is a
`CallbackHandlerProtection`, the password is obtained
by invoking the CallbackHandler.

Subsequent calls to `https://developer.android.com/reference/java/security/KeyStore.Builder#getKeyStore()` return the same object
as the initial call. If the initial call failed with a
KeyStoreException, subsequent calls also throw a
KeyStoreException.

The KeyStore is instantiated from `provider` if
non-null. Otherwise, all installed providers are searched.

Calls to `https://developer.android.com/reference/java/security/KeyStore.Builder#getProtectionParameter(java.lang.String)`
will return a `https://developer.android.com/reference/java/security/KeyStore.PasswordProtection`
object encapsulating the password that was used to invoke the
`load` method.

*Note* that the `https://developer.android.com/reference/java/security/KeyStore.Builder#getKeyStore()` method is executed
within the `https://developer.android.com/reference/java/security/AccessControlContext` of the code invoking this
method.

<br />

| Parameters ||
|---|---|
| `type` | `String`: the type of KeyStore to be constructed <br /> |
| `provider` | `Provider`: the provider from which the KeyStore is to be instantiated (or null) <br /> |
| `file` | `File`: the File that contains the KeyStore data <br /> |
| `protection` | `KeyStore.ProtectionParameter`: the ProtectionParameter securing the KeyStore data <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/security/KeyStore.Builder` | a new Builder object <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` | if protection is not an instance of either PasswordProtection or CallbackHandlerProtection; or if file does not exist or does not refer to a normal file |
| `https://developer.android.com/reference/java/lang/NullPointerException` | if type, file or protection is null |

### newInstance

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static KeyStore.Builder newInstance (KeyStore keyStore, 
                KeyStore.ProtectionParameter protectionParameter)
```

Returns a new Builder that encapsulates the given KeyStore.
The [getKeyStore()](https://developer.android.com/reference/java/security/KeyStore.Builder#getKeyStore()) method of the returned object
will return `keyStore`, the [getProtectionParameter()](https://developer.android.com/reference/java/security/KeyStore.Builder#getProtectionParameter(java.lang.String)) method will
return `protectionParameters`.

This is useful if an existing KeyStore object needs to be
used with Builder-based APIs.

<br />

| Parameters ||
|---|---|
| `keyStore` | `KeyStore`: the KeyStore to be encapsulated <br /> |
| `protectionParameter` | `KeyStore.ProtectionParameter`: the ProtectionParameter used to protect the KeyStore entries <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/security/KeyStore.Builder` | a new Builder object <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` | if the keyStore has not been initialized |
| `https://developer.android.com/reference/java/lang/NullPointerException` | if keyStore or protectionParameters is null |