mirror of
https://github.com/status-im/status-mobile.git
synced 2025-01-24 15:38:56 +00:00
5dbac2b1d9
Fixes #8635 by adding VERSION and BUILD_NUMBER files in the correct nix template and updating bash script in order to prevent it from failing, due to the git repository being not initialized in the nix environment. Move scripts/build_no.sh and scripts/gen_build_no.sh to scripts/version/build_no.sh to prevent Nix from rebuilding when unrelated scripts are touched. Signed-off-by: Andrey Shovkoplyas <motor4ik@gmail.com>
329 lines
13 KiB
Groovy
329 lines
13 KiB
Groovy
apply plugin: "com.android.application"
|
|
|
|
apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle"
|
|
|
|
import com.android.build.OutputFile
|
|
import com.sun.org.apache.xalan.internal.xsltc.compiler.Copy
|
|
|
|
/**
|
|
* The react.gradle file registers a task for each build variant:
|
|
* - bundlePrJsAndAssets
|
|
* - bundleDebugJsAndAssets
|
|
* - bundleReleaseJsAndAssets
|
|
* These basically call `react-native bundle` with the correct arguments during the Android build
|
|
* cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
|
|
* bundle directly from the development server. Below you can see all the possible configurations
|
|
* and their defaults. If you decide to add a configuration block, make sure to add it before the
|
|
* `apply from: "../../node_modules/react-native/react.gradle"` line.
|
|
*
|
|
* project.ext.react = [
|
|
* // the name of the generated asset file containing your JS bundle
|
|
* bundleAssetName: "index.android.bundle",
|
|
*
|
|
* // the entry file for bundle generation
|
|
* entryFile: "index.android.js",
|
|
*
|
|
* // whether to bundle JS and assets in debug mode
|
|
* bundleInDebug: false,
|
|
*
|
|
* // whether to bundle JS and assets in release mode
|
|
* bundleInRelease: true,
|
|
*
|
|
* // whether to bundle JS and assets in another build variant (if configured).
|
|
* // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
|
|
* // The configuration property can be in the following formats
|
|
* // 'bundleIn${productFlavor}${buildType}'
|
|
* // 'bundleIn${buildType}'
|
|
* // bundleInFreeDebug: true,
|
|
* // bundleInPaidRelease: true,
|
|
* // bundleInBeta: true,
|
|
*
|
|
* // whether to disable dev mode in custom build variants (by default only disabled in release)
|
|
* // for example: to disable dev mode in the staging build type (if configured)
|
|
* devDisabledInStaging: true,
|
|
* // The configuration property can be in the following formats
|
|
* // 'devDisabledIn${productFlavor}${buildType}'
|
|
* // 'devDisabledIn${buildType}'
|
|
*
|
|
* // the root of your project, i.e. where "package.json" lives
|
|
* root: "../../",
|
|
*
|
|
* // where to put the JS bundle asset in debug mode
|
|
* jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
|
|
*
|
|
* // where to put the JS bundle asset in release mode
|
|
* jsBundleDirRelease: "$buildDir/intermediates/assets/release",
|
|
*
|
|
* // where to put drawable resources / React Native assets, e.g. the ones you use via
|
|
* // require('./image.png')), in debug mode
|
|
* resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
|
|
*
|
|
* // where to put drawable resources / React Native assets, e.g. the ones you use via
|
|
* // require('./image.png')), in release mode
|
|
* resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
|
|
*
|
|
* // by default the gradle tasks are skipped if none of the JS files or assets change; this means
|
|
* // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
|
|
* // date; if you have any other folders that you want to ignore for performance reasons (gradle
|
|
* // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
|
|
* // for example, you might want to remove it from here.
|
|
* inputExcludes: ["android/**", "ios/**"],
|
|
*
|
|
* // override which node gets called and with what additional arguments
|
|
* nodeExecutableAndArgs: ["node"],
|
|
*
|
|
* // supply additional arguments to the packager
|
|
* extraPackagerArgs: []
|
|
* ]
|
|
*/
|
|
project.ext.react = [
|
|
nodeExecutableAndArgs: ["node", "--max-old-space-size=16384"],
|
|
entryFile: "index.android.js",
|
|
bundleInPr: true,
|
|
bundleCommand: "ram-bundle",
|
|
bundleConfig: "packager/config.js"
|
|
]
|
|
|
|
configurations.all {
|
|
exclude group: 'com.facebook.react', module: 'react-native'
|
|
}
|
|
|
|
apply from: "../../node_modules/react-native/react.gradle"
|
|
|
|
/**
|
|
* Set this to true to create two separate APKs instead of one:
|
|
* - An APK that only works on ARM devices
|
|
* - An APK that only works on x86 devices
|
|
* The advantage is the size of the APK is reduced by about 4MB.
|
|
* Upload all the APKs to the Play Store and people will download
|
|
* the correct one based on the CPU architecture of their device.
|
|
*/
|
|
def enableSeparateBuildPerCPUArchitecture = false
|
|
|
|
/**
|
|
* Run Proguard to shrink the Java bytecode in release builds.
|
|
*/
|
|
def enableProguardInReleaseBuilds = false
|
|
|
|
def getVersionCode = { ->
|
|
new ByteArrayOutputStream().withStream { stdOut ->
|
|
if (project.hasProperty("versionCode")) {
|
|
return project.versionCode.toString().toInteger()
|
|
}
|
|
|
|
exec {
|
|
commandLine "bash", "../../scripts/version/build_no.sh"
|
|
standardOutput = stdOut
|
|
errorOutput = System.err
|
|
}
|
|
return stdOut.toString().toInteger()
|
|
}
|
|
}
|
|
|
|
def getVersionName = { ->
|
|
new ByteArrayOutputStream().withStream { stdOut ->
|
|
if (project.hasProperty("releaseVersion")) {
|
|
return project.releaseVersion
|
|
}
|
|
version = new File('../VERSION').text
|
|
return version.replaceAll("\\s","")
|
|
}
|
|
}
|
|
|
|
def getBuildUrl = { ->
|
|
new ByteArrayOutputStream().withStream { stdOut ->
|
|
if (project.hasProperty("buildUrl")) {
|
|
return project.buildUrl
|
|
}
|
|
return 'Local Build'
|
|
}
|
|
}
|
|
|
|
/* check if environment variable exists for given variable name first */
|
|
def getEnvOrConfig = { varName ->
|
|
def val = System.getenv(varName) ? System.getenv(varName) : project.property(varName)
|
|
return val
|
|
}
|
|
|
|
android {
|
|
compileSdkVersion rootProject.ext.compileSdkVersion
|
|
|
|
compileOptions {
|
|
sourceCompatibility JavaVersion.VERSION_1_8
|
|
targetCompatibility JavaVersion.VERSION_1_8
|
|
}
|
|
|
|
defaultConfig {
|
|
applicationId "im.status.ethereum"
|
|
minSdkVersion rootProject.ext.minSdkVersion
|
|
targetSdkVersion rootProject.ext.targetSdkVersion
|
|
multiDexEnabled true
|
|
versionCode getVersionCode()
|
|
versionName getVersionName()
|
|
ndk {
|
|
abiFilters getEnvOrConfig('NDK_ABI_FILTERS').split(';')
|
|
}
|
|
}
|
|
/**
|
|
* Arbitrary project metadata
|
|
* https://docs.gradle.org/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html
|
|
**/
|
|
project.ext {
|
|
buildUrl = getBuildUrl()
|
|
}
|
|
/**
|
|
* Fix for: (https://github.com/ReactiveX/RxJava/issues/4445)
|
|
* Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
|
|
* > com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException:
|
|
* Duplicate files copied in APK META-INF/rxjava.properties
|
|
*/
|
|
packagingOptions {
|
|
exclude 'META-INF/rxjava.properties'
|
|
exclude '/lib/mips64/**'
|
|
exclude '/lib/arm64-v8a/**'
|
|
/** Fix for: Execution failed for task ':app:transformNativeLibsWithStripDebugSymbolForDebug'.
|
|
* with recent version of ndk (17.0.4754217)
|
|
*/
|
|
doNotStrip '*/mips/*.so'
|
|
doNotStrip '*/mips64/*.so'
|
|
}
|
|
dexOptions {
|
|
jumboMode true
|
|
javaMaxHeapSize "8g"
|
|
}
|
|
signingConfigs {
|
|
release {
|
|
/* environment variables take precedence over gradle.properties file */
|
|
storeFile file(getEnvOrConfig('STATUS_RELEASE_STORE_FILE').replaceAll("~", System.properties['user.home']))
|
|
storePassword getEnvOrConfig('STATUS_RELEASE_STORE_PASSWORD')
|
|
keyAlias getEnvOrConfig('STATUS_RELEASE_KEY_ALIAS')
|
|
keyPassword getEnvOrConfig('STATUS_RELEASE_KEY_PASSWORD')
|
|
}
|
|
}
|
|
splits {
|
|
abi {
|
|
reset()
|
|
enable enableSeparateBuildPerCPUArchitecture
|
|
universalApk false // If true, also generate a universal APK
|
|
include "armeabi-v7a", "arm64-v8a", "x86"
|
|
}
|
|
}
|
|
buildTypes {
|
|
debug {
|
|
applicationIdSuffix ".debug"
|
|
debuggable true
|
|
versionNameSuffix "-SNAPSHOT"
|
|
resValue "string", "build_config_package", "im.status.ethereum"
|
|
}
|
|
release {
|
|
minifyEnabled enableProguardInReleaseBuilds
|
|
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
|
|
signingConfig signingConfigs.release
|
|
}
|
|
pr {
|
|
initWith release
|
|
applicationIdSuffix ".pr"
|
|
versionNameSuffix ".pr"
|
|
debuggable false
|
|
matchingFallbacks = ["release"]
|
|
// necessary to make react-native-config's code generation work
|
|
resValue "string", "build_config_package", "im.status.ethereum"
|
|
}
|
|
}
|
|
// applicationVariants are e.g. debug, release
|
|
applicationVariants.all { variant ->
|
|
variant.outputs.each { output ->
|
|
// For each separate APK per architecture, set a unique version code as described here:
|
|
|
|
// https://developer.android.com/studio/build/configure-apk-splits.html
|
|
def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
|
|
def abi = output.getFilter(OutputFile.ABI)
|
|
if (abi != null) { // null for the universal-debug, universal-release variants
|
|
output.versionCodeOverride =
|
|
versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
|
|
}
|
|
}
|
|
}
|
|
|
|
aaptOptions {
|
|
// disable PNG optimization as for some reason it cannot be trusted to provide deterministic output (see https://f-droid.org/en/docs/Reproducible_Builds/)
|
|
cruncherEnabled = false
|
|
}
|
|
|
|
sourceSets {
|
|
main { jniLibs.srcDirs 'libs' }
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
implementation project(':react-native-background-timer')
|
|
implementation project(':react-native-svg')
|
|
implementation 'com.android.support:multidex:1.0.2'
|
|
compile (project(':react-native-http-bridge')) {
|
|
exclude group: "com.google.android.gms"
|
|
}
|
|
implementation project(':react-native-splash-screen')
|
|
implementation project(':react-native-image-resizer')
|
|
implementation project(':react-native-dialogs')
|
|
implementation project(':realm')
|
|
implementation fileTree(dir: "libs", include: ["*.jar"])
|
|
implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
|
|
// Force using exact RN version instead of relying on gradle dependency resolution
|
|
// https://docs.gradle.org/current/userguide/introduction_dependency_management.html#sec:dependency_resolution
|
|
//compile ("com.facebook.react:react-native:0.55.4") { force = true } // From node_modules
|
|
implementation project(':react-native-android')
|
|
implementation project(':react-native-languages')
|
|
implementation project(':react-native-status')
|
|
implementation project(':react-native-fs')
|
|
implementation project(':react-native-image-crop-picker')
|
|
implementation project(':react-native-securerandom')
|
|
implementation project(':react-native-webview-bridge')
|
|
implementation project(':react-native-webview')
|
|
implementation project(':react-native-touch-id')
|
|
implementation project(':react-native-config')
|
|
implementation project(':react-native-firebase')
|
|
implementation project(':react-native-shake')
|
|
implementation project(':react-native-gesture-handler')
|
|
implementation project(':react-native-screens')
|
|
implementation project(':RNMail')
|
|
compile ('com.google.android.gms:play-services-base:16.0.1') {
|
|
force = true
|
|
}
|
|
compile (project(':react-native-camera')) {
|
|
exclude group: "com.google.android.gms"
|
|
compile 'com.android.support:exifinterface:28.+'
|
|
}
|
|
implementation project(':react-native-status-keycard')
|
|
implementation 'com.google.firebase:firebase-core:16.0.3' //this decides your firebase SDK version
|
|
implementation 'com.google.firebase:firebase-messaging:17.1.0'
|
|
implementation project(':react-native-keychain')
|
|
|
|
compile 'com.github.status-im:function:0.0.1'
|
|
implementation fileTree(dir: "node_modules/realm/android/libs", include: ["*.jar"])
|
|
implementation 'com.facebook.fresco:animated-gif:1.10.0'
|
|
}
|
|
|
|
// Run this once to be able to run the application with BUCK
|
|
// puts all compile dependencies into folder libs for BUCK to use
|
|
|
|
task hemroidBuild(type: Exec) {
|
|
def rootDir = project.rootDir
|
|
def localProperties = new File(rootDir, "local.properties")
|
|
|
|
def ndkDir = System.env.ANDROID_NDK
|
|
if (localProperties.exists()) {
|
|
Properties properties = new Properties()
|
|
localProperties.withInputStream { instr ->
|
|
properties.load(instr)
|
|
}
|
|
ndkDir = properties.getProperty('ndk.dir')
|
|
}
|
|
executable "$ndkDir/ndk-build"
|
|
}
|
|
|
|
preBuild.dependsOn hemroidBuild
|
|
|
|
// Must be at bottom to avoid dependency collision
|
|
apply plugin: "com.google.gms.google-services"
|
|
com.google.gms.googleservices.GoogleServicesPlugin.config.disableVersionCheck = true
|