diff --git a/.github/workflows/archive.yml b/.github/workflows/archive.yml index d41537923..40344f610 100644 --- a/.github/workflows/archive.yml +++ b/.github/workflows/archive.yml @@ -7,7 +7,7 @@ jobs: steps: - uses: actions/setup-java@v2 with: - java-version: '11' + java-version: '17' distribution: 'temurin' - name: checkout uses: actions/checkout@v2 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6ed6c7a7e..46f49645d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,7 +12,7 @@ jobs: steps: - uses: actions/setup-java@v2 with: - java-version: '11' + java-version: '17' distribution: 'temurin' - name: checkout uses: actions/checkout@v2 diff --git a/.github/workflows/emulator.yml b/.github/workflows/emulator.yml index 0a599c15a..de92c9393 100644 --- a/.github/workflows/emulator.yml +++ b/.github/workflows/emulator.yml @@ -17,7 +17,7 @@ jobs: steps: - uses: actions/setup-java@v2 with: - java-version: '11' + java-version: '17' distribution: 'temurin' - name: checkout uses: actions/checkout@v2 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e678fedd6..f743fca58 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -7,7 +7,7 @@ jobs: steps: - uses: actions/setup-java@v2 with: - java-version: '11' + java-version: '17' distribution: 'temurin' - name: checkout uses: actions/checkout@v2 diff --git a/app/build.gradle b/app/build.gradle index fc74ac23d..f4b090bdb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,6 +1,7 @@ plugins { id 'com.android.application' - id 'org.jetbrains.kotlin.android' + id 'kotlin-android' + id 'kotlin-kapt' } apply from: 'jacoco.gradle' apply plugin: 'org.jetbrains.kotlin.android' @@ -86,8 +87,11 @@ android { } } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = JavaVersion.VERSION_17 } buildFeatures { viewBinding = true @@ -120,7 +124,7 @@ dependencies { implementation 'androidx.work:work-runtime:2.8.1' // Third-party - annotationProcessor libs.dbflow.processor + kapt libs.dbflow.processor implementation libs.dbflow.core implementation libs.dbflow.lib @@ -131,7 +135,7 @@ dependencies { implementation libs.xanscale.localhost.toolkit implementation libs.lottie - implementation libs.markwon + implementation libs.markwon.core implementation libs.commons.io //arcview to fragment_dashboard implementation libs.shapeofview @@ -145,7 +149,7 @@ dependencies { // Dependency Injection implementation libs.google.dagger - annotationProcessor libs.google.dagger.compiler + kapt libs.google.dagger.compiler // Logger implementation project(':applogger') @@ -162,7 +166,7 @@ dependencies { testImplementation libs.robolectric testImplementation libs.faker testImplementation libs.ooni.oonimkall - testAnnotationProcessor libs.google.dagger.compiler + kaptTest libs.google.dagger.compiler // Instrumentation Testing androidTestImplementation project(':shared-test') @@ -175,7 +179,7 @@ dependencies { androidTestImplementation libs.androidx.espresso.contrib androidTestImplementation libs.androidx.espresso.core androidTestImplementation libs.barista - androidTestAnnotationProcessor libs.google.dagger.compiler + kaptAndroidTest libs.google.dagger.compiler } static def versionCodeDate() { diff --git a/app/jacoco.gradle b/app/jacoco.gradle index f75812752..15b2b36c1 100644 --- a/app/jacoco.gradle +++ b/app/jacoco.gradle @@ -48,13 +48,19 @@ task jacocoAndroidTestReport(type: JacocoReport) { executionData.from += fileTree(dir: codeCoverageDataLocation, includes: ['**/*.ec']) } - reports { - html.enabled true - html.destination file("${buildDir}/reports/coverage") - xml.enabled true - xml.destination file("${buildDir}/reports/coverage.xml") - csv.enabled false - } + reports { + html { + enabled true + destination file("${buildDir}/reports/coverage") + } + xml { + enabled true + destination file("${buildDir}/reports/coverage.xml") + } + csv { + enabled false + } + } doLast { println "Wrote HTML coverage report to ${reports.html.destination}/index.html" diff --git a/app/src/main/java/org/openobservatory/ooniprobe/activity/MeasurementDetailActivity.java b/app/src/main/java/org/openobservatory/ooniprobe/activity/MeasurementDetailActivity.java index ba7b9b4d3..73f6b9b3d 100644 --- a/app/src/main/java/org/openobservatory/ooniprobe/activity/MeasurementDetailActivity.java +++ b/app/src/main/java/org/openobservatory/ooniprobe/activity/MeasurementDetailActivity.java @@ -3,7 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.graphics.Color; import android.net.Uri; import android.os.Bundle; import android.view.Menu; @@ -14,9 +13,10 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBar; import androidx.fragment.app.Fragment; + import com.google.android.material.snackbar.Snackbar; import com.google.gson.Gson; -import localhost.toolkit.app.fragment.ConfirmDialogFragment; + import org.openobservatory.ooniprobe.R; import org.openobservatory.ooniprobe.common.PreferenceManager; import org.openobservatory.ooniprobe.common.ResubmitTask; @@ -24,24 +24,47 @@ import org.openobservatory.ooniprobe.domain.GetTestSuite; import org.openobservatory.ooniprobe.domain.MeasurementsManager; import org.openobservatory.ooniprobe.domain.callback.DomainCallback; -import org.openobservatory.ooniprobe.fragment.measurement.*; +import org.openobservatory.ooniprobe.fragment.measurement.DashFragment; +import org.openobservatory.ooniprobe.fragment.measurement.FacebookMessengerFragment; +import org.openobservatory.ooniprobe.fragment.measurement.FailedFragment; +import org.openobservatory.ooniprobe.fragment.measurement.HeaderNdtFragment; +import org.openobservatory.ooniprobe.fragment.measurement.HeaderOutcomeFragment; +import org.openobservatory.ooniprobe.fragment.measurement.HttpHeaderFieldManipulationFragment; +import org.openobservatory.ooniprobe.fragment.measurement.HttpInvalidRequestLineFragment; +import org.openobservatory.ooniprobe.fragment.measurement.NdtFragment; +import org.openobservatory.ooniprobe.fragment.measurement.PsiphonFragment; +import org.openobservatory.ooniprobe.fragment.measurement.RiseupVPNFragment; +import org.openobservatory.ooniprobe.fragment.measurement.SignalFragment; +import org.openobservatory.ooniprobe.fragment.measurement.TelegramFragment; +import org.openobservatory.ooniprobe.fragment.measurement.TorFragment; +import org.openobservatory.ooniprobe.fragment.measurement.WebConnectivityFragment; +import org.openobservatory.ooniprobe.fragment.measurement.WhatsappFragment; import org.openobservatory.ooniprobe.fragment.resultHeader.ResultHeaderDetailFragment; import org.openobservatory.ooniprobe.model.database.Measurement; import org.openobservatory.ooniprobe.model.database.Network; import org.openobservatory.ooniprobe.test.suite.OONIRunSuite; import org.openobservatory.ooniprobe.test.suite.PerformanceSuite; -import org.openobservatory.ooniprobe.test.test.*; -import ru.noties.markwon.Markwon; +import org.openobservatory.ooniprobe.test.test.Dash; +import org.openobservatory.ooniprobe.test.test.FacebookMessenger; +import org.openobservatory.ooniprobe.test.test.HttpHeaderFieldManipulation; +import org.openobservatory.ooniprobe.test.test.HttpInvalidRequestLine; +import org.openobservatory.ooniprobe.test.test.Ndt; +import org.openobservatory.ooniprobe.test.test.Psiphon; +import org.openobservatory.ooniprobe.test.test.RiseupVPN; +import org.openobservatory.ooniprobe.test.test.Signal; +import org.openobservatory.ooniprobe.test.test.Telegram; +import org.openobservatory.ooniprobe.test.test.Tor; +import org.openobservatory.ooniprobe.test.test.WebConnectivity; +import org.openobservatory.ooniprobe.test.test.Whatsapp; -import javax.inject.Inject; import java.io.Serializable; import java.util.Collections; import java.util.Objects; import javax.inject.Inject; +import io.noties.markwon.Markwon; import localhost.toolkit.app.fragment.ConfirmDialogFragment; -import ru.noties.markwon.Markwon; public class MeasurementDetailActivity extends AbstractActivity implements ConfirmDialogFragment.OnConfirmedListener { private static final String ID = "id"; @@ -241,7 +264,9 @@ public void onError(String msg) { binding.log.setVisibility(View.GONE); if (!measurementsManager.hasReportId(measurement)) binding.explorer.setVisibility(View.GONE); - Markwon.setMarkdown(binding.methodology, getString(R.string.TestResults_Details_Methodology_Paragraph, getString(measurement.getTest().getUrlResId()))); + Markwon.builder(this) + .build() + .setMarkdown(binding.methodology, getString(R.string.TestResults_Details_Methodology_Paragraph, getString(measurement.getTest().getUrlResId()))); load(); binding.log.setOnClickListener(v -> logClick()); binding.data.setOnClickListener(v -> dataClick()); diff --git a/app/src/main/java/org/openobservatory/ooniprobe/activity/OverviewActivity.java b/app/src/main/java/org/openobservatory/ooniprobe/activity/OverviewActivity.java index 4ffe6f062..c254c1b25 100644 --- a/app/src/main/java/org/openobservatory/ooniprobe/activity/OverviewActivity.java +++ b/app/src/main/java/org/openobservatory/ooniprobe/activity/OverviewActivity.java @@ -2,7 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.graphics.Color; import android.os.Bundle; import android.util.Log; import android.view.View; @@ -35,7 +34,7 @@ import javax.inject.Inject; -import ru.noties.markwon.Markwon; +import io.noties.markwon.Markwon; public class OverviewActivity extends AbstractActivity { private static final String TEST = "test"; @@ -157,12 +156,14 @@ private void updateViewFromDescriptor(TestDescriptor descriptor) { @BindingAdapter(value = {"richText", "testSuiteName"}) public static void setRichText(TextView view, String richText,String testSuiteName) { try { + Markwon markwon = Markwon.builder(view.getContext()).build(); + if (Objects.equals(testSuiteName,ExperimentalSuite.NAME)) { - Markwon.setMarkdown(view, richText); + markwon.setMarkdown(view, richText); if (TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault()) == ViewCompat.LAYOUT_DIRECTION_RTL) view.setTextDirection(View.TEXT_DIRECTION_RTL); } else { - Markwon.setMarkdown(view, richText); + markwon.setMarkdown(view, richText); } } catch (Exception e) { e.printStackTrace(); diff --git a/app/src/main/java/org/openobservatory/ooniprobe/activity/ProxyActivity.java b/app/src/main/java/org/openobservatory/ooniprobe/activity/ProxyActivity.java index 902fec4c8..fdc5bb245 100644 --- a/app/src/main/java/org/openobservatory/ooniprobe/activity/ProxyActivity.java +++ b/app/src/main/java/org/openobservatory/ooniprobe/activity/ProxyActivity.java @@ -14,7 +14,7 @@ import org.openobservatory.ooniprobe.common.ProxyProtocol; import org.openobservatory.ooniprobe.common.ProxySettings; import org.openobservatory.ooniprobe.databinding.ActivityProxyBinding; -import ru.noties.markwon.Markwon; +import io.noties.markwon.Markwon; import javax.inject.Inject; import java.net.URISyntaxException; @@ -119,7 +119,9 @@ public void onCreate(Bundle savedInstanceState) { setContentView(binding.getRoot()); // We fill the footer that helps users to understand this settings screen. - Markwon.setMarkdown(binding.proxyFooter, getString(R.string.Settings_Proxy_Footer)); + Markwon.builder(this) + .build() + .setMarkdown(binding.proxyFooter, getString(R.string.Settings_Proxy_Footer)); // We read settings and configure the initial view. loadSettingsAndConfigureInitialView(); diff --git a/app/src/main/java/org/openobservatory/ooniprobe/fragment/measurement/PsiphonFragment.java b/app/src/main/java/org/openobservatory/ooniprobe/fragment/measurement/PsiphonFragment.java index ae697cff3..f1e51559a 100644 --- a/app/src/main/java/org/openobservatory/ooniprobe/fragment/measurement/PsiphonFragment.java +++ b/app/src/main/java/org/openobservatory/ooniprobe/fragment/measurement/PsiphonFragment.java @@ -10,7 +10,8 @@ import org.openobservatory.ooniprobe.R; import org.openobservatory.ooniprobe.databinding.FragmentMeasurementPsiphonBinding; import org.openobservatory.ooniprobe.model.database.Measurement; -import ru.noties.markwon.Markwon; + +import io.noties.markwon.Markwon; public class PsiphonFragment extends Fragment { private static final String MEASUREMENT = "measurement"; @@ -28,7 +29,9 @@ public static PsiphonFragment newInstance(Measurement measurement) { Measurement measurement = (Measurement) getArguments().getSerializable(MEASUREMENT); assert measurement != null; FragmentMeasurementPsiphonBinding binding = FragmentMeasurementPsiphonBinding.inflate(inflater,container,false); - Markwon.setMarkdown(binding.desc, + Markwon.builder(getContext()) + .build() + .setMarkdown(binding.desc, measurement.is_anomaly ? getString(R.string.TestResults_Details_Circumvention_Psiphon_Blocked_Content_Paragraph) : getString(R.string.TestResults_Details_Circumvention_Psiphon_Reachable_Content_Paragraph) diff --git a/app/src/main/java/org/openobservatory/ooniprobe/fragment/measurement/RiseupVPNFragment.java b/app/src/main/java/org/openobservatory/ooniprobe/fragment/measurement/RiseupVPNFragment.java index 83670bd5e..32401d0da 100644 --- a/app/src/main/java/org/openobservatory/ooniprobe/fragment/measurement/RiseupVPNFragment.java +++ b/app/src/main/java/org/openobservatory/ooniprobe/fragment/measurement/RiseupVPNFragment.java @@ -10,7 +10,8 @@ import org.openobservatory.ooniprobe.R; import org.openobservatory.ooniprobe.databinding.FragmentMeasurementRiseupvpnBinding; import org.openobservatory.ooniprobe.model.database.Measurement; -import ru.noties.markwon.Markwon; + +import io.noties.markwon.Markwon; public class RiseupVPNFragment extends Fragment { private static final String MEASUREMENT = "measurement"; @@ -28,7 +29,9 @@ public static RiseupVPNFragment newInstance(Measurement measurement) { Measurement measurement = (Measurement) getArguments().getSerializable(MEASUREMENT); assert measurement != null; FragmentMeasurementRiseupvpnBinding binding = FragmentMeasurementRiseupvpnBinding.inflate(inflater,container,false); - Markwon.setMarkdown(binding.desc, + Markwon.builder(getContext()) + .build() + .setMarkdown(binding.desc, measurement.is_anomaly ? getString(R.string.TestResults_Details_Circumvention_RiseupVPN_Blocked_Content_Paragraph) : getString(R.string.TestResults_Details_Circumvention_RiseupVPN_Reachable_Content_Paragraph) diff --git a/app/src/main/java/org/openobservatory/ooniprobe/fragment/measurement/TorFragment.java b/app/src/main/java/org/openobservatory/ooniprobe/fragment/measurement/TorFragment.java index 3b47b9dcd..d859d2eca 100644 --- a/app/src/main/java/org/openobservatory/ooniprobe/fragment/measurement/TorFragment.java +++ b/app/src/main/java/org/openobservatory/ooniprobe/fragment/measurement/TorFragment.java @@ -10,7 +10,8 @@ import org.openobservatory.ooniprobe.R; import org.openobservatory.ooniprobe.databinding.FragmentMeasurementTorBinding; import org.openobservatory.ooniprobe.model.database.Measurement; -import ru.noties.markwon.Markwon; + +import io.noties.markwon.Markwon; public class TorFragment extends Fragment { private static final String MEASUREMENT = "measurement"; @@ -30,7 +31,9 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c Measurement measurement = (Measurement) getArguments().getSerializable(MEASUREMENT); assert measurement != null; FragmentMeasurementTorBinding binding = FragmentMeasurementTorBinding.inflate(inflater,container,false); - Markwon.setMarkdown(binding.desc, + Markwon.builder(getContext()) + .build() + .setMarkdown(binding.desc, measurement.is_anomaly ? getString(R.string.TestResults_Details_Circumvention_Tor_Blocked_Content_Paragraph) : getString(R.string.TestResults_Details_Circumvention_Tor_Reachable_Content_Paragraph) diff --git a/app/src/main/java/org/openobservatory/ooniprobe/fragment/measurement/WebConnectivityFragment.java b/app/src/main/java/org/openobservatory/ooniprobe/fragment/measurement/WebConnectivityFragment.java index e39131b45..6951ada06 100644 --- a/app/src/main/java/org/openobservatory/ooniprobe/fragment/measurement/WebConnectivityFragment.java +++ b/app/src/main/java/org/openobservatory/ooniprobe/fragment/measurement/WebConnectivityFragment.java @@ -10,7 +10,8 @@ import org.openobservatory.ooniprobe.R; import org.openobservatory.ooniprobe.databinding.FragmentMeasurementWebconnectivityBinding; import org.openobservatory.ooniprobe.model.database.Measurement; -import ru.noties.markwon.Markwon; + +import io.noties.markwon.Markwon; public class WebConnectivityFragment extends Fragment { private static final String MEASUREMENT = "measurement"; @@ -30,10 +31,11 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c Measurement measurement = (Measurement) getArguments().getSerializable(MEASUREMENT); assert measurement != null; FragmentMeasurementWebconnectivityBinding binding = FragmentMeasurementWebconnectivityBinding.inflate(inflater,container,false); + Markwon markwon = Markwon.builder(getContext()).build(); if (measurement.is_anomaly) - Markwon.setMarkdown(binding.desc, getString(R.string.TestResults_Details_Websites_LikelyBlocked_Content_Paragraph, measurement.url.url, getString(measurement.getTestKeys().getWebsiteBlocking()))); + markwon.setMarkdown(binding.desc, getString(R.string.TestResults_Details_Websites_LikelyBlocked_Content_Paragraph, measurement.url.url, getString(measurement.getTestKeys().getWebsiteBlocking()))); else - Markwon.setMarkdown(binding.desc, getString(R.string.TestResults_Details_Websites_Reachable_Content_Paragraph, measurement.url.url)); + markwon.setMarkdown(binding.desc, getString(R.string.TestResults_Details_Websites_Reachable_Content_Paragraph, measurement.url.url)); return binding.getRoot(); } } diff --git a/app/src/main/java/org/openobservatory/ooniprobe/fragment/onboarding/Onboarding3Fragment.java b/app/src/main/java/org/openobservatory/ooniprobe/fragment/onboarding/Onboarding3Fragment.java index 005204e37..3fe085d54 100644 --- a/app/src/main/java/org/openobservatory/ooniprobe/fragment/onboarding/Onboarding3Fragment.java +++ b/app/src/main/java/org/openobservatory/ooniprobe/fragment/onboarding/Onboarding3Fragment.java @@ -14,7 +14,7 @@ import org.openobservatory.ooniprobe.common.ThirdPartyServices; import org.openobservatory.ooniprobe.common.service.ServiceUtil; import org.openobservatory.ooniprobe.databinding.FragmentOnboarding3Binding; -import ru.noties.markwon.Markwon; +import io.noties.markwon.Markwon; import javax.inject.Inject; @@ -31,7 +31,9 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c binding.bullet1.setText(getString(R.string.bullet, getString(R.string.Onboarding_DefaultSettings_Bullet_1))); binding.bullet2.setText(getString(R.string.bullet, getString(R.string.Onboarding_DefaultSettings_Bullet_2))); binding.bullet3.setText(getString(R.string.bullet, getString(R.string.Onboarding_DefaultSettings_Bullet_3))); - Markwon.setMarkdown(binding.paragraph, getString(R.string.Onboarding_DefaultSettings_Paragraph)); + Markwon.builder(getContext()) + .build() + .setMarkdown(binding.paragraph, getString(R.string.Onboarding_DefaultSettings_Paragraph)); binding.master.setOnClickListener(v -> masterClick()); binding.slave.setOnClickListener(v -> slaveClick()); diff --git a/gradle.properties b/gradle.properties index 8de505811..a8c570082 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,10 @@ # http://www.gradle.org/docs/current/userguide/build_environment.html # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. +android.defaults.buildfeatures.buildconfig=true android.enableJetifier=true +android.nonFinalResIds=false +android.nonTransitiveRClass=false android.useAndroidX=true org.gradle.jvmargs=-Xmx1536m # When configured, Gradle will run in incubating parallel mode. diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e1737e670..13d7c2839 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,16 +1,16 @@ [versions] -androidGradlePlugin = "7.4.1" +androidGradlePlugin = "8.1.2" barista = "3.9.0" countlySdk = "23.6.0" faker = "1.2.8" mockitoCore = "5.3.1" mockitoInline = "4.6.1" -robolectric = "4.6.1" +robolectric = "4.10.3" fastlaneScreengrab = "2.0.0" sentryAndroid = "6.3.0" xanscaleLocalhostToolkit = "19.05.01" commonsIo = "2.6" -jacoco = "0.8.5" +jacoco = "0.8.7" kotlin = "1.8.0" # Android X @@ -29,18 +29,18 @@ androidxEspressoCore = "3.5.1" googleGson = "2.8.9" googleGuava = "30.1.1-android" googleMaterial = "1.6.1" -googleDagger = "2.36" +googleDagger = "2.45" googleFirebaseBon = "26.3.0" googlePlaycore = "1.10.3" # OONI compileSdk = "34" lottie = "3.0.7" -markwon = "2.0.1" +markwon = "4.6.2" shapeofview = "1.3.2" targetSdk = "33" minSdk = "21" -oonimkall = "2023.10.20-093834" +oonimkall = "2023.11.21-145557" junit = "4.13.2" dbflow = "4.2.4" @@ -69,7 +69,7 @@ mockito-core = { module = "org.mockito:mockito-core", version.ref = "mockitoCore mockito-inline = { module = "org.mockito:mockito-inline", version.ref = "mockitoInline" } lottie = { module = "com.airbnb.android:lottie", version.ref = "lottie" } -markwon = { module = "ru.noties:markwon", version.ref = "markwon" } +markwon-core = { module = "io.noties.markwon:core", version.ref = "markwon" } retrofit-converter-gson = { module = "com.squareup.retrofit2:converter-gson", version.ref = "retrofitCore" } retrofit-logging-interceptor = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "retrofitLoggingInterceptor" } retrofit-lib = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofitCore" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2ec77e51a..3a0290794 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/shared-test/build.gradle b/shared-test/build.gradle index 607a28dff..34d70a978 100644 --- a/shared-test/build.gradle +++ b/shared-test/build.gradle @@ -1,18 +1,22 @@ plugins { id 'com.android.library' + id 'kotlin-android' + id 'kotlin-kapt' } android { namespace 'org.openobservatory.ooniprobe.shared.test' - compileSdk 33 + compileSdk libs.versions.compileSdk.get().toInteger() defaultConfig { - minSdk 21 + minSdk libs.versions.minSdk.get().toInteger() } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = JavaVersion.VERSION_17 } flavorDimensions = ['testing', 'license'] productFlavors { @@ -41,12 +45,12 @@ dependencies { // Dependency Injection (https://dagger.dev/) implementation libs.google.dagger - annotationProcessor libs.google.dagger.compiler + kapt libs.google.dagger.compiler // Database Library (https://github.com/agrosner/DBFlow) implementation libs.dbflow.core implementation libs.dbflow.lib - annotationProcessor libs.dbflow.processor + kapt libs.dbflow.processor // Gson Serialization Library (https://github.com/google/gson) implementation libs.google.gson @@ -60,6 +64,7 @@ dependencies { implementation libs.retrofit.logging.interceptor implementation libs.androidx.appcompat + implementation libs.xanscale.localhost.toolkit testImplementation libs.junit4 androidTestImplementation libs.androidx.junit