mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-02-08 22:42:40 +08:00
79 lines
3.1 KiB
Markdown
79 lines
3.1 KiB
Markdown
---
|
|
id: signed-apk-android
|
|
title: Generating Signed APK
|
|
layout: docs
|
|
category: Guides (Android)
|
|
permalink: docs/signed-apk-android.html
|
|
next: activityindicatorios
|
|
---
|
|
|
|
To distribute your Android application via [Google Play store](https://play.google.com/store), you'll need to generate a signed release APK. The [Signing Your Applications](https://developer.android.com/tools/publishing/app-signing.html) page on Android Developers documentation describes the topic in detail. This guide covers the process in brief, as well as lists the steps required to packaging the JavaScript bundle.
|
|
|
|
### Generating a signing key
|
|
|
|
You can generate a private signing key using `keytool`.
|
|
|
|
$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
|
|
|
|
This command prompts you for passwords for the keystore and key, and to provide the Distinguished Name fields for your key. It then generates the keystore as a file called `my-release-key.keystore`.
|
|
|
|
The keystore contains a single key, valid for 10000 days. The alias is a name that you will use later when signing your app, so remember to take note of the alias.
|
|
|
|
_Note: Remember to keep your keystore file private and never commit it to version control._
|
|
|
|
### Setting up gradle variables
|
|
|
|
1. Place the `my-release-key.keystore` file under the `android/app` directory in your project folder.
|
|
2. Edit the file `~/.gradle/gradle.properties` and add the following (replace `*****` with the correct keystore password, alias and key password),
|
|
|
|
```
|
|
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
|
|
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
|
|
MYAPP_RELEASE_STORE_PASSWORD=*****
|
|
MYAPP_RELEASE_KEY_PASSWORD=*****
|
|
```
|
|
|
|
These are going to be global gradle variables, which we can later use in our gradle config to sign our app.
|
|
|
|
_Note: Once you publish the app on the Play Store, you will need to republish your app under a different package name (loosing all downloads and ratings) if you want to change the signing key at any point. So backup your keystore and don't forget the passwords._
|
|
|
|
### Adding signing config to your app's gradle config
|
|
|
|
Edit the file `android/app/build.gradle` in your project folder and add the signing config,
|
|
|
|
```
|
|
...
|
|
android {
|
|
...
|
|
defaultConfig { ... }
|
|
signingConfigs {
|
|
release {
|
|
storeFile file(MYAPP_RELEASE_STORE_FILE)
|
|
storePassword MYAPP_RELEASE_STORE_PASSWORD
|
|
keyAlias MYAPP_RELEASE_KEY_ALIAS
|
|
keyPassword MYAPP_RELEASE_KEY_PASSWORD
|
|
}
|
|
}
|
|
buildTypes {
|
|
release {
|
|
...
|
|
signingConfig signingConfigs.release
|
|
}
|
|
}
|
|
}
|
|
...
|
|
```
|
|
|
|
### Generating the APK
|
|
|
|
1. Start the packager by running `npm start` in your project folder
|
|
2. In your project folder, run the following in a Terminal,
|
|
|
|
```sh
|
|
$ mkdir -p android/app/src/main/assets
|
|
$ curl "http://localhost:8081/index.android.bundle?platform=android&dev=false&minify=true" -o "android/app/src/main/assets/index.android.bundle"
|
|
$ cd android && ./gradlew assembleRelease
|
|
```
|
|
|
|
The generated APK can be found under `android/app/build/outputs/apk/app-release.apk`, and is ready to be distributed.
|