Generate Signed APK using Bitbucket pipeline
Asked by Manish Kumar:

Hi everyone,

I am trying to build release-signed apk using bitbucket pipeline. I am able to make release build but not sure how to sign it using BB pipeline. I have following queries here

1. Where to store .keystore file for signing

2. How to use it in bitbucket-pipeline.yaml file


Answers:
author: Manish Kumar
body: Hi everyone,

Just answering my own question

1. Encode keystore file into base 64 (can use terminal to do same)

base64 \> keystore_file

2. Create a secure repo variable and store the base64 value

3. Decode keystore file during build process

echo "$SIGNING_JKS_FILE" \| base64 -d \> keystore_file

Since this is secure variable it will not be printed anywhere

4. Now we can go ahead with our normal build process.

comments: author: Keshava11
body: Hi [@Manish Kumar](/t5/user/viewprofilepage/user-id/4052554) do we not required to give any keystore passwords , keystore aliases etc. ?  

Will it create a signed apk without it  


author: Keshava11
body: 1. Encode keystore file into base 64 (can use terminal to do same)

base64 \> keystore_file  

What is the exact command ?  
This just hangs


author: Manish Kumar
body: Hi [@Keshava11](/t5/user/viewprofilepage/user-id/4350767)

You need to create secure repo variable for all credentials like KEYS_STORE_ALIAS, KEY_STORE_PASSWORD etc. and utilise these environment variable during signing. Since it's secured repo variable it will not be disclosed.


author: Manish Kumar
body: Hi [@Keshava11](https://community.atlassian.com/t5/user/viewprofilepage/user-id/4350767)

base64 works fine on Mac but you can utilise equivalent command on different OS.


author: Keshava11
body: [@Manish Kumar](/t5/user/viewprofilepage/user-id/4052554) I am facing issue in generating base64 content from my keystore file   

I have tried using both git bash and command prompt to generate the content but it hangs .   

Also , is there a way to link these repository variables to build.gradle file where few variables can be used.


author: Keshava11
body: Bitbucket pipeline is of now use without one able to generate these repository variables

starting with the base64 encode content of keystore file which doesn't get generated.

<br />

I am on windows and also running ubuntu as guest on VirtualBox . In none of the OS, this base64 encoded content of keystore file getting generated.   

<br />

<br />


author: Keshava11
body: Anyways my problem resolved.   
Thanks


author: Anchit Mittal
body: How have you solved your problem?


author: David Ilsley
body: ```
base64 keystore_file > keystore_file.txt
```


author: David Ilsley
body: My BASE64 file produced with

```
base64 keystore_file > keystore_file.txt
```

has newlines.

If I manually read that in and echo it out then it is fine: \`echo "$SIGNING_JKS_FILE" \| base64 -d \> keystore_file\`

But BitBucket secrets don't accept a new line, instead replacing with a space. This then produces \`base64: invalid input\`

Not yet sure how to get around this.


author: David Ilsley
body: In case anyone has the same problem as I did, I fixed the multiline issue with:

```
echo "$SIGNING_JKS_FILE" | sed -e"s/ /\n/g" | base64 -d > keystore_file
```


Tags: android

bitbucket-cloud

bitbucket-pipelines

cloud