diff --git a/README.md b/README.md
index 9f9c5373..a14abead 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,12 @@
> Please, consider using it for fun, and not for real password management. (until, we officially
> release a stable release)
>
-> Cuz, **`data is stored unencrypted`.. we planning to add encryption soon.**
+> Cuz, **`data is stored unencrypted`.. we're planning to add encryption soon.**
+
+> [!NOTE]
+> Currently, we are android-only, we will soon provide support for desktop (windows-only) using kotlin-multiplatform. but development will remain to android-first.
+>
+> then later-after will migrate to react-native and then passcodes will be multiplatform rather than being android-first. more information will be given in docs soon.
diff --git a/autofill/build.gradle.kts b/autofill/build.gradle.kts
index a52bb00a..8642b362 100644
--- a/autofill/build.gradle.kts
+++ b/autofill/build.gradle.kts
@@ -53,7 +53,6 @@ dependencies {
implementation(libs.material)
// Data/Persistence (Room Bundle)
- ksp(libs.room.compiler)
implementation(libs.room.ktx)
implementation(libs.coroutines.core)
diff --git a/build.gradle.kts b/build.gradle.kts
index e0de4eee..78c94d46 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -7,6 +7,7 @@ plugins {
alias(libs.plugins.androidKmpLibrary) apply false
alias(libs.plugins.kotlinSerialization) apply false
alias(libs.plugins.ksp) apply false
+ alias (libs.plugins.androidx.room) apply false
alias(libs.plugins.ossLicenses) apply false
}
diff --git a/database/README.md b/database/README.md
new file mode 100644
index 00000000..7bb4d517
--- /dev/null
+++ b/database/README.md
@@ -0,0 +1,5 @@
+# Test Notice.
+
+All the database code will be tested in android context. meaning, all migration and things will be tested based on android platform. as we are android first. and to some extent android-only.
+
+This is also true cuz, room migration are hard to test on every platform. there is no convenient way to test room migration for all platform.
diff --git a/database/build.gradle.kts b/database/build.gradle.kts
index c13c7b2d..5238b18c 100644
--- a/database/build.gradle.kts
+++ b/database/build.gradle.kts
@@ -1,77 +1,66 @@
-import org.jetbrains.kotlin.gradle.dsl.JvmTarget
+import org.gradle.kotlin.dsl.provideDelegate
plugins {
- alias(libs.plugins.androidLibrary)
+ alias(libs.plugins.kotlinMultiplatform)
+ alias(libs.plugins.androidKmpLibrary)
alias(libs.plugins.ksp)
+ alias (libs.plugins.androidx.room)
}
kotlin {
- compilerOptions {
- jvmTarget = JvmTarget.JVM_21
- }
-}
-
-android {
- namespace = "com.jeeldobariya.passcodes.database"
- compileSdk {
- version = release(36)
- }
-
- defaultConfig {
+ android {
+ compileSdk = 36
minSdk = 26
+ namespace = "com.jeeldobariya.passcodes.database"
+ experimentalProperties["android.experimental.kmp.enableAndroidResources"] = true
- testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
- consumerProguardFiles("consumer-rules.pro")
- }
+ withHostTest {
+ isIncludeAndroidResources = true
+ }
- sourceSets {
- getByName("androidTest") {
- assets.directories += "$projectDir/schemas"
+ // Opt-in to enable and configure device-side (instrumented) tests
+ withDeviceTest {
+ instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+ execution = "HOST"
}
}
- buildTypes {
- getByName("release") {
- isMinifyEnabled = false
+ sourceSets {
+ androidMain.dependencies {
+ implementation(libs.koin)
}
- create("staging") {
- isMinifyEnabled = false
+ getByName("androidDeviceTest").dependencies {
+ implementation(libs.bundles.unit.test)
+ implementation(libs.androidx.junit)
+ implementation(libs.androidx.junit.ktx)
+ implementation(libs.androidx.runner)
+ implementation(libs.coroutines.test)
+ implementation(libs.androidx.room.testing)
}
- getByName("debug") {
- isMinifyEnabled = false
+ commonMain.dependencies {
+ // Coroutines
+ implementation(libs.bundles.coroutines)
+
+ // Room
+ implementation(libs.androidx.room.runtime)
+ implementation(libs.sqlite.bundled)
+
+ // Dependency Injection
+ implementation(libs.koin)
}
- }
- compileOptions {
- sourceCompatibility = JavaVersion.VERSION_21
- targetCompatibility = JavaVersion.VERSION_21
+ commonTest.dependencies {
+ implementation(kotlin("test"))
+ }
}
+}
- ksp {
- val location = "$projectDir/schemas"
- arg("room.schemaLocation", location)
- }
+room {
+ schemaDirectory("$projectDir/schemas")
}
dependencies {
- implementation(libs.androidx.core.ktx)
-
- // Data/Persistence (Room Bundle)
- ksp(libs.room.compiler)
- implementation(libs.room.ktx)
-
- // Concurrency (Coroutines Bundle)
- implementation(libs.bundles.coroutines)
-
- // Dependency Injection
- implementation(libs.koin)
-
- androidTestImplementation(libs.bundles.unit.test)
- androidTestImplementation(libs.androidx.junit)
- androidTestImplementation(libs.androidx.junit.ktx)
- androidTestImplementation(libs.androidx.runner)
- androidTestImplementation(libs.coroutines.test)
- androidTestImplementation(libs.room.testing)
+ add("kspAndroid", libs.androidx.room.compiler)
}
diff --git a/database/src/androidTest/kotlin/com/jeeldobariya/passcodes/database/master/MasterDatabasePasswordsDaoTest.kt b/database/src/androidDeviceTest/kotlin/com/jeeldobariya/passcodes/database/master/MasterDatabasePasswordsDaoTest.kt
similarity index 98%
rename from database/src/androidTest/kotlin/com/jeeldobariya/passcodes/database/master/MasterDatabasePasswordsDaoTest.kt
rename to database/src/androidDeviceTest/kotlin/com/jeeldobariya/passcodes/database/master/MasterDatabasePasswordsDaoTest.kt
index 4b33827f..c0873258 100644
--- a/database/src/androidTest/kotlin/com/jeeldobariya/passcodes/database/master/MasterDatabasePasswordsDaoTest.kt
+++ b/database/src/androidDeviceTest/kotlin/com/jeeldobariya/passcodes/database/master/MasterDatabasePasswordsDaoTest.kt
@@ -3,20 +3,17 @@ package com.jeeldobariya.passcodes.database.master
import android.content.Context
import androidx.room.Room
import androidx.test.core.app.ApplicationProvider
-import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.test.runTest
import org.junit.After
import org.junit.Before
import org.junit.Test
-import org.junit.runner.RunWith
import java.io.IOException
/**
* Instrumented test for the Room database, specifically testing the PasswordsDao.
*/
-@RunWith(AndroidJUnit4::class)
class MasterDatabasePasswordsDaoTest {
private lateinit var passwordsDao: PasswordsDao
diff --git a/database/src/androidTest/kotlin/com/jeeldobariya/passcodes/database/master/migration/Migration_1_2_Test.kt b/database/src/androidDeviceTest/kotlin/com/jeeldobariya/passcodes/database/master/migration/Migration_1_2_Test.kt
similarity index 79%
rename from database/src/androidTest/kotlin/com/jeeldobariya/passcodes/database/master/migration/Migration_1_2_Test.kt
rename to database/src/androidDeviceTest/kotlin/com/jeeldobariya/passcodes/database/master/migration/Migration_1_2_Test.kt
index a3ddad69..7831765e 100644
--- a/database/src/androidTest/kotlin/com/jeeldobariya/passcodes/database/master/migration/Migration_1_2_Test.kt
+++ b/database/src/androidDeviceTest/kotlin/com/jeeldobariya/passcodes/database/master/migration/Migration_1_2_Test.kt
@@ -12,8 +12,6 @@ import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class MasterDatabaseMigration1To2Test {
- private val TEST_DB = "migration-1-2-test"
-
@get:Rule
val helper = MigrationTestHelper(
InstrumentationRegistry.getInstrumentation(),
@@ -22,7 +20,9 @@ class MasterDatabaseMigration1To2Test {
@Test
fun migrate_basicData() {
- helper.createDatabase(TEST_DB, 1).apply {
+ val dbName = "test_db_migrate_basicData"
+
+ helper.createDatabase(dbName, 1).apply {
execSQL("""
INSERT INTO passwords (id, domain, username, password, notes)
VALUES (1, 'example.com', 'user', 'pass', 'note')
@@ -31,7 +31,7 @@ class MasterDatabaseMigration1To2Test {
}
val migratedDb = helper.runMigrationsAndValidate(
- TEST_DB, 2, true, MIGRATION_1_2
+ dbName, 2, true, MIGRATION_1_2
)
val cursor = migratedDb.query("SELECT * FROM passwords")
@@ -41,7 +41,9 @@ class MasterDatabaseMigration1To2Test {
@Test
fun migrate_emptyNotes_becomesNull() {
- helper.createDatabase(TEST_DB, 1).apply {
+ val dbName = "test_db_migrate_emptyNotes_becomesNull"
+
+ helper.createDatabase(dbName, 1).apply {
execSQL("""
INSERT INTO passwords (id, domain, username, password, notes)
VALUES (1, 'd', 'u', 'p', '')
@@ -49,7 +51,7 @@ class MasterDatabaseMigration1To2Test {
close()
}
- val db = helper.runMigrationsAndValidate(TEST_DB, 2, true, MIGRATION_1_2)
+ val db = helper.runMigrationsAndValidate(dbName, 2, true, MIGRATION_1_2)
val cursor = db.query("SELECT notes FROM passwords WHERE id = 1")
cursor.moveToFirst()
@@ -61,7 +63,9 @@ class MasterDatabaseMigration1To2Test {
@Test
fun migrate_urlGenerated() {
- helper.createDatabase(TEST_DB, 1).apply {
+ val dbName = "test_db_migrate_urlGenerated"
+
+ helper.createDatabase(dbName, 1).apply {
execSQL("""
INSERT INTO passwords (id, domain, username, password, notes)
VALUES (1, 'google.com', 'u', 'p', 'n')
@@ -69,7 +73,7 @@ class MasterDatabaseMigration1To2Test {
close()
}
- val db = helper.runMigrationsAndValidate(TEST_DB, 2, true, MIGRATION_1_2)
+ val db = helper.runMigrationsAndValidate(dbName, 2, true, MIGRATION_1_2)
val cursor = db.query("SELECT url FROM passwords WHERE id = 1")
cursor.moveToFirst()
diff --git a/database/src/androidMain/kotlin/com/jeeldobariya/passcodes/database/di/DatabaseModule.android.kt b/database/src/androidMain/kotlin/com/jeeldobariya/passcodes/database/di/DatabaseModule.android.kt
new file mode 100644
index 00000000..b3361be0
--- /dev/null
+++ b/database/src/androidMain/kotlin/com/jeeldobariya/passcodes/database/di/DatabaseModule.android.kt
@@ -0,0 +1,26 @@
+package com.jeeldobariya.passcodes.database.di
+
+import androidx.room.Room
+import com.jeeldobariya.passcodes.database.master.MasterDatabase
+import org.koin.android.ext.koin.androidContext
+import org.koin.dsl.module
+
+actual val databaseModule = module {
+ single {
+ MasterDatabase.createNewDatabase(
+ getDatabaseBuilder = {
+ val appContext = androidContext()
+ val dbFile = appContext.getDatabasePath("master.db")
+
+ Room.databaseBuilder(
+ context = appContext,
+ name = dbFile.absolutePath
+ )
+ }
+ )
+ }
+
+ single {
+ get().passwordsDao
+ }
+}
diff --git a/database/src/commonMain/kotlin/com/jeeldobariya/passcodes/database/di/DatabaseModule.kt b/database/src/commonMain/kotlin/com/jeeldobariya/passcodes/database/di/DatabaseModule.kt
new file mode 100644
index 00000000..408ce0a4
--- /dev/null
+++ b/database/src/commonMain/kotlin/com/jeeldobariya/passcodes/database/di/DatabaseModule.kt
@@ -0,0 +1,6 @@
+package com.jeeldobariya.passcodes.database.di
+
+import org.koin.core.module.Module
+
+
+expect val databaseModule: Module
diff --git a/database/src/commonMain/kotlin/com/jeeldobariya/passcodes/database/master/MasterDatabase.kt b/database/src/commonMain/kotlin/com/jeeldobariya/passcodes/database/master/MasterDatabase.kt
new file mode 100644
index 00000000..2ba85667
--- /dev/null
+++ b/database/src/commonMain/kotlin/com/jeeldobariya/passcodes/database/master/MasterDatabase.kt
@@ -0,0 +1,35 @@
+package com.jeeldobariya.passcodes.database.master
+
+// import android.content.Context
+import androidx.room.ConstructedBy
+import androidx.room.Database
+import androidx.room.RoomDatabase
+import androidx.room.RoomDatabaseConstructor
+import androidx.sqlite.driver.bundled.BundledSQLiteDriver
+import com.jeeldobariya.passcodes.database.master.migration.MIGRATION_1_2
+
+@Database(
+ entities = [PasswordEntity::class],
+ version = 2,
+ exportSchema = true
+)
+@ConstructedBy(MasterDatabaseConstructor::class)
+abstract class MasterDatabase : RoomDatabase() {
+ abstract val passwordsDao: PasswordsDao
+
+ companion object {
+ fun createNewDatabase(
+ getDatabaseBuilder: () -> Builder
+ ): MasterDatabase {
+ return getDatabaseBuilder()
+ .setDriver(BundledSQLiteDriver())
+ .addMigrations(MIGRATION_1_2)
+ .build()
+ }
+ }
+}
+
+@Suppress("KotlinNoActualForExpect")
+expect object MasterDatabaseConstructor : RoomDatabaseConstructor {
+ override fun initialize(): MasterDatabase
+}
diff --git a/database/src/main/kotlin/com/jeeldobariya/passcodes/database/master/PasswordEntity.kt b/database/src/commonMain/kotlin/com/jeeldobariya/passcodes/database/master/PasswordEntity.kt
similarity index 95%
rename from database/src/main/kotlin/com/jeeldobariya/passcodes/database/master/PasswordEntity.kt
rename to database/src/commonMain/kotlin/com/jeeldobariya/passcodes/database/master/PasswordEntity.kt
index 84bf4197..6a710f39 100644
--- a/database/src/main/kotlin/com/jeeldobariya/passcodes/database/master/PasswordEntity.kt
+++ b/database/src/commonMain/kotlin/com/jeeldobariya/passcodes/database/master/PasswordEntity.kt
@@ -5,7 +5,8 @@ import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity(tableName = "passwords")
-data class PasswordEntity(
+data class
+PasswordEntity(
@PrimaryKey(autoGenerate = true)
val id: Int = 0,
var domain: String,
@@ -18,4 +19,4 @@ data class PasswordEntity(
var createdAt: String? = null,
@ColumnInfo(name = "updated_at", defaultValue = "CURRENT_TIMESTAMP")
var updatedAt: String? = null
-)
+)
\ No newline at end of file
diff --git a/database/src/main/kotlin/com/jeeldobariya/passcodes/database/master/PasswordsDao.kt b/database/src/commonMain/kotlin/com/jeeldobariya/passcodes/database/master/PasswordsDao.kt
similarity index 100%
rename from database/src/main/kotlin/com/jeeldobariya/passcodes/database/master/PasswordsDao.kt
rename to database/src/commonMain/kotlin/com/jeeldobariya/passcodes/database/master/PasswordsDao.kt
diff --git a/database/src/main/kotlin/com/jeeldobariya/passcodes/database/master/migration/Migration_1_2.kt b/database/src/commonMain/kotlin/com/jeeldobariya/passcodes/database/master/migration/Migration_1_2.kt
similarity index 100%
rename from database/src/main/kotlin/com/jeeldobariya/passcodes/database/master/migration/Migration_1_2.kt
rename to database/src/commonMain/kotlin/com/jeeldobariya/passcodes/database/master/migration/Migration_1_2.kt
diff --git a/database/src/main/AndroidManifest.xml b/database/src/main/AndroidManifest.xml
deleted file mode 100644
index e1000761..00000000
--- a/database/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/database/src/main/kotlin/com/jeeldobariya/passcodes/database/di/DatabaseModule.kt b/database/src/main/kotlin/com/jeeldobariya/passcodes/database/di/DatabaseModule.kt
deleted file mode 100644
index 38b2005c..00000000
--- a/database/src/main/kotlin/com/jeeldobariya/passcodes/database/di/DatabaseModule.kt
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.jeeldobariya.passcodes.database.di
-
-import com.jeeldobariya.passcodes.database.master.MasterDatabase
-import org.koin.android.ext.koin.androidContext
-import org.koin.dsl.module
-
-val databaseModule = module {
- single {
- MasterDatabase.createNewDatabase(androidContext())
- }
-
- single {
- get().passwordsDao
- }
-}
diff --git a/database/src/main/kotlin/com/jeeldobariya/passcodes/database/master/MasterDatabase.kt b/database/src/main/kotlin/com/jeeldobariya/passcodes/database/master/MasterDatabase.kt
deleted file mode 100644
index c12973e4..00000000
--- a/database/src/main/kotlin/com/jeeldobariya/passcodes/database/master/MasterDatabase.kt
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.jeeldobariya.passcodes.database.master
-
-import android.content.Context
-import androidx.room.Database
-import androidx.room.Room
-import androidx.room.RoomDatabase
-import com.jeeldobariya.passcodes.database.master.migration.MIGRATION_1_2
-
-@Database(
- entities = [PasswordEntity::class],
- version = 2,
- exportSchema = true
-)
-abstract class MasterDatabase : RoomDatabase() {
- abstract val passwordsDao: PasswordsDao
-
- companion object {
- fun createNewDatabase(context: Context): MasterDatabase {
- return Room.databaseBuilder(
- context = context,
- klass = MasterDatabase::class.java,
- name = "master"
- )
- .addMigrations(MIGRATION_1_2)
- .build()
- }
- }
-}
diff --git a/design_system/build.gradle.kts b/design_system/build.gradle.kts
index 4a266d94..565d45a4 100644
--- a/design_system/build.gradle.kts
+++ b/design_system/build.gradle.kts
@@ -30,6 +30,7 @@ kotlin {
// implementation(compose.preview)
// implementation(libs.androidx.activity.compose)
// }
+
commonMain.dependencies {
implementation(compose.runtime)
implementation(compose.foundation)
@@ -37,12 +38,15 @@ kotlin {
implementation(compose.ui)
implementation(compose.components.resources)
implementation(compose.preview)
+
// implementation(libs.androidx.lifecycle.viewmodelCompose)
// implementation(libs.androidx.lifecycle.runtimeCompose)
}
+
// commonTest.dependencies {
// implementation(libs.kotlin.test)
// }
+
// val desktopMain by getting
// desktopMain.dependencies {
// implementation(compose.desktop.currentOs)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index fbf7b1e3..65eaf0d1 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -8,6 +8,7 @@ okhttp = "5.3.2"
oss-license = "17.4.0"
appcompat = "1.7.1"
room = "2.8.4"
+sqlite = "2.6.2"
json = "20251224"
junit = "4.13.2"
truth = "1.4.5"
@@ -15,9 +16,9 @@ runner = "1.7.0"
androidx-junit = "1.3.0"
coroutines = "1.10.2"
lifecycle = "2.10.0"
-koin = "4.1.1"
-composeMultiplatform = "1.10.2"
-composeBom = "2026.03.00"
+koin = "4.2.0"
+composeMultiplatform = "1.10.3"
+composeBom = "2026.03.01"
compose-activity = "1.13.0"
compose-viewmodel = "2.10.0"
datastorePreferences = "1.2.1"
@@ -26,9 +27,8 @@ kotlinSerializationJson = "1.10.0"
# Plugin versions
agp = "9.1.0"
ksp = "2.3.6"
-kotlin = "2.3.10"
-oss-license-plugin = "0.10.10" # Always update also in settings.gradle.kts
-
+kotlin = "2.3.20"
+oss-license-plugin = "0.11.0" # Always update also in settings.gradle.kts
@@ -67,8 +67,10 @@ kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serializa
# Room
room-ktx = { module = "androidx.room:room-ktx", version.ref = "room" }
-room-compiler = { module = "androidx.room:room-compiler", version.ref = "room" }
-room-testing = { module = "androidx.room:room-testing", version.ref = "room" }
+androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "room" }
+androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "room" }
+sqlite-bundled = { module = "androidx.sqlite:sqlite-bundled", version.ref = "sqlite" }
+androidx-room-testing = { module = "androidx.room:room-testing", version.ref = "room" }
# Networking
okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" }
@@ -90,6 +92,7 @@ koin-compose = { module = "io.insert-koin:koin-androidx-compose", version.ref =
json = { module = "org.json:json", version.ref = "json" }
# Testing
+kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
junit = { module = "junit:junit", version.ref = "junit" }
truth = { module = "com.google.truth:truth", version.ref = "truth" }
androidx-runner = { module = "androidx.test:runner", version.ref = "runner" }
@@ -128,5 +131,7 @@ composeCompiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "k
kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
androidKmpLibrary = { id = "com.android.kotlin.multiplatform.library", version.ref = "agp" }
kotlinSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
+androidx-room = { id = "androidx.room", version.ref = "room" }
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
ossLicenses = { id = "com.google.android.gms.oss-licenses-plugin", version.ref = "oss-license-plugin" }
+
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index dbc3ce4a..c61a118f 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.0-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/gradlew b/gradlew
index 0262dcbd..739907df 100755
--- a/gradlew
+++ b/gradlew
@@ -57,7 +57,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
-# https://github.com/gradle/gradle/blob/b631911858264c0b6e4d6603d677ff5218766cee/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# https://github.com/gradle/gradle/blob/2d6327017519d23b96af35865dc997fcb544fb40/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
diff --git a/settings.gradle.kts b/settings.gradle.kts
index dc3db62a..0d8a09e7 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -7,7 +7,7 @@ pluginManagement {
resolutionStrategy {
eachPlugin {
if (requested.id.id == "com.google.android.gms.oss-licenses-plugin") {
- useModule("com.google.android.gms:oss-licenses-plugin:0.10.10")
+ useModule("com.google.android.gms:oss-licenses-plugin:0.11.0")
}
}
}
@@ -31,3 +31,4 @@ include(":password_manager")
// Define root project name
rootProject.name = "Passcodes"
+