From b9e2c1c58f4c48c630c5fa69ee3cfc47fef744f4 Mon Sep 17 00:00:00 2001 From: Pavel Holoborodko Date: Sun, 9 Nov 2025 22:01:03 +0900 Subject: [PATCH 01/18] Resolves #185 and adds few improvements to the android/build script. --- android/build.gradle | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 4ebb9814..92e7a0f0 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -6,13 +6,13 @@ plugins { } android { - compileSdkVersion 33 + compileSdk 33 buildToolsVersion "33.0.1" defaultConfig { applicationId "org.ergoplatform.android" - minSdkVersion 24 - targetSdkVersion 33 + minSdk 24 + targetSdk 33 versionCode 2305 versionName "2.4.2305" @@ -21,6 +21,7 @@ android { buildFeatures { compose true + viewBinding true } buildTypes { @@ -51,10 +52,6 @@ android { } } - buildFeatures { - viewBinding true - } - compileOptions { coreLibraryDesugaringEnabled true sourceCompatibility JavaVersion.VERSION_1_8 @@ -62,11 +59,11 @@ android { } kotlinOptions { jvmTarget = '1.8' + freeCompilerArgs += '-opt-in=kotlin.RequiresOptIn' } composeOptions { kotlinCompilerExtensionVersion compose_version - kotlinCompilerVersion kotlin_version } } From 9796fc10cca20a8cdc62ee052817db81bc083529 Mon Sep 17 00:00:00 2001 From: Pavel Holoborodko Date: Sun, 9 Nov 2025 22:04:52 +0900 Subject: [PATCH 02/18] Fixed the incorrect reference to mosaik version in main build script --- build.gradle | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 885ac50e..a06bb344 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { ext.robovm_version = "2.3.19" ext.sqldelight_version = "1.5.3" ext.coroutines_version = "1.6.0" - ext.mosaik_version = "2.0.2" + ext.mosaik_version = "v2.0.2" ext.compose_version = "1.1.0" ext.mockito_version = "4.0.0" ext.junit_version = "4.13.2" @@ -31,9 +31,8 @@ allprojects { mavenLocal() mavenCentral() maven { url 'https://jitpack.io' } - maven { - url = "https://oss.sonatype.org/content/repositories/snapshots/" - } + maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } + maven { url 'https://s01.oss.sonatype.org/content/repositories/snapshots/' } } } From d8d36e850625df4fc0e9630635a76b6f69abf937 Mon Sep 17 00:00:00 2001 From: Pavel Holoborodko Date: Sun, 9 Nov 2025 22:09:59 +0900 Subject: [PATCH 03/18] Fixed ergo-appkit dependency in common-jvm/buid script. Newer version, switch to Java 1.8 The ergo-appkit_2.11:5.0.3 requires few changes to code for compatibility. --- common-jvm/build.gradle | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/common-jvm/build.gradle b/common-jvm/build.gradle index e8bee8a6..9804bfef 100644 --- a/common-jvm/build.gradle +++ b/common-jvm/build.gradle @@ -4,33 +4,42 @@ plugins { } java { - sourceCompatibility = JavaVersion.VERSION_1_7 - targetCompatibility = JavaVersion.VERSION_1_7 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 +} + +tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { + kotlinOptions { + jvmTarget = "1.8" + freeCompilerArgs += '-opt-in=kotlin.RequiresOptIn' + } } dependencies { - api('org.ergoplatform:ergo-appkit_2.11:develop-44fddd97-SNAPSHOT') { + api('org.ergoplatform:ergo-appkit_2.11:5.0.3') { exclude group: 'org.bouncycastle', module: 'bcprov-jdk15on' exclude group: 'org.bitbucket.inkytonik.kiama', module: 'kiama_2.11' exclude group: 'com.google.guava', module: 'guava' } - // kiama needs an own build for JRE7 compatibility + + // Custom Kiama - should work fine on Java 8 api ('com.github.MrStahlfelge.kiama:core_2.11:2.1.1') { exclude group: 'com.google.guava', module: 'guava' } api ('com.github.MrStahlfelge.kiama:library_2.11:2.1.1') { exclude group: 'com.google.guava', module: 'guava' } - // stick to 20 for JRE7 compatibility + + // Guava 20 works with Java 8 (could upgrade later if needed) api "com.google.guava:guava:20.0" + + // BouncyCastle - this version supports Java 8 api "org.bouncycastle:bcprov-jdk15to18:1.66" - + api "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:$coroutines_version" - - // Mosaik runtime api "com.github.MrStahlfelge.mosaik:common-runtime:$mosaik_version" api "com.github.MrStahlfelge.mosaik:clientconnector-okhttp:$mosaik_version" - + testImplementation "junit:junit:$junit_version" testImplementation "org.mockito.kotlin:mockito-kotlin:$mockito_version" testImplementation "com.squareup.okhttp3:mockwebserver:3.12.0" From a4dc4eab1202d5e6798f97f191f4e7954b7f070b Mon Sep 17 00:00:00 2001 From: Pavel Holoborodko Date: Sun, 9 Nov 2025 22:16:10 +0900 Subject: [PATCH 04/18] Updates for compatibility with ergo-appkit_2.11:5.0.3 and minor changes to minimize compiler warnings --- .../settings/DisplayCurrencyListDialogFragment.kt | 2 +- .../transactions/SigningPromptDialogFragment.kt | 3 ++- .../android/ui/AbstractAuthenticationFragment.kt | 2 +- .../android/ui/PasswordDialogFragment.kt | 2 +- .../android/wallet/ConfirmCreateWalletFragment.kt | 2 +- .../android/wallet/CreateWalletViewModel.kt | 2 +- .../android/wallet/SaveWalletFragmentDialog.kt | 2 +- .../android/wallet/SaveWalletViewModel.kt | 2 +- common-compose/build.gradle.kts | 7 +++++++ .../src/main/java/org/ergoplatform/BabelFees.kt | 2 ++ .../src/main/java/org/ergoplatform/ErgoFacade.kt | 4 +++- .../src/main/java/org/ergoplatform/SigningSecrets.kt | 2 +- .../org/ergoplatform/api/AesEncryptionManager.java | 2 +- .../transactions/TransactionInfoUtils.kt | 12 +++++++++--- .../uilogic/transactions/SendFundsUiLogic.kt | 2 +- .../uilogic/wallet/ConfirmCreateWalletUiLogic.kt | 2 +- .../ergoplatform/uilogic/wallet/SaveWalletUiLogic.kt | 2 +- .../org/ergoplatform/api/AesEncryptionManagerTest.kt | 2 +- .../uilogic/wallet/SaveWalletUiLogicTest.kt | 2 +- desktop/build.gradle.kts | 7 +++++++ .../org/ergoplatform/desktop/ui/PasswordDialog.kt | 2 +- .../desktop/ui/navigation/ScreenConfig.kt | 2 +- .../desktop/wallet/ConfirmCreateWalletComponent.kt | 2 +- .../desktop/wallet/CreateWalletComponent.kt | 2 +- .../desktop/wallet/RestoreWalletComponent.kt | 2 +- .../desktop/wallet/SaveWalletComponent.kt | 2 +- ios/build.gradle | 7 +++++++ .../org/ergoplatform/ios/api/IosEncryptionManager.kt | 2 +- .../ergoplatform/ios/tokens/SendTokenEntryView.kt | 2 +- .../org/ergoplatform/ios/ui/AuthenticationFlow.kt | 2 +- .../ergoplatform/ios/ui/PasswordViewController.kt | 2 +- .../ios/wallet/ConfirmCreateWalletViewController.kt | 2 +- .../ios/wallet/CreateWalletViewController.kt | 2 +- .../ios/wallet/RestoreWalletViewController.kt | 2 +- .../ios/wallet/SaveWalletViewController.kt | 2 +- 35 files changed, 65 insertions(+), 33 deletions(-) diff --git a/android/src/main/java/org/ergoplatform/android/settings/DisplayCurrencyListDialogFragment.kt b/android/src/main/java/org/ergoplatform/android/settings/DisplayCurrencyListDialogFragment.kt index 4e52ca3a..94b72257 100644 --- a/android/src/main/java/org/ergoplatform/android/settings/DisplayCurrencyListDialogFragment.kt +++ b/android/src/main/java/org/ergoplatform/android/settings/DisplayCurrencyListDialogFragment.kt @@ -104,7 +104,7 @@ class DisplayCurrencyListDialogFragment : BottomSheetDialogFragment() { override fun onBindViewHolder(holder: ViewHolder, position: Int) { val currency = items.get(position) holder.text.text = - if (currency.isEmpty()) getString(R.string.label_none) else currency.toUpperCase( + if (currency.isEmpty()) getString(R.string.label_none) else currency.uppercase( Locale.getDefault() ) holder.text.setOnClickListener { onChooseCurrency(currency) } diff --git a/android/src/main/java/org/ergoplatform/android/transactions/SigningPromptDialogFragment.kt b/android/src/main/java/org/ergoplatform/android/transactions/SigningPromptDialogFragment.kt index 0c888a91..e0b9cf96 100644 --- a/android/src/main/java/org/ergoplatform/android/transactions/SigningPromptDialogFragment.kt +++ b/android/src/main/java/org/ergoplatform/android/transactions/SigningPromptDialogFragment.kt @@ -3,6 +3,7 @@ package org.ergoplatform.android.transactions import android.content.Intent import android.os.Bundle import android.os.Handler +import android.os.Looper import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -46,7 +47,7 @@ class SigningPromptDialogFragment : BottomSheetDialogFragment() { ViewPager2.OnPageChangeCallback() { override fun onPageSelected(position: Int) { super.onPageSelected(position) - Handler().post { refreshButtonState() } + Handler(Looper.getMainLooper()).post { refreshButtonState() } } }) binding.buttonScanSignedTx.setOnClickListener { diff --git a/android/src/main/java/org/ergoplatform/android/ui/AbstractAuthenticationFragment.kt b/android/src/main/java/org/ergoplatform/android/ui/AbstractAuthenticationFragment.kt index 1acb3fa6..34b22fe7 100644 --- a/android/src/main/java/org/ergoplatform/android/ui/AbstractAuthenticationFragment.kt +++ b/android/src/main/java/org/ergoplatform/android/ui/AbstractAuthenticationFragment.kt @@ -7,7 +7,7 @@ import org.ergoplatform.SigningSecrets import org.ergoplatform.android.R import org.ergoplatform.api.AesEncryptionManager import org.ergoplatform.api.AndroidEncryptionManager -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString import org.ergoplatform.persistance.ENC_TYPE_DEVICE import org.ergoplatform.persistance.ENC_TYPE_PASSWORD import org.ergoplatform.persistance.WalletConfig diff --git a/android/src/main/java/org/ergoplatform/android/ui/PasswordDialogFragment.kt b/android/src/main/java/org/ergoplatform/android/ui/PasswordDialogFragment.kt index 1f3bcb07..ee9fbc07 100644 --- a/android/src/main/java/org/ergoplatform/android/ui/PasswordDialogFragment.kt +++ b/android/src/main/java/org/ergoplatform/android/ui/PasswordDialogFragment.kt @@ -13,7 +13,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment import org.ergoplatform.URL_FORGOT_PASSWORD_HELP import org.ergoplatform.android.R import org.ergoplatform.android.databinding.FragmentPasswordDialogBinding -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString const val ARG_SHOW_CONFIRMATION = "ARG_SHOW_CONFIRMATION" diff --git a/android/src/main/java/org/ergoplatform/android/wallet/ConfirmCreateWalletFragment.kt b/android/src/main/java/org/ergoplatform/android/wallet/ConfirmCreateWalletFragment.kt index c2b8abc3..83f3b6b2 100644 --- a/android/src/main/java/org/ergoplatform/android/wallet/ConfirmCreateWalletFragment.kt +++ b/android/src/main/java/org/ergoplatform/android/wallet/ConfirmCreateWalletFragment.kt @@ -10,7 +10,7 @@ import org.ergoplatform.android.R import org.ergoplatform.android.databinding.FragmentConfirmCreateWalletBinding import org.ergoplatform.android.ui.FullScreenFragmentDialog import org.ergoplatform.android.ui.navigateSafe -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString import org.ergoplatform.uilogic.wallet.ConfirmCreateWalletUiLogic /** diff --git a/android/src/main/java/org/ergoplatform/android/wallet/CreateWalletViewModel.kt b/android/src/main/java/org/ergoplatform/android/wallet/CreateWalletViewModel.kt index 14897bb6..4e36218f 100644 --- a/android/src/main/java/org/ergoplatform/android/wallet/CreateWalletViewModel.kt +++ b/android/src/main/java/org/ergoplatform/android/wallet/CreateWalletViewModel.kt @@ -2,7 +2,7 @@ package org.ergoplatform.android.wallet import androidx.lifecycle.ViewModel import org.ergoplatform.appkit.Mnemonic -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString class CreateWalletViewModel : ViewModel() { private var _mnemonic: SecretString? = null diff --git a/android/src/main/java/org/ergoplatform/android/wallet/SaveWalletFragmentDialog.kt b/android/src/main/java/org/ergoplatform/android/wallet/SaveWalletFragmentDialog.kt index 31e5eecc..2b9a5811 100644 --- a/android/src/main/java/org/ergoplatform/android/wallet/SaveWalletFragmentDialog.kt +++ b/android/src/main/java/org/ergoplatform/android/wallet/SaveWalletFragmentDialog.kt @@ -22,7 +22,7 @@ import org.ergoplatform.android.databinding.FragmentSaveWalletDialogBinding import org.ergoplatform.android.ui.* import org.ergoplatform.api.AesEncryptionManager import org.ergoplatform.api.AndroidEncryptionManager -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString import org.ergoplatform.persistance.ENC_TYPE_DEVICE import org.ergoplatform.persistance.ENC_TYPE_PASSWORD diff --git a/android/src/main/java/org/ergoplatform/android/wallet/SaveWalletViewModel.kt b/android/src/main/java/org/ergoplatform/android/wallet/SaveWalletViewModel.kt index 8050c30a..62906f8b 100644 --- a/android/src/main/java/org/ergoplatform/android/wallet/SaveWalletViewModel.kt +++ b/android/src/main/java/org/ergoplatform/android/wallet/SaveWalletViewModel.kt @@ -10,7 +10,7 @@ import kotlinx.coroutines.launch import org.ergoplatform.ApiServiceManager import org.ergoplatform.android.AppDatabase import org.ergoplatform.android.Preferences -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString import org.ergoplatform.uilogic.wallet.SaveWalletUiLogic class SaveWalletViewModel : ViewModel() { diff --git a/common-compose/build.gradle.kts b/common-compose/build.gradle.kts index 1db42900..bbd6da89 100644 --- a/common-compose/build.gradle.kts +++ b/common-compose/build.gradle.kts @@ -10,6 +10,13 @@ java { targetCompatibility = JavaVersion.VERSION_1_8 } +tasks.withType { + kotlinOptions { + jvmTarget = "1.8" + freeCompilerArgs = freeCompilerArgs + "-opt-in=kotlin.RequiresOptIn" + } +} + dependencies { api(project(":common-jvm")) diff --git a/common-jvm/src/main/java/org/ergoplatform/BabelFees.kt b/common-jvm/src/main/java/org/ergoplatform/BabelFees.kt index 2be04781..9218c246 100644 --- a/common-jvm/src/main/java/org/ergoplatform/BabelFees.kt +++ b/common-jvm/src/main/java/org/ergoplatform/BabelFees.kt @@ -1,6 +1,8 @@ package org.ergoplatform import org.ergoplatform.appkit.* +import org.ergoplatform.sdk.ErgoToken +import org.ergoplatform.sdk.ErgoId import org.ergoplatform.appkit.babelfee.BabelFeeBoxContract import org.ergoplatform.appkit.babelfee.BabelFeeBoxState import org.ergoplatform.appkit.impl.ErgoTreeContract diff --git a/common-jvm/src/main/java/org/ergoplatform/ErgoFacade.kt b/common-jvm/src/main/java/org/ergoplatform/ErgoFacade.kt index 313f6163..7c291a94 100644 --- a/common-jvm/src/main/java/org/ergoplatform/ErgoFacade.kt +++ b/common-jvm/src/main/java/org/ergoplatform/ErgoFacade.kt @@ -2,9 +2,11 @@ package org.ergoplatform import org.ergoplatform.api.OkHttpSingleton import org.ergoplatform.appkit.* +import org.ergoplatform.sdk.ErgoToken import org.ergoplatform.appkit.babelfee.BabelFeeOperations import org.ergoplatform.appkit.impl.InputBoxImpl import org.ergoplatform.appkit.impl.UnsignedTransactionImpl +import org.ergoplatform.sdk.JavaHelpers import org.ergoplatform.explorer.client.model.TransactionInfo import org.ergoplatform.persistance.PreferencesProvider import org.ergoplatform.persistance.WalletToken @@ -15,7 +17,7 @@ import org.ergoplatform.utils.LogUtils import org.ergoplatform.utils.getMessageOrName import org.ergoplatform.wallet.boxes.`ErgoBoxSerializer$` import org.ergoplatform.wallet.mnemonic.WordList -import org.ergoplatform.wallet.secrets.ExtendedPublicKey +import org.ergoplatform.sdk.wallet.secrets.ExtendedPublicKey; import scala.collection.JavaConversions import sigmastate.interpreter.HintsBag import sigmastate.serialization.`SigmaSerializer$` diff --git a/common-jvm/src/main/java/org/ergoplatform/SigningSecrets.kt b/common-jvm/src/main/java/org/ergoplatform/SigningSecrets.kt index 292b262f..d286e6be 100644 --- a/common-jvm/src/main/java/org/ergoplatform/SigningSecrets.kt +++ b/common-jvm/src/main/java/org/ergoplatform/SigningSecrets.kt @@ -2,7 +2,7 @@ package org.ergoplatform import com.google.gson.JsonObject import com.google.gson.JsonParser -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString import java.nio.ByteBuffer import java.nio.CharBuffer import java.util.* diff --git a/common-jvm/src/main/java/org/ergoplatform/api/AesEncryptionManager.java b/common-jvm/src/main/java/org/ergoplatform/api/AesEncryptionManager.java index 77feb2e7..7fa51f67 100644 --- a/common-jvm/src/main/java/org/ergoplatform/api/AesEncryptionManager.java +++ b/common-jvm/src/main/java/org/ergoplatform/api/AesEncryptionManager.java @@ -1,6 +1,6 @@ package org.ergoplatform.api; -import org.ergoplatform.appkit.SecretString; +import org.ergoplatform.sdk.SecretString; import org.jetbrains.annotations.NotNull; import javax.crypto.*; diff --git a/common-jvm/src/main/java/org/ergoplatform/transactions/TransactionInfoUtils.kt b/common-jvm/src/main/java/org/ergoplatform/transactions/TransactionInfoUtils.kt index 5bdc164b..745e5b71 100644 --- a/common-jvm/src/main/java/org/ergoplatform/transactions/TransactionInfoUtils.kt +++ b/common-jvm/src/main/java/org/ergoplatform/transactions/TransactionInfoUtils.kt @@ -7,6 +7,8 @@ import org.ergoplatform.appkit.* import org.ergoplatform.appkit.impl.BoxAttachmentBuilder import org.ergoplatform.appkit.impl.Eip4TokenBuilder import org.ergoplatform.appkit.impl.ScalaBridge +import org.ergoplatform.sdk.ErgoToken +import org.ergoplatform.sdk.JavaHelpers import org.ergoplatform.explorer.client.model.* import org.ergoplatform.getErgoNetworkType import org.ergoplatform.persistance.PreferencesProvider @@ -288,9 +290,13 @@ private fun getAdditionalRegisters( registerMap["R${idx + 4}"] = AdditionalRegister().apply { val value = ev.value renderedValue = try { - if (value is Coll<*> && value.size() > 0 && value.apply(0) is Byte) - String(Base64Coder.encode(ScalaHelpers.collByteToByteArray(value as Coll))) - else value.toString() + if (value is Coll<*> && value.size() > 0 && value.apply(0) is Byte) { + @Suppress("UNCHECKED_CAST") + val byteCollection = value as Coll + String(Base64Coder.encode(ScalaHelpers.collByteToByteArray(byteCollection))) + }else{ + value.toString() + } } catch (t: Throwable) { value.toString() } diff --git a/common-jvm/src/main/java/org/ergoplatform/uilogic/transactions/SendFundsUiLogic.kt b/common-jvm/src/main/java/org/ergoplatform/uilogic/transactions/SendFundsUiLogic.kt index 89725cb9..b536e84d 100644 --- a/common-jvm/src/main/java/org/ergoplatform/uilogic/transactions/SendFundsUiLogic.kt +++ b/common-jvm/src/main/java/org/ergoplatform/uilogic/transactions/SendFundsUiLogic.kt @@ -6,7 +6,7 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.ergoplatform.* import org.ergoplatform.appkit.Address -import org.ergoplatform.appkit.ErgoToken +import org.ergoplatform.sdk.ErgoToken import org.ergoplatform.appkit.Parameters import org.ergoplatform.ergoauth.isErgoAuthRequestUri import org.ergoplatform.persistance.IAppDatabase diff --git a/common-jvm/src/main/java/org/ergoplatform/uilogic/wallet/ConfirmCreateWalletUiLogic.kt b/common-jvm/src/main/java/org/ergoplatform/uilogic/wallet/ConfirmCreateWalletUiLogic.kt index be0e6ea3..de513d8c 100644 --- a/common-jvm/src/main/java/org/ergoplatform/uilogic/wallet/ConfirmCreateWalletUiLogic.kt +++ b/common-jvm/src/main/java/org/ergoplatform/uilogic/wallet/ConfirmCreateWalletUiLogic.kt @@ -1,7 +1,7 @@ package org.ergoplatform.uilogic.wallet import org.ergoplatform.MNEMONIC_WORDS_COUNT -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString import kotlin.random.Random class ConfirmCreateWalletUiLogic() { diff --git a/common-jvm/src/main/java/org/ergoplatform/uilogic/wallet/SaveWalletUiLogic.kt b/common-jvm/src/main/java/org/ergoplatform/uilogic/wallet/SaveWalletUiLogic.kt index a9204026..64dd8e9b 100644 --- a/common-jvm/src/main/java/org/ergoplatform/uilogic/wallet/SaveWalletUiLogic.kt +++ b/common-jvm/src/main/java/org/ergoplatform/uilogic/wallet/SaveWalletUiLogic.kt @@ -4,7 +4,7 @@ import kotlinx.coroutines.* import org.ergoplatform.ApiServiceManager import org.ergoplatform.SigningSecrets import org.ergoplatform.WalletStateSyncManager -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString import org.ergoplatform.getPublicErgoAddressFromMnemonic import org.ergoplatform.persistance.WalletAddress import org.ergoplatform.persistance.WalletConfig diff --git a/common-jvm/src/test/java/org/ergoplatform/api/AesEncryptionManagerTest.kt b/common-jvm/src/test/java/org/ergoplatform/api/AesEncryptionManagerTest.kt index 7e27900d..433b866b 100644 --- a/common-jvm/src/test/java/org/ergoplatform/api/AesEncryptionManagerTest.kt +++ b/common-jvm/src/test/java/org/ergoplatform/api/AesEncryptionManagerTest.kt @@ -1,6 +1,6 @@ package org.ergoplatform.api -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString import org.junit.Assert import org.junit.Test diff --git a/common-jvm/src/test/java/org/ergoplatform/uilogic/wallet/SaveWalletUiLogicTest.kt b/common-jvm/src/test/java/org/ergoplatform/uilogic/wallet/SaveWalletUiLogicTest.kt index 8be6f5cf..79f80355 100644 --- a/common-jvm/src/test/java/org/ergoplatform/uilogic/wallet/SaveWalletUiLogicTest.kt +++ b/common-jvm/src/test/java/org/ergoplatform/uilogic/wallet/SaveWalletUiLogicTest.kt @@ -1,6 +1,6 @@ package org.ergoplatform.uilogic.wallet -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString import org.ergoplatform.getPublicErgoAddressFromMnemonic import org.ergoplatform.isErgoMainNet import org.junit.Assert.assertEquals diff --git a/desktop/build.gradle.kts b/desktop/build.gradle.kts index 593e4a9f..4646d1f9 100644 --- a/desktop/build.gradle.kts +++ b/desktop/build.gradle.kts @@ -13,6 +13,13 @@ java { sourceSets["main"].java { srcDir(generatedSourceDir) } // add generated source dir to main source set } +tasks.withType { + kotlinOptions { + jvmTarget = "1.8" + freeCompilerArgs = freeCompilerArgs + "-opt-in=kotlin.RequiresOptIn" + } +} + val osArch = if (project.hasProperty("osarch")) project.property("osarch") as? String else null dependencies { diff --git a/desktop/src/main/java/org/ergoplatform/desktop/ui/PasswordDialog.kt b/desktop/src/main/java/org/ergoplatform/desktop/ui/PasswordDialog.kt index e490c408..a90d517c 100644 --- a/desktop/src/main/java/org/ergoplatform/desktop/ui/PasswordDialog.kt +++ b/desktop/src/main/java/org/ergoplatform/desktop/ui/PasswordDialog.kt @@ -25,7 +25,7 @@ import org.ergoplatform.Application import org.ergoplatform.SigningSecrets import org.ergoplatform.URL_FORGOT_PASSWORD_HELP import org.ergoplatform.api.AesEncryptionManager -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString import org.ergoplatform.compose.settings.appTextFieldColors import org.ergoplatform.compose.settings.primaryButtonColors import org.ergoplatform.compose.settings.secondaryButtonColors diff --git a/desktop/src/main/java/org/ergoplatform/desktop/ui/navigation/ScreenConfig.kt b/desktop/src/main/java/org/ergoplatform/desktop/ui/navigation/ScreenConfig.kt index 7b3b6b53..7a25f437 100644 --- a/desktop/src/main/java/org/ergoplatform/desktop/ui/navigation/ScreenConfig.kt +++ b/desktop/src/main/java/org/ergoplatform/desktop/ui/navigation/ScreenConfig.kt @@ -1,7 +1,7 @@ package org.ergoplatform.desktop.ui.navigation import com.arkivanov.essenty.parcelable.Parcelable -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString import org.ergoplatform.persistance.WalletConfig sealed class ScreenConfig : Parcelable { diff --git a/desktop/src/main/java/org/ergoplatform/desktop/wallet/ConfirmCreateWalletComponent.kt b/desktop/src/main/java/org/ergoplatform/desktop/wallet/ConfirmCreateWalletComponent.kt index f5f82177..479f40be 100644 --- a/desktop/src/main/java/org/ergoplatform/desktop/wallet/ConfirmCreateWalletComponent.kt +++ b/desktop/src/main/java/org/ergoplatform/desktop/wallet/ConfirmCreateWalletComponent.kt @@ -7,7 +7,7 @@ import androidx.compose.runtime.remember import com.arkivanov.decompose.ComponentContext import com.arkivanov.decompose.router.pop import com.arkivanov.decompose.router.push -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString import org.ergoplatform.desktop.ui.navigation.NavClientScreenComponent import org.ergoplatform.desktop.ui.navigation.NavHostComponent import org.ergoplatform.desktop.ui.navigation.ScreenConfig diff --git a/desktop/src/main/java/org/ergoplatform/desktop/wallet/CreateWalletComponent.kt b/desktop/src/main/java/org/ergoplatform/desktop/wallet/CreateWalletComponent.kt index 23f922d2..15ecc647 100644 --- a/desktop/src/main/java/org/ergoplatform/desktop/wallet/CreateWalletComponent.kt +++ b/desktop/src/main/java/org/ergoplatform/desktop/wallet/CreateWalletComponent.kt @@ -7,7 +7,7 @@ import com.arkivanov.decompose.ComponentContext import com.arkivanov.decompose.router.pop import com.arkivanov.decompose.router.push import org.ergoplatform.appkit.Mnemonic -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString import org.ergoplatform.desktop.ui.navigation.NavClientScreenComponent import org.ergoplatform.desktop.ui.navigation.NavHostComponent import org.ergoplatform.desktop.ui.navigation.ScreenConfig diff --git a/desktop/src/main/java/org/ergoplatform/desktop/wallet/RestoreWalletComponent.kt b/desktop/src/main/java/org/ergoplatform/desktop/wallet/RestoreWalletComponent.kt index 297f49e2..2d6df0bb 100644 --- a/desktop/src/main/java/org/ergoplatform/desktop/wallet/RestoreWalletComponent.kt +++ b/desktop/src/main/java/org/ergoplatform/desktop/wallet/RestoreWalletComponent.kt @@ -8,7 +8,7 @@ import com.arkivanov.decompose.ComponentContext import com.arkivanov.decompose.router.pop import com.arkivanov.decompose.router.push import org.ergoplatform.Application -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString import org.ergoplatform.desktop.ui.navigation.NavClientScreenComponent import org.ergoplatform.desktop.ui.navigation.NavHostComponent import org.ergoplatform.desktop.ui.navigation.ScreenConfig diff --git a/desktop/src/main/java/org/ergoplatform/desktop/wallet/SaveWalletComponent.kt b/desktop/src/main/java/org/ergoplatform/desktop/wallet/SaveWalletComponent.kt index 07c8ca32..580fc027 100644 --- a/desktop/src/main/java/org/ergoplatform/desktop/wallet/SaveWalletComponent.kt +++ b/desktop/src/main/java/org/ergoplatform/desktop/wallet/SaveWalletComponent.kt @@ -14,7 +14,7 @@ import kotlinx.coroutines.launch import org.ergoplatform.ApiServiceManager import org.ergoplatform.Application import org.ergoplatform.api.AesEncryptionManager -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString import org.ergoplatform.desktop.ui.AppLockScreen import org.ergoplatform.desktop.ui.PasswordDialog import org.ergoplatform.desktop.ui.navigation.NavClientScreenComponent diff --git a/ios/build.gradle b/ios/build.gradle index 1c5c52be..b4f0caff 100644 --- a/ios/build.gradle +++ b/ios/build.gradle @@ -19,6 +19,13 @@ java { targetCompatibility = JavaVersion.VERSION_1_8 } +tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { + kotlinOptions { + jvmTarget = "1.8" + freeCompilerArgs += '-opt-in=kotlin.RequiresOptIn' + } +} + task convertStrings { def source = '../android/build/intermediates/incremental/ergomainnetDebug/mergeErgomainnetDebugResources/merged.dir/values{l}/values{l}.xml' def dest = 'resources/i18n/strings{l}.properties' diff --git a/ios/src/main/java/org/ergoplatform/ios/api/IosEncryptionManager.kt b/ios/src/main/java/org/ergoplatform/ios/api/IosEncryptionManager.kt index eae5061b..5004e519 100644 --- a/ios/src/main/java/org/ergoplatform/ios/api/IosEncryptionManager.kt +++ b/ios/src/main/java/org/ergoplatform/ios/api/IosEncryptionManager.kt @@ -2,7 +2,7 @@ package org.ergoplatform.ios.api import org.ergoplatform.api.AesEncryptionManager import org.ergoplatform.api.PasswordGenerator -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString import org.ergoplatform.utils.LogUtils import org.robovm.apple.localauthentication.LAContext diff --git a/ios/src/main/java/org/ergoplatform/ios/tokens/SendTokenEntryView.kt b/ios/src/main/java/org/ergoplatform/ios/tokens/SendTokenEntryView.kt index c071ac2b..277f51b9 100644 --- a/ios/src/main/java/org/ergoplatform/ios/tokens/SendTokenEntryView.kt +++ b/ios/src/main/java/org/ergoplatform/ios/tokens/SendTokenEntryView.kt @@ -3,7 +3,7 @@ package org.ergoplatform.ios.tokens import com.badlogic.gdx.utils.I18NBundle import org.ergoplatform.TokenAmount import org.ergoplatform.WalletStateSyncManager -import org.ergoplatform.appkit.ErgoToken +import org.ergoplatform.sdk.ErgoToken import org.ergoplatform.ios.ui.* import org.ergoplatform.persistance.TokenPrice import org.ergoplatform.persistance.WalletToken diff --git a/ios/src/main/java/org/ergoplatform/ios/ui/AuthenticationFlow.kt b/ios/src/main/java/org/ergoplatform/ios/ui/AuthenticationFlow.kt index 3f29c533..8129b529 100644 --- a/ios/src/main/java/org/ergoplatform/ios/ui/AuthenticationFlow.kt +++ b/ios/src/main/java/org/ergoplatform/ios/ui/AuthenticationFlow.kt @@ -2,7 +2,7 @@ package org.ergoplatform.ios.ui import org.ergoplatform.SigningSecrets import org.ergoplatform.api.AesEncryptionManager -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString import org.ergoplatform.ios.api.IosAuthentication import org.ergoplatform.ios.api.IosEncryptionManager import org.ergoplatform.persistance.ENC_TYPE_DEVICE diff --git a/ios/src/main/java/org/ergoplatform/ios/ui/PasswordViewController.kt b/ios/src/main/java/org/ergoplatform/ios/ui/PasswordViewController.kt index 704463f6..0b36bb7e 100644 --- a/ios/src/main/java/org/ergoplatform/ios/ui/PasswordViewController.kt +++ b/ios/src/main/java/org/ergoplatform/ios/ui/PasswordViewController.kt @@ -1,7 +1,7 @@ package org.ergoplatform.ios.ui import org.ergoplatform.URL_FORGOT_PASSWORD_HELP -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString import org.ergoplatform.uilogic.* import org.robovm.apple.uikit.* diff --git a/ios/src/main/java/org/ergoplatform/ios/wallet/ConfirmCreateWalletViewController.kt b/ios/src/main/java/org/ergoplatform/ios/wallet/ConfirmCreateWalletViewController.kt index 3a934c32..b788a4a3 100644 --- a/ios/src/main/java/org/ergoplatform/ios/wallet/ConfirmCreateWalletViewController.kt +++ b/ios/src/main/java/org/ergoplatform/ios/wallet/ConfirmCreateWalletViewController.kt @@ -1,6 +1,6 @@ package org.ergoplatform.ios.wallet -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString import org.ergoplatform.ios.ui.* import org.ergoplatform.uilogic.STRING_CHECK_CONFIRM_CREATE_WALLET import org.ergoplatform.uilogic.STRING_INTRO_CONFIRM_CREATE_WALLET diff --git a/ios/src/main/java/org/ergoplatform/ios/wallet/CreateWalletViewController.kt b/ios/src/main/java/org/ergoplatform/ios/wallet/CreateWalletViewController.kt index 10fc5be6..095a5cb4 100644 --- a/ios/src/main/java/org/ergoplatform/ios/wallet/CreateWalletViewController.kt +++ b/ios/src/main/java/org/ergoplatform/ios/wallet/CreateWalletViewController.kt @@ -1,7 +1,7 @@ package org.ergoplatform.ios.wallet import org.ergoplatform.appkit.Mnemonic -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString import org.ergoplatform.ios.ui.* import org.ergoplatform.uilogic.* import org.robovm.apple.coregraphics.CGRect diff --git a/ios/src/main/java/org/ergoplatform/ios/wallet/RestoreWalletViewController.kt b/ios/src/main/java/org/ergoplatform/ios/wallet/RestoreWalletViewController.kt index c3a06b4e..24d91291 100644 --- a/ios/src/main/java/org/ergoplatform/ios/wallet/RestoreWalletViewController.kt +++ b/ios/src/main/java/org/ergoplatform/ios/wallet/RestoreWalletViewController.kt @@ -1,6 +1,6 @@ package org.ergoplatform.ios.wallet -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString import org.ergoplatform.ios.ui.* import org.ergoplatform.uilogic.STRING_INTRO_RESTORE_WALLET import org.ergoplatform.uilogic.STRING_LABEL_RESTORE_WALLET diff --git a/ios/src/main/java/org/ergoplatform/ios/wallet/SaveWalletViewController.kt b/ios/src/main/java/org/ergoplatform/ios/wallet/SaveWalletViewController.kt index 132a06de..7215a985 100644 --- a/ios/src/main/java/org/ergoplatform/ios/wallet/SaveWalletViewController.kt +++ b/ios/src/main/java/org/ergoplatform/ios/wallet/SaveWalletViewController.kt @@ -6,7 +6,7 @@ import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import org.ergoplatform.ApiServiceManager import org.ergoplatform.api.AesEncryptionManager -import org.ergoplatform.appkit.SecretString +import org.ergoplatform.sdk.SecretString import org.ergoplatform.ios.api.IosAuthentication import org.ergoplatform.ios.api.IosEncryptionManager import org.ergoplatform.ios.ui.* From f22b12145c3a8edaf5f8e860bdeb2065f40b1348 Mon Sep 17 00:00:00 2001 From: Pavel Holoborodko Date: Sun, 9 Nov 2025 22:20:03 +0900 Subject: [PATCH 05/18] Regenerated gradle/verification-metadata.xml file to reflect new packages --- gradle/verification-metadata.xml | 2868 ++++++++++++++++++++++++------ 1 file changed, 2323 insertions(+), 545 deletions(-) diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index d85e71d6..baea0851 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -1,982 +1,1407 @@ - false + true false - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + - - - - + + - - - - + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + - - - - + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -985,8 +1410,14 @@ + + + + + + @@ -995,511 +1426,882 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + - - - - + + - - - + + + - - - - + + - - - + + + + + + - - - + + + + + + - - - + + + + + + - - - + + + + + + - - - + + + - - - - + + - - - + + + - - - - - - - - - + + - - - + + + - - - - - - - - - + + - - + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1508,953 +2310,1467 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + - - - - + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + - - - + + + - - - + + + - - - + + + + + + + + - - - + + + - - - + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - + + + - - - - - - - - + + + - - - - + + - - - + + + - - - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + - - - + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + @@ -2463,18 +3779,30 @@ + + + + + + + + + + + + @@ -2483,8 +3811,19 @@ + + + + + + + + + + + @@ -2493,8 +3832,14 @@ + + + + + + @@ -2503,8 +3848,14 @@ + + + + + + @@ -2513,8 +3864,14 @@ + + + + + + @@ -2523,8 +3880,14 @@ + + + + + + @@ -2533,8 +3896,14 @@ + + + + + + @@ -2543,8 +3912,14 @@ + + + + + + @@ -2553,8 +3928,14 @@ + + + + + + @@ -2563,8 +3944,14 @@ + + + + + + @@ -2573,8 +3960,14 @@ + + + + + + @@ -2583,8 +3976,14 @@ + + + + + + @@ -2593,8 +3992,14 @@ + + + + + + @@ -2603,8 +4008,14 @@ + + + + + + @@ -2613,8 +4024,14 @@ + + + + + + @@ -2623,731 +4040,1092 @@ + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + - - - + + + + + + - - + + + + + + + + - - - - - - - - - + + + + + - - + + + + + + + + - - - - - - - - - + + - - - - + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + - - - + + + - - - + + + - - - - + + - - - - + + + + + - - - - - - - - - - - - - - - - - - - + + - - - + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 940875814d5638a68c9362c81cdf5a002b244afc Mon Sep 17 00:00:00 2001 From: Pavel Holoborodko Date: Mon, 10 Nov 2025 22:47:43 +0900 Subject: [PATCH 06/18] Transition to newer version of Kotlin, gradle, AGP, compose and other components. All building scripts are refactored, cleaned up and updated. --- android/build.gradle | 38 +- android/src/main/AndroidManifest.xml | 3 +- build.gradle | 9 +- common-compose/build.gradle.kts | 2 +- desktop/build.gradle.kts | 6 +- gradle.properties | 4 +- gradle/verification-metadata.xml | 2272 ++++++++++++---------- gradle/wrapper/gradle-wrapper.properties | 2 +- sqldelight/build.gradle | 7 + 9 files changed, 1249 insertions(+), 1094 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 92e7a0f0..c0d6567a 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -6,15 +6,15 @@ plugins { } android { - compileSdk 33 - buildToolsVersion "33.0.1" + namespace 'org.ergoplatform.android' + compileSdk 35 defaultConfig { applicationId "org.ergoplatform.android" minSdk 24 - targetSdk 33 - versionCode 2305 - versionName "2.4.2305" + targetSdk 35 + versionCode 2511 + versionName "2.4.2511" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } @@ -22,6 +22,7 @@ android { buildFeatures { compose true viewBinding true + buildConfig true } buildTypes { @@ -63,7 +64,13 @@ android { } composeOptions { - kotlinCompilerExtensionVersion compose_version + kotlinCompilerExtensionVersion "1.4.2" + } +} + +tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { + kotlinOptions { + jvmTarget = "1.8" } } @@ -102,7 +109,7 @@ dependencies { implementation "androidx.work:work-runtime:$work_version" implementation "androidx.work:work-runtime-ktx:$work_version" - implementation('com.journeyapps:zxing-android-embedded:4.2.0') + implementation('com.journeyapps:zxing-android-embedded:4.3.0') // newer okhttp version than pulled from dependencies to avoid StrictMode policy violation // defined here because causing errors on iOS @@ -113,12 +120,17 @@ dependencies { implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava' // Compose - implementation "androidx.compose.runtime:runtime:$compose_version" - implementation "androidx.compose.ui:ui:$compose_version" - implementation "androidx.compose.foundation:foundation:$compose_version" - implementation "androidx.compose.foundation:foundation-layout:$compose_version" - implementation "androidx.compose.material:material:$compose_version" - implementation "androidx.compose.runtime:runtime-livedata:$compose_version" + + // 1.3.1, Kotlin 1.8.10 + // https://github.com/JetBrains/compose-multiplatform/releases/tag/v1.3.1 + implementation "androidx.compose.compiler:compiler:1.4.2" + implementation "androidx.compose.runtime:runtime:1.3.3" + implementation "androidx.compose.runtime:runtime-livedata:1.3.3" + implementation "androidx.compose.ui:ui:1.3.3" + implementation "androidx.compose.foundation:foundation:1.3.1" + implementation "androidx.compose.foundation:foundation-layout:1.3.1" + implementation "androidx.compose.material:material:1.3.1" + implementation "com.github.MrStahlfelge.mosaik:common-compose:$mosaik_version" testImplementation 'junit:junit:4.13.2' diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index 47e4649d..b47eb550 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -1,7 +1,6 @@ + xmlns:tools="http://schemas.android.com/tools"> diff --git a/build.gradle b/build.gradle index a06bb344..f8e0a21b 100644 --- a/build.gradle +++ b/build.gradle @@ -1,21 +1,20 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = "1.6.10" + ext.kotlin_version = "1.8.10" ext.robovm_version = "2.3.19" - ext.sqldelight_version = "1.5.3" + ext.sqldelight_version = "1.5.5" ext.coroutines_version = "1.6.0" ext.mosaik_version = "v2.0.2" - ext.compose_version = "1.1.0" ext.mockito_version = "4.0.0" ext.junit_version = "4.13.2" - ext.nav_version = "2.4.2" // 2.5.x requires Kotlin 1.6.21 + ext.nav_version = "2.5.3" repositories { google() gradlePluginPortal() } dependencies { - classpath "com.android.tools.build:gradle:7.3.1" + classpath "com.android.tools.build:gradle:8.2.0" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") classpath "com.squareup.sqldelight:gradle-plugin:$sqldelight_version" diff --git a/common-compose/build.gradle.kts b/common-compose/build.gradle.kts index bbd6da89..664909af 100644 --- a/common-compose/build.gradle.kts +++ b/common-compose/build.gradle.kts @@ -1,6 +1,6 @@ plugins { id("kotlin") - id("org.jetbrains.compose") version "1.1.0" + id("org.jetbrains.compose") version "1.3.1" } val mosaik_version: String by rootProject.extra diff --git a/desktop/build.gradle.kts b/desktop/build.gradle.kts index 4646d1f9..7cdb0e38 100644 --- a/desktop/build.gradle.kts +++ b/desktop/build.gradle.kts @@ -1,6 +1,6 @@ plugins { id("kotlin") - id("org.jetbrains.compose") version "1.1.0" + id("org.jetbrains.compose") version "1.3.1" id("com.github.johnrengelman.shadow") version "7.1.2" } @@ -15,7 +15,7 @@ java { tasks.withType { kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "11" freeCompilerArgs = freeCompilerArgs + "-opt-in=kotlin.RequiresOptIn" } } @@ -121,7 +121,7 @@ obfuscate.configure { injars(tasks.shadowJar) outjars(base.libsDirectory.file("ergo-wallet-app-${project.version}_$fileNameOsArch.jar")) - libraryjars("${compose.desktop.application.javaHome ?: System.getProperty("java.home")}/jmods") + libraryjars("${compose.desktop.application.javaHome}/jmods") configuration(listOf("proguard-rules.pro", "../android/proguard-rules.pro")) } diff --git a/gradle.properties b/gradle.properties index 98bed167..3098044d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,4 +18,6 @@ android.useAndroidX=true # Automatically convert third-party libraries to use AndroidX android.enableJetifier=true # Kotlin code style for this project: "official" or "obsolete": -kotlin.code.style=official \ No newline at end of file +kotlin.code.style=official +# Suppress false incompatibility for AGP 8.2.0 +android.suppressUnsupportedCompileSdk=35 \ No newline at end of file diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index baea0851..aa51cbb5 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -1,5 +1,5 @@ - + true false @@ -13,12 +13,12 @@ - - - + + + - - + + @@ -46,13 +46,18 @@ - - - + + + + + + + + @@ -164,12 +169,12 @@ - - - + + + - - + + @@ -177,148 +182,148 @@ - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + @@ -398,28 +403,36 @@ - - - + + + + + + + + + + + - - + + - - - + + + - - + + - - - + + + - - + + @@ -472,20 +485,20 @@ - - - + + + - - + + - - - + + + - - + + @@ -676,52 +689,52 @@ - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + @@ -756,12 +769,12 @@ - - - + + + - - + + @@ -836,12 +849,12 @@ - - - + + + - - + + @@ -1078,44 +1091,68 @@ - - - + + + + + + + + + + + + + + + + + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + + + + + + + + + @@ -1134,156 +1171,164 @@ - - - + + + + + + + + + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + @@ -1310,84 +1355,108 @@ - - - + + + + + + + + + + + + + + + + + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + + + + + + + + + @@ -1431,12 +1500,12 @@ - - - + + + @@ -1447,12 +1516,12 @@ - - - + + + @@ -1463,12 +1532,12 @@ - - - + + + @@ -1479,12 +1548,12 @@ - - - + + + @@ -1495,12 +1564,12 @@ - - - + + + @@ -1514,6 +1583,9 @@ + + + @@ -1595,14 +1667,6 @@ - - - - - - - - @@ -1710,6 +1774,14 @@ + + + + + + + + @@ -1732,13 +1804,20 @@ - - - + + + + + + + + + + @@ -1759,12 +1838,17 @@ - - - + + + + + + + + - - + + @@ -1783,6 +1867,19 @@ + + + + + + + + + + + + + @@ -1796,12 +1893,19 @@ - - - + + + + + + + + - - + + + + @@ -1814,9 +1918,9 @@ - - - + + + @@ -1851,12 +1955,12 @@ - - - + + + - - + + @@ -1874,9 +1978,9 @@ - - - + + + @@ -1916,22 +2020,14 @@ - - - - - - - - - - - + + + @@ -1942,17 +2038,20 @@ - - - + + + - - + + - - - + + + + + + @@ -1960,33 +2059,30 @@ - - - - - - + + + - - - + + + - - + + - - - + + + - - - - + + - - + + + + @@ -2045,12 +2141,12 @@ - - - + + + - - + + @@ -2298,20 +2394,20 @@ - - - + + + - - + + - - - + + + - - + + @@ -2322,20 +2418,28 @@ - - - + + + - - + + - - - + + + - - + + + + + + + + + + @@ -2346,6 +2450,14 @@ + + + + + + + + @@ -2498,14 +2610,6 @@ - - - - - - - - @@ -2562,60 +2666,60 @@ - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + @@ -2626,89 +2730,102 @@ - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + + + + + + + + + - - - + + + - - + + - - - + + + - - + + + + + + + @@ -2732,14 +2849,6 @@ - - - - - - - - @@ -2954,6 +3063,14 @@ + + + + + + + + @@ -3041,12 +3158,12 @@ - - - + + + - - + + @@ -3054,9 +3171,9 @@ - - - + + + @@ -3069,9 +3186,9 @@ - - - + + + @@ -3092,12 +3209,12 @@ - - - + + + - - + + @@ -3401,12 +3518,12 @@ - - - + + + - - + + @@ -3685,43 +3802,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -3746,435 +3826,457 @@ - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + + + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + + + + + + + + + + + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + + + + + + + + + @@ -4185,14 +4287,6 @@ - - - - - - - - @@ -4201,70 +4295,52 @@ - - - - - - - - - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - - - - + + + - - - - + + - - - + + + - - + + - - - + + + - - - - - - - + + @@ -4283,10 +4359,31 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + @@ -4296,14 +4393,6 @@ - - - - - - - - @@ -4320,20 +4409,33 @@ - - - + + + - - + + + + + + + + + + + + + + + - - - + + + - - + + @@ -4344,20 +4446,28 @@ - - - + + + + + + + + + + + - - + + - - - + + + - - + + @@ -4368,28 +4478,89 @@ - - - + + + + + + + + + + + - - + + - - - + + + - - + + - - - + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4398,47 +4569,57 @@ - - - + + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + + + + + + @@ -4455,20 +4636,12 @@ - - - - - - - - - - - + + + - - + + @@ -4487,33 +4660,28 @@ - - - - - - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + @@ -4579,14 +4747,6 @@ - - - - - - - - @@ -4603,14 +4763,6 @@ - - - - - - - - @@ -4627,14 +4779,6 @@ - - - - - - - - @@ -4651,14 +4795,6 @@ - - - - - - - - @@ -4667,12 +4803,12 @@ - - - + + + - - + + diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 974f7ff7..81564b27 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-all.zip diff --git a/sqldelight/build.gradle b/sqldelight/build.gradle index 9c3586a0..3b15bf1e 100644 --- a/sqldelight/build.gradle +++ b/sqldelight/build.gradle @@ -9,6 +9,13 @@ java { targetCompatibility = JavaVersion.VERSION_1_8 } +tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { + kotlinOptions { + jvmTarget = "1.8" + freeCompilerArgs += '-opt-in=kotlin.RequiresOptIn' + } +} + sqldelight { AppDatabase { packageName = "org.ergoplatform.persistance" From 8972568f82fa4938c61236d89a093332ae3a24b8 Mon Sep 17 00:00:00 2001 From: Pavel Holoborodko Date: Mon, 10 Nov 2025 22:49:38 +0900 Subject: [PATCH 07/18] Fixed incompatibility with missing zxing_button_ok in new version of zxing-android-embedded --- .../src/main/java/org/ergoplatform/android/MainActivity.kt | 2 +- .../android/transactions/AddressTransactionsFragment.kt | 2 +- .../ergoplatform/android/transactions/SendFundsFragment.kt | 4 ++-- .../android/transactions/TransactionInfoFragment.kt | 4 ++-- .../ergoplatform/android/ui/AbstractAuthenticationFragment.kt | 2 +- .../ergoplatform/android/wallet/SaveWalletFragmentDialog.kt | 2 +- .../org/ergoplatform/android/wallet/WalletDetailsFragment.kt | 2 +- .../org/ergoplatform/transactions/TransactionInfoUtils.kt | 2 ++ 8 files changed, 11 insertions(+), 9 deletions(-) diff --git a/android/src/main/java/org/ergoplatform/android/MainActivity.kt b/android/src/main/java/org/ergoplatform/android/MainActivity.kt index 22652233..3aa37a92 100644 --- a/android/src/main/java/org/ergoplatform/android/MainActivity.kt +++ b/android/src/main/java/org/ergoplatform/android/MainActivity.kt @@ -184,7 +184,7 @@ class MainActivity : AppCompatActivity() { presentUserMessage = { MaterialAlertDialogBuilder(this) .setMessage(it) - .setPositiveButton(R.string.zxing_button_ok, null) + .setPositiveButton(android.R.string.ok, null) .show() }) } diff --git a/android/src/main/java/org/ergoplatform/android/transactions/AddressTransactionsFragment.kt b/android/src/main/java/org/ergoplatform/android/transactions/AddressTransactionsFragment.kt index 7e06d3c1..5e11831a 100644 --- a/android/src/main/java/org/ergoplatform/android/transactions/AddressTransactionsFragment.kt +++ b/android/src/main/java/org/ergoplatform/android/transactions/AddressTransactionsFragment.kt @@ -106,7 +106,7 @@ class AddressTransactionsFragment : Fragment(), AddressChooserCallback { num?.let { MaterialAlertDialogBuilder(requireContext()) .setMessage(getString(R.string.info_export, num)) - .setPositiveButton(R.string.zxing_button_ok, null) + .setPositiveButton(android.R.string.ok, null) .show() } } diff --git a/android/src/main/java/org/ergoplatform/android/transactions/SendFundsFragment.kt b/android/src/main/java/org/ergoplatform/android/transactions/SendFundsFragment.kt index c30f9bd4..0457414c 100644 --- a/android/src/main/java/org/ergoplatform/android/transactions/SendFundsFragment.kt +++ b/android/src/main/java/org/ergoplatform/android/transactions/SendFundsFragment.kt @@ -115,7 +115,7 @@ class SendFundsFragment : SubmitTransactionFragment(), ChooseAddressDialogCallba viewModel.errorMessageLiveData.observe(viewLifecycleOwner, { MaterialAlertDialogBuilder(requireContext()) .setMessage(it) - .setPositiveButton(R.string.zxing_button_ok, null) + .setPositiveButton(android.R.string.ok, null) .show() }) viewModel.txId.observe(viewLifecycleOwner, { @@ -505,7 +505,7 @@ class SendFundsFragment : SubmitTransactionFragment(), ChooseAddressDialogCallba viewModel.uiLogic.getPaymentRequestWarnings(AndroidStringProvider(requireContext()))?.let { MaterialAlertDialogBuilder(requireContext()) .setMessage(it) - .setPositiveButton(R.string.zxing_button_ok, null) + .setPositiveButton(android.R.string.ok, null) .show() } } diff --git a/android/src/main/java/org/ergoplatform/android/transactions/TransactionInfoFragment.kt b/android/src/main/java/org/ergoplatform/android/transactions/TransactionInfoFragment.kt index b332218d..6a348fa1 100644 --- a/android/src/main/java/org/ergoplatform/android/transactions/TransactionInfoFragment.kt +++ b/android/src/main/java/org/ergoplatform/android/transactions/TransactionInfoFragment.kt @@ -58,7 +58,7 @@ class TransactionInfoFragment : Fragment() { MaterialAlertDialogBuilder(context) .setMessage(R.string.info_cancel_tx) .setPositiveButton( - R.string.zxing_button_ok + android.R.string.ok ) { _, _ -> viewModel.doCancelTx( AppDatabase.getInstance(context).walletDbProvider, @@ -138,7 +138,7 @@ class TransactionInfoFragment : Fragment() { if (!prompt.success) MaterialAlertDialogBuilder(requireContext()) .setMessage(prompt.errorMsg!!) - .setPositiveButton(R.string.zxing_button_ok, null) + .setPositiveButton(android.R.string.ok, null) .show() else { val walletConfigAndDerivedIdx = viewModel.walletConfigAndDerivedIdx diff --git a/android/src/main/java/org/ergoplatform/android/ui/AbstractAuthenticationFragment.kt b/android/src/main/java/org/ergoplatform/android/ui/AbstractAuthenticationFragment.kt index 34b22fe7..98b28cb4 100644 --- a/android/src/main/java/org/ergoplatform/android/ui/AbstractAuthenticationFragment.kt +++ b/android/src/main/java/org/ergoplatform/android/ui/AbstractAuthenticationFragment.kt @@ -61,7 +61,7 @@ abstract class AbstractAuthenticationFragment : Fragment(), PasswordDialogCallba private fun showBiometricPromptError(errorMessage: String) { MaterialAlertDialogBuilder(requireContext()) .setMessage(getString(R.string.error_device_security, errorMessage)) - .setPositiveButton(R.string.zxing_button_ok, null) + .setPositiveButton(android.R.string.ok, null) .show() } diff --git a/android/src/main/java/org/ergoplatform/android/wallet/SaveWalletFragmentDialog.kt b/android/src/main/java/org/ergoplatform/android/wallet/SaveWalletFragmentDialog.kt index 2b9a5811..c79ec9c8 100644 --- a/android/src/main/java/org/ergoplatform/android/wallet/SaveWalletFragmentDialog.kt +++ b/android/src/main/java/org/ergoplatform/android/wallet/SaveWalletFragmentDialog.kt @@ -166,7 +166,7 @@ class SaveWalletFragmentDialog : FullScreenFragmentDialog(), PasswordDialogCallb private fun showSecurityErrorSnackbar(t: Throwable) { MaterialAlertDialogBuilder(requireContext()) .setMessage(getString(R.string.error_device_security_save_wallet, t.message)) - .setPositiveButton(R.string.zxing_button_ok, null) + .setPositiveButton(android.R.string.ok, null) .show() } diff --git a/android/src/main/java/org/ergoplatform/android/wallet/WalletDetailsFragment.kt b/android/src/main/java/org/ergoplatform/android/wallet/WalletDetailsFragment.kt index 717b28e7..e37207ed 100644 --- a/android/src/main/java/org/ergoplatform/android/wallet/WalletDetailsFragment.kt +++ b/android/src/main/java/org/ergoplatform/android/wallet/WalletDetailsFragment.kt @@ -457,7 +457,7 @@ class WalletDetailsFragment : Fragment(), AddressChooserCallback { }, showErrorMessage = { MaterialAlertDialogBuilder(requireContext()).setMessage(it) - .setPositiveButton(R.string.zxing_button_ok, null) + .setPositiveButton(android.R.string.ok, null) .show() }) } diff --git a/common-jvm/src/main/java/org/ergoplatform/transactions/TransactionInfoUtils.kt b/common-jvm/src/main/java/org/ergoplatform/transactions/TransactionInfoUtils.kt index 745e5b71..00d8cef8 100644 --- a/common-jvm/src/main/java/org/ergoplatform/transactions/TransactionInfoUtils.kt +++ b/common-jvm/src/main/java/org/ergoplatform/transactions/TransactionInfoUtils.kt @@ -204,6 +204,8 @@ private fun buildTransactionInfo( it.name = tokenInfo.tokenName it.decimals = tokenInfo.decimals } + } else { + } } From cf6015dd8c5eb36e02e780f06e43e18a4a445d26 Mon Sep 17 00:00:00 2001 From: Pavel Holoborodko Date: Tue, 11 Nov 2025 19:33:15 +0900 Subject: [PATCH 08/18] Cleaned up build.gradle in common-jvm gradle. Removed Java 1.7 specifics. --- common-jvm/build.gradle | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/common-jvm/build.gradle b/common-jvm/build.gradle index 9804bfef..2140b778 100644 --- a/common-jvm/build.gradle +++ b/common-jvm/build.gradle @@ -18,24 +18,8 @@ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { dependencies { api('org.ergoplatform:ergo-appkit_2.11:5.0.3') { exclude group: 'org.bouncycastle', module: 'bcprov-jdk15on' - exclude group: 'org.bitbucket.inkytonik.kiama', module: 'kiama_2.11' - exclude group: 'com.google.guava', module: 'guava' } - - // Custom Kiama - should work fine on Java 8 - api ('com.github.MrStahlfelge.kiama:core_2.11:2.1.1') { - exclude group: 'com.google.guava', module: 'guava' - } - api ('com.github.MrStahlfelge.kiama:library_2.11:2.1.1') { - exclude group: 'com.google.guava', module: 'guava' - } - - // Guava 20 works with Java 8 (could upgrade later if needed) - api "com.google.guava:guava:20.0" - - // BouncyCastle - this version supports Java 8 - api "org.bouncycastle:bcprov-jdk15to18:1.66" - + api "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:$coroutines_version" api "com.github.MrStahlfelge.mosaik:common-runtime:$mosaik_version" api "com.github.MrStahlfelge.mosaik:clientconnector-okhttp:$mosaik_version" From 0c5ed52b546bce905467493c80c935c0cc10035f Mon Sep 17 00:00:00 2001 From: Pavel Holoborodko Date: Tue, 11 Nov 2025 19:39:54 +0900 Subject: [PATCH 09/18] Fixed status bar overlap on Android 15 We use platform-specific theme flag to opt out, restoring the legacy layout behavior where the app window starts correctly below the status bar. Resolves #187 --- android/src/main/res/values/themes.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/android/src/main/res/values/themes.xml b/android/src/main/res/values/themes.xml index 8894a3c7..059c80e8 100644 --- a/android/src/main/res/values/themes.xml +++ b/android/src/main/res/values/themes.xml @@ -15,6 +15,7 @@ true ?attr/colorSurface @bool/isLight + true @style/Widget.App.Button.TextButton From 3f71faccb7feabf737f8df50dcf1a35c7b3cbc22 Mon Sep 17 00:00:00 2001 From: Pavel Holoborodko Date: Wed, 12 Nov 2025 08:54:47 +0900 Subject: [PATCH 10/18] Added aapt2 to trusted packages --- gradle/verification-metadata.xml | 112 +++++++++++++++---------------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index aa51cbb5..409352bf 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -3,6 +3,10 @@ true false + + + + @@ -1603,22 +1607,6 @@ - - - - - - - - - - - - - - - - @@ -1867,6 +1855,14 @@ + + + + + + + + @@ -1898,6 +1894,11 @@ + + + + + @@ -1939,12 +1940,12 @@ - - - + + + - - + + @@ -1963,9 +1964,9 @@ - - - + + + @@ -1999,6 +2000,14 @@ + + + + + + + + @@ -2886,14 +2895,6 @@ - - - - - - - - @@ -3345,22 +3346,6 @@ - - - - - - - - - - - - - - - - @@ -3526,6 +3511,19 @@ + + + + + + + + + + + + + @@ -3534,11 +3532,21 @@ + + + + + + + + + + @@ -4824,14 +4832,6 @@ - - - - - - - - From 6fff9e8a68e2cc9f4267042633561c72abdf4727 Mon Sep 17 00:00:00 2001 From: Pavel Holoborodko Date: Wed, 12 Nov 2025 08:56:28 +0900 Subject: [PATCH 11/18] Updated workflow to use JDK 17 instead of JDK 11 Android 15 requires at least AGP 8.2.0 which needs JDK 17 --- .github/workflows/compile.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/compile.yml b/.github/workflows/compile.yml index 8f4905bd..f1413a9e 100755 --- a/.github/workflows/compile.yml +++ b/.github/workflows/compile.yml @@ -16,10 +16,10 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Set up JDK 11 + - name: Set up JDK 17 uses: actions/setup-java@v3 with: - java-version: '11' + java-version: '17' distribution: 'adopt' - name: Grant execute permission for gradlew run: chmod +x gradlew From 43c6efea5698f4203f3ae478e8dbd98bdedbb6c5 Mon Sep 17 00:00:00 2001 From: Pavel Holoborodko Date: Wed, 12 Nov 2025 09:09:32 +0900 Subject: [PATCH 12/18] Updated workflow to enable manual dispatch for testing in forked repositories --- .github/workflows/compile.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/compile.yml b/.github/workflows/compile.yml index f1413a9e..baad61db 100755 --- a/.github/workflows/compile.yml +++ b/.github/workflows/compile.yml @@ -8,6 +8,7 @@ on: branches: - master - develop + workflow_dispatch: {} jobs: build: From 8abf490737121505a9025755d5621e39f25851eb Mon Sep 17 00:00:00 2001 From: Pavel Holoborodko Date: Wed, 12 Nov 2025 09:14:14 +0900 Subject: [PATCH 13/18] Added junit-bom to trusted packages --- gradle/verification-metadata.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 409352bf..2a402a5b 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -6,6 +6,7 @@ + From ce6ad1d408faca9383cdaae7ff9e31dd2bb4be5b Mon Sep 17 00:00:00 2001 From: Pavel Holoborodko Date: Wed, 12 Nov 2025 09:26:41 +0900 Subject: [PATCH 14/18] Updated list of verified packages --- gradle/verification-metadata.xml | 87 ++++++++++++++++++++++++++++++-- 1 file changed, 84 insertions(+), 3 deletions(-) diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 2a402a5b..e5eb07c6 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -4,9 +4,10 @@ true false - - - + + + + @@ -1184,6 +1185,14 @@ + + + + + + + + @@ -1368,6 +1377,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -1376,6 +1409,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3168,6 +3233,14 @@ + + + + + + + + @@ -3517,6 +3590,14 @@ + + + + + + + + From 1c06672a25a6cb304bdf0133bf5295d7e3a3eccf Mon Sep 17 00:00:00 2001 From: Pavel Holoborodko Date: Wed, 12 Nov 2025 09:42:18 +0900 Subject: [PATCH 15/18] Updated verification-metadata.xml --- gradle/verification-metadata.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index e5eb07c6..9deeb5d4 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -7,7 +7,7 @@ - + From 04bc93ea1249c35cb7fbcc33d4abfc1ed92000e1 Mon Sep 17 00:00:00 2001 From: Pavel Holoborodko Date: Wed, 12 Nov 2025 09:55:30 +0900 Subject: [PATCH 16/18] Updated list of verified packages with desktop-jvm-linux-x64 --- gradle/verification-metadata.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 9deeb5d4..e0b3f434 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -8,6 +8,7 @@ + From 3daabe2cf1337e8328d3e8b0d4918fa40cfc4c31 Mon Sep 17 00:00:00 2001 From: Pavel Holoborodko Date: Sun, 23 Nov 2025 16:50:29 +0900 Subject: [PATCH 17/18] Fixed Retrofit call adapter failure in release build The release build was failing to establish external network connections due to a ProGuard/R8 issue that stripped generic type information required by Retrofit's CallAdapterFactory. Adds '-keepattributes Signature' and other Retrofit-specific ProGuard/R8 rules to prevent code minification from stripping generic type information, resolving the 'Unable to create call adapter' error during API calls. --- android/proguard-rules.pro | 53 ++++++++++++++++++++++++++++++-------- 1 file changed, 42 insertions(+), 11 deletions(-) diff --git a/android/proguard-rules.pro b/android/proguard-rules.pro index 95ce6319..240b3423 100644 --- a/android/proguard-rules.pro +++ b/android/proguard-rules.pro @@ -3,36 +3,67 @@ # proguardFiles setting in build.gradle. # # For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html +# http://developer.android.com/guide/developing/tools/proguard.html # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; +# public *; #} # If you keep the line number information, uncomment this to # hide the original source file name. -renamesourcefileattribute SourceFile +# Essential rules for Retrofit to keep generic type signatures and classes +-keepattributes Signature +-keepattributes InnerClasses +-keepattributes EnclosingMethod +-keepattributes Exceptions + +-dontwarn retrofit2.** +-keep class retrofit2.** { *; } + +-keep,allowobfuscation,allowshrinking interface retrofit2.Call +-keep,allowobfuscation,allowshrinking class retrofit2.Response + +-keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation +-dontwarn okhttp3.** +-dontwarn okio.** + +# GSON/Converter rules +-keep class com.google.gson.reflect.TypeToken +-keep class * extends com.google.gson.reflect.TypeToken +-keep class sun.misc.Unsafe { *; } + +# Kotlin Data Class rules +-keepclassmembers class * { + java.lang.Object component1(); + java.lang.Object component2(); + java.lang.Object copy(...); + void (...); +} + +# Your existing project-specific rules start here + -dontwarn javax.annotation.Nullable -dontwarn javax.annotation.ParametersAreNonnullByDefault -keep class com.google.gson.** -keep class org.ergoplatform.api.** -keepclassmembers,allowobfuscation class * { - @com.google.gson.annotations.SerializedName ; + @com.google.gson.annotations.SerializedName ; } --keep class sigmastate.** { *; } --keep class sigma.** { *; } --keep class scalan.** { *; } --keep class special.** { *; } --keep class wrappers.** { *; } --keep class org.ergoplatform.restapi.** { *; } --keep class org.ergoplatform.mosaik.model.** { *; } --keep class org.ergoplatform.appkit.** { *; } +-keep class sigmastate.** { *; } +-keep class sigma.** { *; } +-keep class scalan.** { *; } +-keep class special.** { *; } +-keep class wrappers.** { *; } +-keep class org.ergoplatform.restapi.** { *; } +-keep class org.ergoplatform.mosaik.model.** { *; } +-keep class org.ergoplatform.appkit.** { *; } -keep class scorex.util.encode.** { *; } -keep class scala.util.control.** { *; } -keep class scala.collection.** { *; } From 128ed26ae374ddae4de73dbda01bc433ee0856a3 Mon Sep 17 00:00:00 2001 From: Pavel Holoborodko Date: Sun, 23 Nov 2025 17:27:08 +0900 Subject: [PATCH 18/18] Fixed Gson deserialization failure in release build Resolves the final minification issue that prevented successful JSON deserialization in the signed release APK. The issue was caused by ProGuard/R8 obfuscating the fields of network data models, resulting in Gson failing to map JSON keys to class fields. Basically this disabled sending transactions from wallet --- android/proguard-rules.pro | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/android/proguard-rules.pro b/android/proguard-rules.pro index 240b3423..c2a214d5 100644 --- a/android/proguard-rules.pro +++ b/android/proguard-rules.pro @@ -56,6 +56,11 @@ @com.google.gson.annotations.SerializedName ; } +-keep class org.ergoplatform.explorer.client.model.** { *; } +-keepclasseswithmembers class org.ergoplatform.explorer.client.model.** { + (...); +} + -keep class sigmastate.** { *; } -keep class sigma.** { *; } -keep class scalan.** { *; }