Android + React Native + Fastlane: Working with multiple build types
This is the companion repository for my medium post.
Gradle Configurations
Global gradle.properties - defining node executable
# This file lives in ~/.gradle/gradle.properties
MYAPP_RELEASE_STORE_FILE=foo.keystore
MYAPP_RELEASE_KEY_ALIAS=foo-alias
MYAPP_RELEASE_STORE_PASSWORD=foo_store_release
MYAPP_RELEASE_KEY_PASSWORD=foo_key_release
org.gradle.daemon=true
NODE_PATH=[YOUR_HOME_PATH]/.nvm/versions/node/v[YOUR_NODE_VERSION]/bin/node
React ExtraPropertiesExtension
project.ext.react = [
entryFile: "index.js",
nodeExecutableAndArgs: hasProperty('NODE_PATH')?[NODE_PATH]:["node"],
bundleInDebug: false,
bundleInStaging: true,
bundleInRelease: true,
jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
jsBundleDirStaging: "$buildDir/intermediates/assets/staging",
resourcesDirStaging: "$buildDir/intermediates/res/merged/staging",
jsBundleDirRelease: "$buildDir/intermediates/assets/release",
resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
devDisabledInDebug: false,
devDisabledInStaging: true,
devDisabledInRelease: true,
inputExcludes: ["ios/**", "__tests__/**"]
];
new buildType, applicationIdSuffix, signingConfigs
buildTypes {
...
staging {
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
signingConfig signingConfigs.release
applicationIdSuffix ".staging"
}
Fastlane Actions
Yarn install
yarn(
command: "install",
package_path: "./package.json"
)
Android versioning
ANDROID_VERSION_NAME = get_version_name(
gradle_file_path:"android/app/build.gradle",
ext_constant_name:"versionName"
)
ANDROID_VERSION_CODE = get_version_code(
gradle_file_path:"android/app/build.gradle",
ext_constant_name:"versionCode"
)
Adding badges
if options[:badge]
add_badge(
shield: "#{ANDROID_VERSION_NAME}-#{ANDROID_VERSION_CODE}-orange",
glob: "/android/app/src/main/res/mipmap-*/ic_launcher.png",
alpha: true,
shield_scale: "0.75"
)
end
Upload to Crashlytics
if ENV["CRASHLYTICS_API_KEY"] && ENV["CRASHLYTICS_BUILD_SECRET"]
crashlytics(
api_token: ENV["CRASHLYTICS_API_KEY"],
build_secret: ENV["CRASHLYTICS_BUILD_SECRET"],
groups: ["your-test-groups-here"],
notes: "#{ANDROID_VERSION_NAME}-#{ANDROID_VERSION_CODE} beta release - fastlane generated",
notifications: true
)
end
Upload to Play Store
if options[:play_store]
# upload to alpha track on google play developer's console
supply(track: "alpha", apk: "android/app/build/outputs/apk/app-release.apk")
end