TP-61425 | Girish Suragani | Setup Macro Benchmarking and Baseline pr… (#10183)

This commit is contained in:
Girish Suragani
2024-03-29 16:09:39 +05:30
committed by GitHub
parent 869e2a40ce
commit 56006c20df
36 changed files with 52261 additions and 33456 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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
View File

@@ -0,0 +1 @@
/build

View 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"
}
}

View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest />

View File

@@ -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()
}
}

View File

@@ -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()
}
}

View File

@@ -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()
}
}

View File

@@ -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()
}

View File

@@ -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,
}

View File

@@ -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)
}

View 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

View File

@@ -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

View File

@@ -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" }

View File

@@ -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 {

View File

@@ -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

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -30,6 +30,9 @@ android {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
benchmark {
initWith release
}
}
compileOptions {
incremental true

View File

@@ -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

View File

@@ -30,6 +30,9 @@ android {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
benchmark {
initWith release
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17

View File

@@ -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

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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

View File

@@ -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

View File

@@ -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')