2016-02-22 22:04:42 +00:00
apply plugin: "com.android.application"
2023-12-28 14:50:25 +00:00
apply plugin: "org.jetbrains.kotlin.android"
2023-12-11 15:52:23 +00:00
apply plugin: "com.facebook.react"
2016-02-22 22:04:42 +00:00
2017-08-09 15:30:08 +00:00
apply from: project ( ':react-native-config' ) . projectDir . getPath ( ) + "/dotenv.gradle"
2016-02-22 22:04:42 +00:00
import com.android.build.OutputFile
2019-03-04 12:38:41 +00:00
import com.sun.org.apache.xalan.internal.xsltc.compiler.Copy
2016-02-22 22:04:42 +00:00
2022-09-21 09:26:26 +00:00
/ *
2023-12-11 15:52:23 +00:00
* This is the configuration block to customize your React Native Android app .
* By default you don ' t need to apply any configuration , just uncomment the lines you need .
2022-09-21 09:26:26 +00:00
* /
2023-12-11 15:52:23 +00:00
react {
/* Folders */
// The root of your project, i.e. where "package.json" lives. Default is '..'
// root = file("../")
// The folder where the react-native NPM package is. Default is ../node_modules/react-native
// reactNativeDir = file("../node_modules/react-native")
// The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen
// codegenDir = file("../node_modules/@react-native/codegen")
// The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js
// cliFile = file("../node_modules/react-native/cli.js")
/* Variants */
// The list of variants to that are debuggable. For those we're going to
// skip the bundling of the JS bundle and the assets. By default is just 'debug'.
// If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants.
// debuggableVariants = ["liteDebug", "prodDebug"]
/* Bundling */
// A list containing the node command and its flags. Default is just 'node'.
nodeExecutableAndArgs = [ "node" , "--max-old-space-size=16384" ]
//
// The command to run when bundling. By default is 'bundle'
// bundleCommand = "ram-bundle"
//
// The path to the CLI configuration file. Default is empty.
// bundleConfig = file(../rn-cli.config.js)
//
// The name of the generated asset file containing your JS bundle
// bundleAssetName = "MyApplication.android.bundle"
//
// The entry file for bundle generation. Default is 'index.android.js' or 'index.js'
// entryFile = file("../js/MyApplication.android.js")
//
// A list of extra flags to pass to the 'bundle' commands.
// See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle
// extraPackagerArgs = []
/* Hermes Commands */
// The hermes compiler command to run. By default it is 'hermesc'
// hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc"
//
// The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map"
// hermesFlags = ["-O", "-output-source-map"]
}
2016-02-22 22:04:42 +00:00
/ * *
2023-12-11 15:52:23 +00:00
* Set this to true to Run Proguard on Release builds to minify the Java bytecode .
2016-02-22 22:04:42 +00:00
* /
2024-05-20 15:39:03 +00:00
def enableProguardInReleaseBuilds = true
2016-02-22 22:04:42 +00:00
2019-08-06 16:16:51 +00:00
/ * *
2023-12-11 15:52:23 +00:00
* The preferred build flavor of JavaScriptCore ( JSC )
2019-08-06 16:16:51 +00:00
*
* For example , to use the international variant , you can use:
* ` def jscFlavor = 'org.webkit:android-jsc-intl:+' `
*
* The international variant includes ICU i18n library and necessary data
* allowing to use e . g . ` Date . toLocaleString ` and ` String . localeCompare ` that
2023-12-11 15:52:23 +00:00
* give correct results when using with locales other than en - US . Note that
2019-08-06 16:16:51 +00:00
* this variant is about 6 MiB larger per architecture than default .
* /
def jscFlavor = 'org.webkit:android-jsc:+'
/ * *
* Whether to enable the Hermes VM .
*
* This should be set on project . ext . react and mirrored here . If it is not set
* on project . ext . react , JavaScript will not be compiled to Hermes Bytecode
* and the benefits of using Hermes will therefore be sharply reduced .
* /
2023-12-11 15:52:23 +00:00
def enableHermes = hermesEnabled . toBoolean ( ) ;
2019-08-06 16:16:51 +00:00
2023-04-12 09:55:19 +00:00
2021-09-17 16:04:39 +00:00
def getCommitHash = { - >
if ( project . hasProperty ( "commitHash" ) ) {
return project . commitHash
}
return "unknown"
}
2016-12-08 04:51:28 +00:00
def getVersionCode = { - >
new ByteArrayOutputStream ( ) . withStream { stdOut - >
2019-06-04 16:50:29 +00:00
if ( project . hasProperty ( "versionCode" ) ) {
return project . versionCode . toString ( ) . toInteger ( )
}
2016-12-08 04:51:28 +00:00
exec {
2019-08-23 17:16:08 +00:00
commandLine "bash" , "../../scripts/version/build_no.sh"
2016-12-08 04:51:28 +00:00
standardOutput = stdOut
2018-05-07 17:56:59 +00:00
errorOutput = System . err
2016-12-08 04:51:28 +00:00
}
return stdOut . toString ( ) . toInteger ( )
}
}
def getVersionName = { - >
new ByteArrayOutputStream ( ) . withStream { stdOut - >
2023-06-27 11:45:21 +00:00
// TODO: probably not used, cleanup
2018-04-04 16:36:26 +00:00
if ( project . hasProperty ( "releaseVersion" ) ) {
return project . releaseVersion
}
2022-10-21 07:42:52 +00:00
/ * Necessary because Android Studio uses wrong PWD .
* Is actually absolute directory path of this file . * /
2023-06-14 01:47:41 +00:00
def configDir = project . projectDir . toString ( )
2022-10-21 07:42:52 +00:00
version = new File ( configDir + '/../../VERSION' ) . text
2018-05-24 09:30:17 +00:00
return version . replaceAll ( "\\s" , "" )
2016-12-08 04:51:28 +00:00
}
}
2018-08-23 12:56:19 +00:00
def getBuildUrl = { - >
new ByteArrayOutputStream ( ) . withStream { stdOut - >
if ( project . hasProperty ( "buildUrl" ) ) {
return project . buildUrl
}
return 'Local Build'
}
}
2018-12-09 14:58:03 +00:00
/* 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
}
2016-02-22 22:04:42 +00:00
android {
2023-04-12 09:55:19 +00:00
ndkVersion rootProject . ext . ndkVersion
2023-06-14 01:47:41 +00:00
2024-03-22 14:21:44 +00:00
buildToolsVersion rootProject . ext . buildToolsVersion
compileSdk rootProject . ext . compileSdkVersion
kotlinOptions {
jvmTarget = JavaVersion . VERSION_17
}
2019-03-04 12:38:41 +00:00
2024-05-03 08:22:26 +00:00
// https://developer.android.com/studio/projects/install-ndk#vanilla_cmake
externalNativeBuild {
cmake {
// This version must match cmakeVersions inside nix/pkgs/android-sdk/compose.nix
version "3.22.1"
}
}
2019-03-04 12:38:41 +00:00
compileOptions {
2024-03-22 14:21:44 +00:00
sourceCompatibility JavaVersion . VERSION_17
targetCompatibility JavaVersion . VERSION_17
2019-03-04 12:38:41 +00:00
}
2023-12-11 15:52:23 +00:00
namespace "im.status.ethereum"
2016-02-22 22:04:42 +00:00
defaultConfig {
2016-11-18 14:49:51 +00:00
applicationId "im.status.ethereum"
2019-08-07 10:08:36 +00:00
minSdkVersion rootProject . ext . minSdkVersion
targetSdkVersion rootProject . ext . targetSdkVersion
2017-07-10 10:29:58 +00:00
multiDexEnabled true
2016-12-08 04:51:28 +00:00
versionCode getVersionCode ( )
versionName getVersionName ( )
2019-08-06 16:16:51 +00:00
missingDimensionStrategy 'react-native-camera' , 'general'
2021-09-17 16:04:39 +00:00
manifestPlaceholders = [ commitHash: getCommitHash ( ) ]
2019-09-13 17:16:13 +00:00
/* this needs to be empty if we want APKs split by ABIs */
if ( ! getEnvOrConfig ( 'ANDROID_ABI_SPLIT' ) . toBoolean ( ) ) {
ndk {
abiFilters getEnvOrConfig ( 'ANDROID_ABI_INCLUDE' ) . split ( ";" )
}
}
2016-02-22 22:04:42 +00:00
}
2023-06-14 01:47:41 +00:00
2018-08-23 12:56:19 +00:00
/ * *
* Arbitrary project metadata
* https: //docs.gradle.org/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html
* * /
project . ext {
buildUrl = getBuildUrl ( )
}
2017-10-19 04:38:20 +00:00
/ * *
* 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'
2018-05-28 07:42:07 +00:00
exclude '/lib/mips64/**'
2019-09-10 17:03:13 +00:00
exclude '/lib/armeabi/**'
2019-08-06 16:16:51 +00:00
2020-05-18 07:35:22 +00:00
pickFirst '**/armeabi-v7a/libc++_shared.so'
pickFirst '**/x86/libc++_shared.so'
pickFirst '**/arm64-v8a/libc++_shared.so'
pickFirst '**/x86_64/libc++_shared.so'
pickFirst '**/x86/libjsc.so'
pickFirst '**/armeabi-v7a/libjsc.so'
2019-12-04 06:52:02 +00:00
2018-05-24 12:46:44 +00:00
/ * * Fix for : Execution failed for task ':app:transformNativeLibsWithStripDebugSymbolForDebug' .
* with recent version of ndk ( 17.0 . 4754217 )
* /
doNotStrip '*/mips/*.so'
doNotStrip '*/mips64/*.so'
2017-10-19 04:38:20 +00:00
}
2016-02-22 22:04:42 +00:00
splits {
abi {
2016-04-04 16:21:10 +00:00
reset ( )
2019-09-13 17:16:13 +00:00
enable getEnvOrConfig ( 'ANDROID_ABI_SPLIT' ) . toBoolean ( )
include getEnvOrConfig ( 'ANDROID_ABI_INCLUDE' ) . split ( ";" )
universalApk true
2016-02-22 22:04:42 +00:00
}
}
2022-04-22 08:20:01 +00:00
signingConfigs {
debug {
storeFile file ( 'debug.keystore' )
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
}
2016-02-22 22:04:42 +00:00
buildTypes {
2016-12-08 04:51:28 +00:00
debug {
2018-04-26 05:16:03 +00:00
applicationIdSuffix ".debug"
2019-05-13 13:24:45 +00:00
debuggable true
versionNameSuffix "-SNAPSHOT"
2018-04-26 05:16:03 +00:00
resValue "string" , "build_config_package" , "im.status.ethereum"
2022-04-22 08:20:01 +00:00
signingConfig signingConfigs . debug
2016-12-08 04:51:28 +00:00
}
2016-02-22 22:04:42 +00:00
release {
minifyEnabled enableProguardInReleaseBuilds
2024-05-20 15:39:03 +00:00
shrinkResources enableProguardInReleaseBuilds
2016-02-22 22:04:42 +00:00
proguardFiles getDefaultProguardFile ( "proguard-android.txt" ) , "proguard-rules.pro"
2022-04-22 08:20:01 +00:00
signingConfig null
2016-02-22 22:04:42 +00:00
}
2019-02-11 21:24:36 +00:00
pr {
initWith release
applicationIdSuffix ".pr"
2019-05-13 13:24:45 +00:00
versionNameSuffix ".pr"
2024-05-20 15:39:03 +00:00
debuggable false
2019-02-11 21:24:36 +00:00
matchingFallbacks = [ "release" ]
2024-05-20 15:39:03 +00:00
// necessary to make react-native-config's code generation work
resValue "string" , "build_config_package" , "im.status.ethereum"
2019-02-11 21:24:36 +00:00
}
2016-02-22 22:04:42 +00:00
}
2023-12-11 15:52:23 +00:00
2016-02-22 22:04:42 +00:00
// 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:
2019-08-01 10:49:46 +00:00
// https://developer.android.com/studio/build/configure-apk-splits.html
def versionCodes = [ "armeabi-v7a" : 1 , "x86" : 2 , "arm64-v8a" : 3 , "x86_64" : 4 ]
2016-02-22 22:04:42 +00:00
def abi = output . getFilter ( OutputFile . ABI )
if ( abi ! = null ) { // null for the universal-debug, universal-release variants
2020-02-12 13:14:57 +00:00
output . versionCodeOverride = versionCodes . get ( abi ) + defaultConfig . versionCode
2016-02-22 22:04:42 +00:00
}
2019-08-06 16:16:51 +00:00
2016-02-22 22:04:42 +00:00
}
}
2017-10-12 19:49:48 +00:00
2023-12-11 15:52:23 +00:00
2019-05-13 13:24:45 +00:00
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
}
2019-03-04 18:34:20 +00:00
sourceSets {
main { jniLibs . srcDirs 'libs' }
}
2016-02-22 22:04:42 +00:00
}
dependencies {
2023-12-11 15:52:23 +00:00
// The version of react-native is set by the React Native Gradle Plugin
implementation ( "com.facebook.react:react-android" )
2024-02-06 11:27:05 +00:00
implementation ( "androidx.core:core-splashscreen:1.0.0" )
// we don't use hermes for debug but we need its pom file for release builds
// https://github.com/status-im/status-mobile/pull/18675
implementation ( "com.facebook.react:hermes-android" )
// FIXME: implementing both hermes & JSC increases bundle size by ~ 2MB
implementation ( jscFlavor )
2019-08-06 16:16:51 +00:00
2020-02-25 11:31:04 +00:00
// react-native-screens
2024-02-06 11:27:05 +00:00
implementation ( "androidx.appcompat:appcompat:1.1.0-rc01" )
implementation ( "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-alpha02" )
implementation ( "androidx.multidex:multidex:2.0.1" ) // required by status-mobile/android/app/src/main/java/im/status/ethereum/MainApplication.java
2022-07-14 11:57:04 +00:00
implementation project ( ':react-native-blur' )
2018-01-18 20:52:24 +00:00
implementation project ( ':react-native-status' )
2018-12-04 13:41:34 +00:00
implementation project ( ':react-native-status-keycard' )
2024-02-06 11:27:05 +00:00
implementation ( "com.github.status-im:function:0.0.1" )
implementation ( "com.facebook.fresco:fresco:2.5.0" )
implementation ( "com.facebook.fresco:animated-gif:2.5.0" )
2024-05-20 15:39:03 +00:00
implementation ( "com.squareup.okhttp3:okhttp-tls:4.11.0" )
2023-12-11 15:52:23 +00:00
implementation ( "com.google.prefab:cli:2.0.0" )
2024-03-22 14:21:44 +00:00
implementation ( "com.android.tools.build:aapt2:8.1.1-10154469" )
2023-06-14 01:47:41 +00:00
}
2018-08-23 01:54:29 +00:00
2020-04-24 17:41:06 +00:00
def getLocalNDKDir = { - >
def rootDir = project . rootDir
def localProperties = new File ( rootDir , "local.properties" )
if ( ! localProperties . exists ( ) ) {
return null
}
Properties properties = new Properties ( )
localProperties . withInputStream { instr - >
properties . load ( instr )
}
return properties . getProperty ( 'ndk.dir' )
}
// 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 localNdkDir = getLocalNDKDir ( )
def ndkDir = System . env . ANDROID_NDK_ROOT
if ( localNdkDir ! = null ) {
2021-09-02 12:24:09 +00:00
ndkDir = localNdkDir
2020-04-24 17:41:06 +00:00
}
def execPath = "$ndkDir/ndk-build"
def exec = new File ( execPath )
if ( ! exec . exists ( ) ) {
throw new GradleException ( "No ndk-build binary found!" )
}
executable execPath
}
preBuild . dependsOn hemroidBuild
2019-08-06 16:16:51 +00:00
apply from: file ( "../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle" ) ; applyNativeModulesAppBuildGradle ( project )