Multi-variant React Native Android Apps
• Mark Eschbach
While developing the Android application for my systems I have found I
would really like my typical set of multi-environment setup. One for testing against integ
and another for prod
. The missing guide to React Native app variants — Part 1
by Tamás Menyhárt seems to have the right stuff. When trying to have both
versions installed you will get a signature error due to different signing keys for the applicationId
First up, actually generating a separate application ID via the applicationIdSuffix
member.
android {
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
}
On the next run of yarn android dev
it will launch the production build. React Native extracts
the applicationId
from the default Android.xml
file. In order to launch the correct variant the
--variant=Debug --appIdSuffix=debug
must be passed, like yarn android dev --variant=Debug --appIdSuffix=debug
.
Side loading the release APK
To generate the production artifacts:
cd android
./gradlew bundleRelease
Then run:
cd android
adb install app/build/outputs/apk/release/app-release.apk
This will install the release artifact. This is useful testing to ensure the variants install as expected.
Differentiating variants
In order to be able to differentiate the applications we need to override the app_label
resource. To do so we create
a new file in android/app/src/debug/res/values/strings.xml
to look something like the following:
<resources>
<string name="app_name">mee debug</string>
</resources>
When inspecting looking at the app Info
panel in Android it will show the full name. Otherwise it just shows the first
word. Not sure why but good enough for now.