TP-61425 | Girish Suragani | Setup Macro Benchmarking and Baseline pr… (#10183)
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
plugins {
|
||||
alias libs.plugins.android.application
|
||||
alias libs.plugins.baseline.profile
|
||||
alias libs.plugins.firebase.crashlytics
|
||||
alias libs.plugins.firebase.perf
|
||||
alias libs.plugins.google.services
|
||||
@@ -71,6 +72,16 @@ android {
|
||||
testCoverageEnabled false
|
||||
signingConfig signingConfigs.debug
|
||||
}
|
||||
benchmark {
|
||||
initWith release
|
||||
debuggable false
|
||||
minifyEnabled true
|
||||
shrinkResources false
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro', 'retrofit2.pro', 'gson.pro', 'alfred.pro', 'courier.pro'
|
||||
matchingFallbacks = ['release']
|
||||
signingConfig signingConfigs.debug
|
||||
manifestPlaceholders = [branchMode: 'false']
|
||||
}
|
||||
release {
|
||||
debuggable false
|
||||
minifyEnabled true
|
||||
@@ -322,6 +333,7 @@ dependencies {
|
||||
implementation libs.androidx.fragment.ktx
|
||||
implementation libs.androidx.lifecycle.viewmodel.ktx
|
||||
implementation libs.androidx.multidex
|
||||
implementation libs.androidx.profileinstaller
|
||||
implementation libs.androidx.work.runtimeKtx
|
||||
implementation libs.branch
|
||||
implementation libs.dagger.hiltAndroid
|
||||
|
||||
@@ -50,6 +50,9 @@ com.th3rdwave.safeareacontext, com.horcrux.svg, org.reactnative.maskedview, com.
|
||||
android:theme="@style/AppTheme"
|
||||
android:usesCleartextTraffic="false"
|
||||
tools:replace="android:theme,android:allowBackup,android:fullBackupContent,android:usesCleartextTraffic">
|
||||
<profileable
|
||||
android:shell="true"
|
||||
tools:targetApi="29" />
|
||||
<property android:name="REQUIRE_SECURE_ENV" android:value="1" />
|
||||
<activity
|
||||
android:name=".payment.activities.FeedbackActivity"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -29,6 +29,9 @@ android {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
benchmark {
|
||||
initWith release
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_17
|
||||
@@ -41,6 +44,22 @@ android {
|
||||
freeCompilerArgs += ["-Xstring-concat=inline"]
|
||||
jvmTarget = '17'
|
||||
}
|
||||
flavorDimensions = ["app"]
|
||||
productFlavors {
|
||||
dev {
|
||||
dimension "app"
|
||||
}
|
||||
qa {
|
||||
isDefault true
|
||||
dimension "app"
|
||||
}
|
||||
mock {
|
||||
dimension "app"
|
||||
}
|
||||
prod {
|
||||
dimension "app"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
1
android/benchmark/.gitignore
vendored
Normal file
1
android/benchmark/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/build
|
||||
92
android/benchmark/build.gradle
Normal file
92
android/benchmark/build.gradle
Normal file
@@ -0,0 +1,92 @@
|
||||
plugins {
|
||||
alias(libs.plugins.android.test)
|
||||
alias(libs.plugins.baseline.profile)
|
||||
alias(libs.plugins.kotlin.android)
|
||||
}
|
||||
|
||||
android {
|
||||
namespace 'com.naviapp.benchmark'
|
||||
compileSdk 34
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_17
|
||||
targetCompatibility JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
testOptions {
|
||||
managedDevices {
|
||||
devices {
|
||||
pixel6Api30(com.android.build.api.dsl.ManagedVirtualDevice) {
|
||||
device = "Pixel 6"
|
||||
apiLevel = 30
|
||||
systemImageSource = "aosp"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = "17"
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
minSdk 24
|
||||
targetSdk 34
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "LOW-BATTERY"
|
||||
testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR"
|
||||
|
||||
missingDimensionStrategy("contentType", "demo")
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
debuggable false
|
||||
minifyEnabled true
|
||||
shrinkResources true
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
benchmark {
|
||||
debuggable true
|
||||
minifyEnabled true
|
||||
shrinkResources true
|
||||
testProguardFiles 'test.pro'
|
||||
signingConfig = debug.signingConfig
|
||||
matchingFallbacks = ["release"]
|
||||
}
|
||||
}
|
||||
|
||||
targetProjectPath = ":app"
|
||||
experimentalProperties["android.experimental.self-instrumenting"] = true
|
||||
|
||||
flavorDimensions = ["app"]
|
||||
productFlavors {
|
||||
dev {
|
||||
dimension "app"
|
||||
}
|
||||
qa {
|
||||
isDefault true
|
||||
dimension "app"
|
||||
}
|
||||
mock {
|
||||
dimension "app"
|
||||
}
|
||||
prod {
|
||||
dimension "app"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation libs.androidx.benchmark.macro.junit4
|
||||
implementation libs.androidx.test.junit
|
||||
implementation libs.androidx.test.espresso.core
|
||||
implementation libs.androidx.uiautomator
|
||||
}
|
||||
|
||||
androidComponents {
|
||||
beforeVariants(selector().all()) {
|
||||
enable = buildType == "benchmark"
|
||||
}
|
||||
}
|
||||
2
android/benchmark/src/main/AndroidManifest.xml
Normal file
2
android/benchmark/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest />
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.naviapp.benchmark.baselineprofile
|
||||
|
||||
import android.os.Build
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.benchmark.macro.junit4.BaselineProfileRule
|
||||
import com.naviapp.benchmark.utils.PACKAGE_NAME
|
||||
import com.naviapp.benchmark.utils.scrollHomePage
|
||||
import com.naviapp.benchmark.utils.startActivityAndAllowNotifications
|
||||
import com.naviapp.benchmark.utils.waitForHomePage
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
|
||||
class HomePageScrollBaselineProfile {
|
||||
@RequiresApi(Build.VERSION_CODES.P)
|
||||
@get:Rule
|
||||
val baselineProfileRule = BaselineProfileRule()
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.P)
|
||||
@Test
|
||||
fun generate() =
|
||||
baselineProfileRule.collect(
|
||||
PACKAGE_NAME
|
||||
) {
|
||||
startActivityAndAllowNotifications()
|
||||
waitForHomePage()
|
||||
scrollHomePage()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.naviapp.benchmark.home
|
||||
|
||||
import androidx.benchmark.macro.CompilationMode
|
||||
import androidx.benchmark.macro.FrameTimingMetric
|
||||
import androidx.benchmark.macro.StartupMode
|
||||
import androidx.benchmark.macro.junit4.MacrobenchmarkRule
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import com.naviapp.benchmark.utils.PACKAGE_NAME
|
||||
import com.naviapp.benchmark.utils.scrollHomePage
|
||||
import com.naviapp.benchmark.utils.startActivityAndAllowNotifications
|
||||
import com.naviapp.benchmark.utils.waitForHomePage
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class HomePageScrollBenchmark {
|
||||
@get:Rule
|
||||
val benchmarkRule = MacrobenchmarkRule()
|
||||
|
||||
@Test
|
||||
fun scrollHomeCompilationNone() = scrollHomePage(CompilationMode.None())
|
||||
|
||||
@Test
|
||||
fun scrollHomeCompilationBaselineProfile() = scrollHomePage(CompilationMode.Partial())
|
||||
|
||||
@Test
|
||||
fun scrollHomeCompilationFull() = scrollHomePage(CompilationMode.Full())
|
||||
|
||||
private fun scrollHomePage(compilationMode: CompilationMode) = benchmarkRule.measureRepeated(
|
||||
packageName = PACKAGE_NAME,
|
||||
metrics = listOf(FrameTimingMetric()),
|
||||
iterations = 10,
|
||||
startupMode = StartupMode.WARM,
|
||||
compilationMode = compilationMode,
|
||||
setupBlock = {
|
||||
pressHome()
|
||||
startActivityAndAllowNotifications()
|
||||
}
|
||||
) {
|
||||
waitForHomePage()
|
||||
scrollHomePage()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.naviapp.benchmark.startup
|
||||
|
||||
import androidx.benchmark.macro.BaselineProfileMode.Disable
|
||||
import androidx.benchmark.macro.BaselineProfileMode.Require
|
||||
import androidx.benchmark.macro.CompilationMode
|
||||
import androidx.benchmark.macro.StartupMode.COLD
|
||||
import androidx.benchmark.macro.StartupTimingMetric
|
||||
import androidx.benchmark.macro.junit4.MacrobenchmarkRule
|
||||
import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner
|
||||
import com.naviapp.benchmark.utils.PACKAGE_NAME
|
||||
import com.naviapp.benchmark.utils.allowNotifications
|
||||
import com.naviapp.benchmark.utils.startActivityAndAllowNotifications
|
||||
import com.naviapp.benchmark.utils.waitForHomePageLoad
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@RunWith(AndroidJUnit4ClassRunner::class)
|
||||
class StartupBenchmark {
|
||||
@get:Rule
|
||||
val benchmarkRule = MacrobenchmarkRule()
|
||||
|
||||
@Test
|
||||
fun startupWithoutPreCompilation() = startup(CompilationMode.None())
|
||||
|
||||
@Test
|
||||
fun startupWithPartialCompilationAndDisabledBaselineProfile() = startup(
|
||||
CompilationMode.Partial(baselineProfileMode = Disable, warmupIterations = 1),
|
||||
)
|
||||
|
||||
@Test
|
||||
fun startupPrecompiledWithBaselineProfile() =
|
||||
startup(CompilationMode.Partial(baselineProfileMode = Require))
|
||||
|
||||
@Test
|
||||
fun startupFullyPrecompiled() = startup(CompilationMode.Full())
|
||||
|
||||
private fun startup(compilationMode: CompilationMode) = benchmarkRule.measureRepeated(
|
||||
packageName = PACKAGE_NAME,
|
||||
metrics = listOf(StartupTimingMetric()),
|
||||
compilationMode = compilationMode,
|
||||
iterations = 5,
|
||||
startupMode = COLD,
|
||||
setupBlock = {
|
||||
pressHome()
|
||||
allowNotifications()
|
||||
},
|
||||
) {
|
||||
startActivityAndAllowNotifications()
|
||||
waitForHomePageLoad()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.naviapp.benchmark.utils
|
||||
|
||||
import android.Manifest.permission
|
||||
import android.os.Build.VERSION.SDK_INT
|
||||
import android.os.Build.VERSION_CODES.TIRAMISU
|
||||
import androidx.benchmark.macro.MacrobenchmarkScope
|
||||
|
||||
fun MacrobenchmarkScope.allowNotifications() {
|
||||
if (SDK_INT >= TIRAMISU) {
|
||||
val command = "pm grant $packageName ${permission.POST_NOTIFICATIONS}"
|
||||
device.executeShellCommand(command)
|
||||
}
|
||||
}
|
||||
|
||||
fun MacrobenchmarkScope.startActivityAndAllowNotifications() {
|
||||
startActivityAndWait()
|
||||
allowNotifications()
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.naviapp.benchmark.utils
|
||||
|
||||
import androidx.benchmark.macro.MacrobenchmarkScope
|
||||
import androidx.test.uiautomator.By
|
||||
import androidx.test.uiautomator.UiObject2
|
||||
import androidx.test.uiautomator.UiObject2Condition
|
||||
import androidx.test.uiautomator.Until
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
fun MacrobenchmarkScope.waitForHomePage() {
|
||||
device.wait(
|
||||
Until.hasObject(By.clazz(HOME_PAGE_CLASS_NAME)), TimeUnit.SECONDS.toMillis(50)
|
||||
)
|
||||
}
|
||||
fun MacrobenchmarkScope.scrollHomePage() {
|
||||
val list = device.waitAndFindObject(
|
||||
By.res(PACKAGE_NAME, "nestedScrollView"), TimeUnit.SECONDS.toMillis(10)
|
||||
)
|
||||
device.flingElementDownUp(list)
|
||||
}
|
||||
|
||||
fun MacrobenchmarkScope.waitForHomePageLoad() {
|
||||
device.wait(
|
||||
Until.hasObject(By.clazz(HOME_PAGE_CLASS_NAME)), TimeUnit.SECONDS.toMillis(50)
|
||||
)
|
||||
val list = device.waitAndFindObject(
|
||||
By.res(PACKAGE_NAME, "nestedScrollView"), TimeUnit.SECONDS.toMillis(10)
|
||||
)
|
||||
list.wait(untilHasChildren(), 60_000)
|
||||
}
|
||||
|
||||
fun untilHasChildren(
|
||||
childCount: Int = 1,
|
||||
op: HasChildrenOp = HasChildrenOp.AT_LEAST,
|
||||
): UiObject2Condition<Boolean> = object : UiObject2Condition<Boolean>() {
|
||||
override fun apply(element: UiObject2): Boolean = when (op) {
|
||||
HasChildrenOp.AT_LEAST -> element.childCount >= childCount
|
||||
HasChildrenOp.EXACTLY -> element.childCount == childCount
|
||||
HasChildrenOp.AT_MOST -> element.childCount <= childCount
|
||||
}
|
||||
}
|
||||
|
||||
enum class HasChildrenOp {
|
||||
AT_LEAST,
|
||||
EXACTLY,
|
||||
AT_MOST,
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.naviapp.benchmark.utils
|
||||
|
||||
import androidx.test.uiautomator.BySelector
|
||||
import androidx.test.uiautomator.Direction
|
||||
import androidx.test.uiautomator.UiDevice
|
||||
import androidx.test.uiautomator.UiObject2
|
||||
import androidx.test.uiautomator.Until
|
||||
|
||||
val PACKAGE_NAME = buildString {
|
||||
append("com.naviapp.dev")
|
||||
}
|
||||
|
||||
val HOME_PAGE_CLASS_NAME = buildString {
|
||||
append("com.naviapp.home.activity.NewDashboardActivity")
|
||||
}
|
||||
|
||||
fun UiDevice.waitAndFindObject(selector: BySelector, timeout: Long): UiObject2 {
|
||||
if (!wait(Until.hasObject(selector), timeout)) {
|
||||
throw AssertionError("Element not found on screen in ${timeout}ms (selector=$selector)")
|
||||
}
|
||||
return findObject(selector)
|
||||
}
|
||||
|
||||
fun UiDevice.flingElementDownUp(element: UiObject2) {
|
||||
element.setGestureMargin(displayWidth / 5)
|
||||
element.fling(Direction.DOWN)
|
||||
waitForIdle()
|
||||
element.fling(Direction.UP)
|
||||
}
|
||||
40
android/benchmark/test.pro
Normal file
40
android/benchmark/test.pro
Normal file
@@ -0,0 +1,40 @@
|
||||
-dontwarn com.google.errorprone.annotations.MustBeClosed
|
||||
-dontwarn androidx.camera.core.VideoCapture$Builder
|
||||
-dontwarn androidx.camera.core.VideoCapture$OnVideoSavedCallback
|
||||
-dontwarn androidx.camera.core.VideoCapture$OutputFileOptions$Builder
|
||||
-dontwarn androidx.camera.core.VideoCapture$OutputFileOptions
|
||||
-dontwarn androidx.camera.core.VideoCapture
|
||||
-dontwarn androidx.compose.ui.platform.LocalSoftwareKeyboardController
|
||||
-dontwarn com.payu.cardscanner.PayU
|
||||
-dontwarn com.payu.cardscanner.callbacks.PayUCardListener
|
||||
-dontwarn com.payu.olamoney.OlaMoney
|
||||
-dontwarn com.payu.olamoney.callbacks.OlaMoneyCallback
|
||||
-dontwarn com.payu.olamoney.utils.PayUOlaMoneyParams
|
||||
-dontwarn com.payu.olamoney.utils.PayUOlaMoneyPaymentParams
|
||||
-dontwarn com.payu.phonepe.PhonePe
|
||||
-dontwarn com.payu.phonepe.callbacks.PayUPhonePeCallback
|
||||
-dontwarn in.juspay.hyperapay.APayBridge
|
||||
-dontwarn in.juspay.hyperapayupi.APayUPIBridge
|
||||
-dontwarn in.juspay.hypergpay.GPayBridge
|
||||
-dontwarn in.juspay.hypergpay.GPayUtils
|
||||
-dontwarn in.juspay.hypergpayintl.GPayIntlBridge
|
||||
-dontwarn in.juspay.hyperlottie.LottieAnimation
|
||||
-dontwarn in.juspay.hyperpaypal.PaypalBridge
|
||||
-dontwarn in.juspay.hyperpayu.PayUBridge
|
||||
-dontwarn in.juspay.hyperqr.QrBridge
|
||||
-dontwarn in.juspay.hypersimpl.SimplBridge
|
||||
-dontwarn in.juspay.hyperupi.UPIBridge
|
||||
-dontwarn in.juspay.hypervsc.VSCBridge
|
||||
-dontwarn in.juspay.hypervsc.VSCHelper
|
||||
-dontwarn in.juspay.mobility.app.MobilityAppBridge
|
||||
-dontwarn in.juspay.mobility.common.MobilityCommonBridge
|
||||
-dontwarn in.juspay.mobility.customer.MobilityCustomerBridge
|
||||
-dontwarn in.juspay.mobility.driver.MobilityDriverBridge
|
||||
-dontwarn javax.script.AbstractScriptEngine
|
||||
-dontwarn javax.script.Compilable
|
||||
-dontwarn javax.script.ScriptEngine
|
||||
-dontwarn javax.script.ScriptEngineFactory
|
||||
-dontwarn org.joda.convert.FromString
|
||||
-dontwarn org.joda.convert.ToString
|
||||
-dontwarn proguard.annotation.Keep
|
||||
-dontwarn proguard.annotation.KeepClassMembers
|
||||
@@ -23,6 +23,8 @@ plugins {
|
||||
alias libs.plugins.android.application apply false
|
||||
alias libs.plugins.android.dynamic.feature apply false
|
||||
alias libs.plugins.android.library apply false
|
||||
alias libs.plugins.android.test apply false
|
||||
alias libs.plugins.baseline.profile apply false
|
||||
alias libs.plugins.firebase.crashlytics apply false
|
||||
alias libs.plugins.firebase.perf apply false
|
||||
alias libs.plugins.google.services apply false
|
||||
|
||||
@@ -30,6 +30,7 @@ androidx-gridlayout = "1.0.0"
|
||||
androidx-hilt = "1.0.0"
|
||||
androidx-legacy-support-v4 = "1.0.0"
|
||||
androidx-lifecycle = "2.6.2"
|
||||
androidx-macro-benchmark = "1.2.2"
|
||||
androidx-multidex = "2.0.1"
|
||||
androidx-pagingCompose = "3.2.0"
|
||||
androidx-pagingRuntimeKtx = "3.1.1"
|
||||
@@ -45,6 +46,7 @@ androidx-work-runtimeKtx = "2.8.1"
|
||||
anrwatchdog = "1.4.0"
|
||||
appsflyer = "6.12.5"
|
||||
awaitility = "4.1.0"
|
||||
benchmark-macro-junit4 = "1.2.3"
|
||||
branch = "5.1.1"
|
||||
cashfree = "2.0.6"
|
||||
chucker = "4.0.0"
|
||||
@@ -102,6 +104,7 @@ payu-checkoutPro = "2.0.24"
|
||||
payu-nativeOtpAssist = "1.3.7"
|
||||
philjay-mpAndroidChart = "v3.1.0"
|
||||
pierfrancescosoffritti-androidyoutubeplayer = "11.1.0"
|
||||
profileinstaller = "1.3.1"
|
||||
raamcosta-composeDestinations = "1.9.62"
|
||||
razorpay = "1.6.33"
|
||||
restAssured = "5.4.0"
|
||||
@@ -110,6 +113,7 @@ room = "2.5.2"
|
||||
shawnLin-numberPicker = "2.4.13"
|
||||
spotless = "6.24.0"
|
||||
truecaller = "3.0.0"
|
||||
uiautomator = "2.3.0"
|
||||
visit = "1.24"
|
||||
wasabeef-recyclerviewAnimators = "4.0.1"
|
||||
zetetic-sqlcipherAndroid = "4.5.5"
|
||||
@@ -149,6 +153,7 @@ androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "a
|
||||
|
||||
androidx-arch-core-testing = { module = "androidx.arch.core:core-testing", version.ref = "androidx-arch-core-testing" }
|
||||
|
||||
androidx-benchmark-macro-junit4 = { group = "androidx.benchmark", name = "benchmark-macro-junit4", version.ref = "benchmark-macro-junit4" }
|
||||
androidx-browser = { module = "androidx.browser:browser", version.ref = "androidx-browser" }
|
||||
|
||||
androidx-camera-camera2 = { module = "androidx.camera:camera-camera2", version.ref = "androidx-camera" }
|
||||
@@ -199,6 +204,7 @@ androidx-paging-compose = { module = "androidx.paging:paging-compose", version.r
|
||||
androidx-paging-runtime-ktx = { module = "androidx.paging:paging-runtime-ktx", version.ref = "androidx-pagingRuntimeKtx" }
|
||||
|
||||
androidx-preference-ktx = { module = "androidx.preference:preference-ktx", version.ref = "androidx-preferenceKtx" }
|
||||
androidx-profileinstaller = { module = "androidx.profileinstaller:profileinstaller", version.ref = "profileinstaller" }
|
||||
|
||||
androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "room" }
|
||||
androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "room" }
|
||||
@@ -218,6 +224,8 @@ androidx-test-monitor = { module = "androidx.test:monitor", version.ref = "andro
|
||||
androidx-test-rules = { module = "androidx.test:rules", version.ref = "androidx-test-rules" }
|
||||
androidx-test-runner = { module = "androidx.test:runner", version.ref = "androidx-test-runner" }
|
||||
|
||||
androidx-uiautomator = { group = "androidx.test.uiautomator", name = "uiautomator", version.ref = "uiautomator" }
|
||||
|
||||
androidx-work-runtimeKtx = { module = "androidx.work:work-runtime-ktx", version.ref = "androidx-work-runtimeKtx" }
|
||||
|
||||
anrwatchdog = { module = "com.github.anrwatchdog:anrwatchdog", version.ref = "anrwatchdog" }
|
||||
@@ -369,10 +377,13 @@ zetetic-sqlcipher-android = { module = "net.zetetic:sqlcipher-android", version.
|
||||
|
||||
zxing = { module = "com.google.zxing:core", version.ref = "zxing" }
|
||||
|
||||
|
||||
[plugins]
|
||||
android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" }
|
||||
android-dynamic-feature = { id = "com.android.dynamic-feature", version.ref = "androidGradlePlugin" }
|
||||
android-library = { id = "com.android.library", version.ref = "androidGradlePlugin" }
|
||||
android-test = { id = "com.android.test", version.ref = "androidGradlePlugin" }
|
||||
baseline-profile = { id = "androidx.baselineprofile", version.ref = "androidx-macro-benchmark" }
|
||||
firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebase-crashlytics" }
|
||||
firebase-perf = { id = "com.google.firebase.firebase-perf", version.ref = "firebase-perf" }
|
||||
google-services = { id = "com.google.gms.google-services", version.ref = "google-services" }
|
||||
|
||||
@@ -31,6 +31,9 @@ android {
|
||||
minifyEnabled true
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
benchmark {
|
||||
initWith release
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
incremental true
|
||||
@@ -49,6 +52,22 @@ android {
|
||||
excludes += ['META-INF']
|
||||
}
|
||||
}
|
||||
flavorDimensions = ["app"]
|
||||
productFlavors {
|
||||
dev {
|
||||
dimension "app"
|
||||
}
|
||||
qa {
|
||||
isDefault true
|
||||
dimension "app"
|
||||
}
|
||||
mock {
|
||||
dimension "app"
|
||||
}
|
||||
prod {
|
||||
dimension "app"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
@@ -24,6 +24,9 @@ android {
|
||||
minifyEnabled true
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
benchmark {
|
||||
initWith release
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
incremental true
|
||||
@@ -34,6 +37,22 @@ android {
|
||||
freeCompilerArgs += ["-Xstring-concat=inline"]
|
||||
jvmTarget = '17'
|
||||
}
|
||||
flavorDimensions = ["app"]
|
||||
productFlavors {
|
||||
dev {
|
||||
dimension "app"
|
||||
}
|
||||
qa {
|
||||
isDefault true
|
||||
dimension "app"
|
||||
}
|
||||
mock {
|
||||
dimension "app"
|
||||
}
|
||||
prod {
|
||||
dimension "app"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
@@ -61,6 +80,8 @@ dependencies {
|
||||
|
||||
debugImplementation libs.chucker.library
|
||||
|
||||
benchmarkImplementation libs.chucker.libraryNoOp
|
||||
|
||||
releaseImplementation libs.chucker.libraryNoOp
|
||||
|
||||
testImplementation libs.androidx.room.testing
|
||||
|
||||
@@ -32,6 +32,9 @@ android {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
benchmark {
|
||||
initWith release
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_17
|
||||
@@ -47,6 +50,22 @@ android {
|
||||
freeCompilerArgs += ["-Xstring-concat=inline"]
|
||||
jvmTarget = '17'
|
||||
}
|
||||
flavorDimensions = ["app"]
|
||||
productFlavors {
|
||||
dev {
|
||||
dimension "app"
|
||||
}
|
||||
qa {
|
||||
isDefault true
|
||||
dimension "app"
|
||||
}
|
||||
mock {
|
||||
dimension "app"
|
||||
}
|
||||
prod {
|
||||
dimension "app"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
@@ -30,6 +30,9 @@ android {
|
||||
minifyEnabled true
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
benchmark {
|
||||
initWith release
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_17
|
||||
@@ -45,6 +48,22 @@ android {
|
||||
lint {
|
||||
disable 'NullSafeMutableLiveData'
|
||||
}
|
||||
flavorDimensions = ["app"]
|
||||
productFlavors {
|
||||
dev {
|
||||
dimension "app"
|
||||
}
|
||||
qa {
|
||||
isDefault true
|
||||
dimension "app"
|
||||
}
|
||||
mock {
|
||||
dimension "app"
|
||||
}
|
||||
prod {
|
||||
dimension "app"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
@@ -29,6 +29,9 @@ android {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
benchmark {
|
||||
initWith release
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
incremental true
|
||||
@@ -42,6 +45,22 @@ android {
|
||||
freeCompilerArgs += ["-Xstring-concat=inline"]
|
||||
jvmTarget = '17'
|
||||
}
|
||||
flavorDimensions = ["app"]
|
||||
productFlavors {
|
||||
dev {
|
||||
dimension "app"
|
||||
}
|
||||
qa {
|
||||
isDefault true
|
||||
dimension "app"
|
||||
}
|
||||
mock {
|
||||
dimension "app"
|
||||
}
|
||||
prod {
|
||||
dimension "app"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
@@ -29,6 +29,9 @@ android {
|
||||
minifyEnabled true
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
benchmark {
|
||||
initWith release
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_17
|
||||
@@ -44,6 +47,22 @@ android {
|
||||
lint {
|
||||
disable 'NullSafeMutableLiveData'
|
||||
}
|
||||
flavorDimensions = ["app"]
|
||||
productFlavors {
|
||||
dev {
|
||||
dimension "app"
|
||||
}
|
||||
qa {
|
||||
isDefault true
|
||||
dimension "app"
|
||||
}
|
||||
mock {
|
||||
dimension "app"
|
||||
}
|
||||
prod {
|
||||
dimension "app"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
@@ -31,6 +31,9 @@ android {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
benchmark {
|
||||
initWith release
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
incremental true
|
||||
@@ -47,6 +50,22 @@ android {
|
||||
lint {
|
||||
disable 'NullSafeMutableLiveData'
|
||||
}
|
||||
flavorDimensions = ["app"]
|
||||
productFlavors {
|
||||
dev {
|
||||
dimension "app"
|
||||
}
|
||||
qa {
|
||||
isDefault true
|
||||
dimension "app"
|
||||
}
|
||||
mock {
|
||||
dimension "app"
|
||||
}
|
||||
prod {
|
||||
dimension "app"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static def formatString(String value) {
|
||||
@@ -103,6 +122,8 @@ dependencies {
|
||||
|
||||
debugApi libs.chucker.library
|
||||
|
||||
benchmarkApi libs.chucker.libraryNoOp
|
||||
|
||||
releaseApi libs.chucker.libraryNoOp
|
||||
|
||||
androidTestImplementation libs.androidx.test.espresso.core
|
||||
|
||||
@@ -27,6 +27,9 @@ android {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
benchmark {
|
||||
initWith release
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
incremental true
|
||||
@@ -40,6 +43,22 @@ android {
|
||||
freeCompilerArgs += ["-Xstring-concat=inline"]
|
||||
jvmTarget = '17'
|
||||
}
|
||||
flavorDimensions = ["app"]
|
||||
productFlavors {
|
||||
dev {
|
||||
dimension "app"
|
||||
}
|
||||
qa {
|
||||
isDefault true
|
||||
dimension "app"
|
||||
}
|
||||
mock {
|
||||
dimension "app"
|
||||
}
|
||||
prod {
|
||||
dimension "app"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
@@ -31,6 +31,9 @@ android {
|
||||
minifyEnabled true
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
benchmark {
|
||||
initWith release
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
incremental true
|
||||
@@ -49,6 +52,22 @@ android {
|
||||
excludes += ['META-INF']
|
||||
}
|
||||
}
|
||||
flavorDimensions = ["app"]
|
||||
productFlavors {
|
||||
dev {
|
||||
dimension "app"
|
||||
}
|
||||
qa {
|
||||
isDefault true
|
||||
dimension "app"
|
||||
}
|
||||
mock {
|
||||
dimension "app"
|
||||
}
|
||||
prod {
|
||||
dimension "app"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
@@ -31,6 +31,9 @@ android {
|
||||
minifyEnabled true
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
benchmark {
|
||||
initWith release
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_17
|
||||
@@ -48,6 +51,22 @@ android {
|
||||
excludes += ['META-INF']
|
||||
}
|
||||
}
|
||||
flavorDimensions = ["app"]
|
||||
productFlavors {
|
||||
dev {
|
||||
dimension "app"
|
||||
}
|
||||
qa {
|
||||
isDefault true
|
||||
dimension "app"
|
||||
}
|
||||
mock {
|
||||
dimension "app"
|
||||
}
|
||||
prod {
|
||||
dimension "app"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
@@ -30,6 +30,9 @@ android {
|
||||
minifyEnabled true
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
benchmark {
|
||||
initWith release
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
incremental true
|
||||
|
||||
@@ -20,6 +20,25 @@ android {
|
||||
minifyEnabled true
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
benchmark {
|
||||
initWith release
|
||||
}
|
||||
}
|
||||
flavorDimensions = ["app"]
|
||||
productFlavors {
|
||||
dev {
|
||||
dimension "app"
|
||||
}
|
||||
qa {
|
||||
isDefault true
|
||||
dimension "app"
|
||||
}
|
||||
mock {
|
||||
dimension "app"
|
||||
}
|
||||
prod {
|
||||
dimension "app"
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_17
|
||||
|
||||
@@ -30,6 +30,9 @@ android {
|
||||
minifyEnabled true
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
benchmark {
|
||||
initWith release
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_17
|
||||
|
||||
@@ -28,6 +28,9 @@ android {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
benchmark {
|
||||
initWith release
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_17
|
||||
@@ -40,6 +43,22 @@ android {
|
||||
freeCompilerArgs += ["-Xstring-concat=inline"]
|
||||
jvmTarget = '17'
|
||||
}
|
||||
flavorDimensions = ["app"]
|
||||
productFlavors {
|
||||
dev {
|
||||
dimension "app"
|
||||
}
|
||||
qa {
|
||||
isDefault true
|
||||
dimension "app"
|
||||
}
|
||||
mock {
|
||||
dimension "app"
|
||||
}
|
||||
prod {
|
||||
dimension "app"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
@@ -60,6 +79,8 @@ dependencies {
|
||||
|
||||
debugImplementation libs.chucker.library
|
||||
|
||||
benchmarkImplementation libs.chucker.libraryNoOp
|
||||
|
||||
releaseImplementation libs.chucker.libraryNoOp
|
||||
|
||||
androidTestImplementation libs.androidx.test.espresso.core
|
||||
|
||||
@@ -30,6 +30,9 @@ android {
|
||||
minifyEnabled true
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
benchmark {
|
||||
initWith release
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
incremental true
|
||||
@@ -51,6 +54,22 @@ android {
|
||||
testOptions {
|
||||
unitTests.returnDefaultValues = true
|
||||
}
|
||||
flavorDimensions = ["app"]
|
||||
productFlavors {
|
||||
dev {
|
||||
dimension "app"
|
||||
}
|
||||
qa {
|
||||
isDefault true
|
||||
dimension "app"
|
||||
}
|
||||
mock {
|
||||
dimension "app"
|
||||
}
|
||||
prod {
|
||||
dimension "app"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
@@ -26,6 +26,9 @@ android {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
benchmark {
|
||||
initWith release
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
incremental true
|
||||
@@ -36,6 +39,22 @@ android {
|
||||
freeCompilerArgs += ["-Xstring-concat=inline"]
|
||||
jvmTarget = '17'
|
||||
}
|
||||
flavorDimensions = ["app"]
|
||||
productFlavors {
|
||||
dev {
|
||||
dimension "app"
|
||||
}
|
||||
qa {
|
||||
isDefault true
|
||||
dimension "app"
|
||||
}
|
||||
mock {
|
||||
dimension "app"
|
||||
}
|
||||
prod {
|
||||
dimension "app"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
@@ -27,6 +27,9 @@ android {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
benchmark {
|
||||
initWith release
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
incremental true
|
||||
@@ -40,6 +43,22 @@ android {
|
||||
freeCompilerArgs += ["-Xstring-concat=inline"]
|
||||
jvmTarget = '17'
|
||||
}
|
||||
flavorDimensions = ["app"]
|
||||
productFlavors {
|
||||
dev {
|
||||
dimension "app"
|
||||
}
|
||||
qa {
|
||||
isDefault true
|
||||
dimension "app"
|
||||
}
|
||||
mock {
|
||||
dimension "app"
|
||||
}
|
||||
prod {
|
||||
dimension "app"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
@@ -28,6 +28,9 @@ android {
|
||||
proguardFiles 'proguard-rules-dynamic-features.pro'
|
||||
shrinkResources false
|
||||
}
|
||||
benchmark {
|
||||
initWith release
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
incremental true
|
||||
@@ -63,9 +66,15 @@ android {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation project(':app')
|
||||
implementation project(":navi-common")
|
||||
implementation project(":navi-hl")
|
||||
implementation project(':app'), {
|
||||
exclude group: 'io.github.aakira', module: 'napier'
|
||||
}
|
||||
implementation project(":navi-common"), {
|
||||
exclude group: 'io.github.aakira', module: 'napier'
|
||||
}
|
||||
implementation project(":navi-hl"), {
|
||||
exclude group: 'io.github.aakira', module: 'napier'
|
||||
}
|
||||
implementation libs.androidx.constraintlayout
|
||||
implementation libs.androidx.fragment.ktx
|
||||
implementation libs.androidx.legacy.support.v4
|
||||
|
||||
@@ -25,6 +25,9 @@ android {
|
||||
proguardFiles 'proguard-rules.pro'
|
||||
shrinkResources false
|
||||
}
|
||||
benchmark {
|
||||
initWith release
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
incremental true
|
||||
@@ -57,10 +60,18 @@ android {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation project(":app")
|
||||
implementation project(":navi-chat")
|
||||
implementation project(":navi-common")
|
||||
implementation project(':navi-vkyc')
|
||||
implementation project(":app"), {
|
||||
exclude group: 'io.github.aakira', module: 'napier'
|
||||
}
|
||||
implementation project(":navi-chat"), {
|
||||
exclude group: 'io.github.aakira', module: 'napier'
|
||||
}
|
||||
implementation project(":navi-common"), {
|
||||
exclude group: 'io.github.aakira', module: 'napier'
|
||||
}
|
||||
implementation project(':navi-vkyc'), {
|
||||
exclude group: 'io.github.aakira', module: 'napier'
|
||||
}
|
||||
implementation libs.android.material
|
||||
implementation libs.androidx.appcompat
|
||||
implementation libs.androidx.core.ktx
|
||||
|
||||
@@ -38,6 +38,7 @@ include ':npci-upi-cl'
|
||||
include ':navi-ap'
|
||||
include ':navi-mqtt'
|
||||
include ':react-native-code-push'
|
||||
include ':benchmark'
|
||||
|
||||
project(':navi-ap').projectDir = new File(settingsDir, './application-platform/navi-ap')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user