From 5fa6e1ebe9741bb4d6b49f00c2ef01a19e96d382 Mon Sep 17 00:00:00 2001 From: Andy Witrisna Date: Wed, 11 Sep 2024 12:59:33 -0700 Subject: [PATCH] SDKS-3098 Support Android 15 --- CHANGELOG.md | 1 + build.gradle.kts | 6 +-- buildSrc/build.gradle.kts | 2 +- .../main/kotlin/AndroidBuildGradlePlugin.kt | 4 +- forgerock-auth-ui/build.gradle | 4 +- forgerock-auth/build.gradle.kts | 3 -- .../auth/webauthn/WebAuthnRegistration.kt | 18 ++++--- .../android/auth/ServerConfigTest.java | 6 +-- .../auth/callback/AppIntegrityCallbackTest.kt | 4 +- forgerock-core/build.gradle.kts | 1 - forgerock-integration-tests/build.gradle.kts | 3 +- gradle.properties | 3 +- gradle/libs.versions.toml | 52 ++++++++----------- gradle/wrapper/gradle-wrapper.properties | 2 +- ping-protect/build.gradle.kts | 2 - samples/app/build.gradle.kts | 2 +- samples/app/proguard-rules.pro | 4 +- .../callback/DeviceSigningVerifierCallback.kt | 10 ++-- samples/auth/build.gradle | 4 +- samples/authenticator/build.gradle | 4 +- samples/kotlin/build.gradle | 4 +- samples/quickstart/build.gradle | 4 +- .../quickstart/src/main/AndroidManifest.xml | 3 +- 23 files changed, 66 insertions(+), 80 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e5074c1..f1f6debc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - Allow developers to customize SDK Storage [SDKS-3378] - Support PingOne Protect Marketplace Node [SDKS-3279] - Expose Realm, Success Url with SSOToken [SDKS-3351] +- Support Android 15 [SDKS-3098] #### Fixed - Potential CustomTabManager ServiceConnection leak. [SDKS-3346] diff --git a/build.gradle.kts b/build.gradle.kts index 728a5424..6e6203bf 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -17,7 +17,7 @@ val customTemplatesFolder = file("$projectDir/dokka/templates") buildscript { dependencies { - classpath("com.android.tools.build:gradle:8.2.2") + classpath("com.android.tools.build:gradle:8.6.0") classpath("com.adarshr:gradle-test-logger-plugin:2.0.0") classpath("com.google.gms:google-services:4.3.15") } @@ -27,8 +27,8 @@ plugins { id("io.github.gradle-nexus.publish-plugin") version "1.1.0" id("org.sonatype.gradle.plugins.scan") version "2.4.0" id("org.jetbrains.dokka") version "1.9.10" - id("com.android.application") version "8.3.2" apply false - id("com.android.library") version "8.3.2" apply false + id("com.android.application") version "8.6.0" apply false + id("com.android.library") version "8.6.0" apply false id("org.jetbrains.kotlin.android") version "1.9.22" apply false } diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index af3c4a62..976abeee 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -15,5 +15,5 @@ repositories { } dependencies { - implementation("com.android.tools.build:gradle-api:8.3.2") + implementation("com.android.tools.build:gradle-api:8.6.0") } \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/AndroidBuildGradlePlugin.kt b/buildSrc/src/main/kotlin/AndroidBuildGradlePlugin.kt index 25625bad..744d2895 100644 --- a/buildSrc/src/main/kotlin/AndroidBuildGradlePlugin.kt +++ b/buildSrc/src/main/kotlin/AndroidBuildGradlePlugin.kt @@ -14,7 +14,7 @@ class AndroidBuildGradlePlugin : Plugin { override fun apply(project: Project) { project.android().apply { - compileSdk = 34; + compileSdk = 35; defaultConfig { minSdk = 23 } @@ -30,7 +30,7 @@ class AndroidBuildGradlePlugin : Plugin { } } testOptions { - targetSdk = 34 + targetSdk = 35 unitTests { isIncludeAndroidResources = true isReturnDefaultValues = true diff --git a/forgerock-auth-ui/build.gradle b/forgerock-auth-ui/build.gradle index 6860fd6b..09160e8b 100644 --- a/forgerock-auth-ui/build.gradle +++ b/forgerock-auth-ui/build.gradle @@ -14,11 +14,11 @@ apply plugin: 'org.jetbrains.dokka' android { namespace 'org.forgerock.android.auth.ui' - compileSdk 34 + compileSdk 35 defaultConfig { minSdkVersion 23 - targetSdkVersion 34 + targetSdkVersion 35 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/forgerock-auth/build.gradle.kts b/forgerock-auth/build.gradle.kts index 94aaacc0..28fc9935 100644 --- a/forgerock-auth/build.gradle.kts +++ b/forgerock-auth/build.gradle.kts @@ -87,7 +87,6 @@ dependencies { compileOnly(libs.integrity) androidTestImplementation(libs.androidx.test.ext.junit) - androidTestImplementation(libs.espresso.core) androidTestImplementation(libs.mockwebserver) androidTestImplementation(libs.commons.io) androidTestImplementation(libs.rules) @@ -108,7 +107,6 @@ dependencies { testImplementation(libs.androidx.test.core) testImplementation(libs.androidx.test.ext.junit) testImplementation(libs.androidx.test.runner) - testImplementation(libs.androidx.fragment.testing) testImplementation(libs.nimbus.jose.jwt) testImplementation(libs.junit) @@ -116,7 +114,6 @@ dependencies { testImplementation(libs.mockwebserver) testImplementation(libs.commons.io) testImplementation(libs.assertj.core) - testImplementation(libs.androidx.espresso.intents) testImplementation(libs.appauth) testImplementation(libs.play.services.fido) testImplementation(libs.play.services.auth) diff --git a/forgerock-auth/src/main/java/org/forgerock/android/auth/webauthn/WebAuthnRegistration.kt b/forgerock-auth/src/main/java/org/forgerock/android/auth/webauthn/WebAuthnRegistration.kt index d84fb6c3..03786d86 100644 --- a/forgerock-auth/src/main/java/org/forgerock/android/auth/webauthn/WebAuthnRegistration.kt +++ b/forgerock-auth/src/main/java/org/forgerock/android/auth/webauthn/WebAuthnRegistration.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 ForgeRock. All rights reserved. + * Copyright (c) 2022 - 2024 ForgeRock. All rights reserved. * * This software may be modified and distributed under the terms * of the MIT license. See the LICENSE file for details. @@ -159,13 +159,15 @@ open class WebAuthnRegistration() : WebAuthn() { //Extension to support username-less if (options.authenticatorSelection?.requireResidentKey == true && options.authenticatorSelection?.residentKeyRequirement == ResidentKeyRequirement.RESIDENT_KEY_DISCOURAGED) { - val source = PublicKeyCredentialSource.builder() - .id(publicKeyCredential.rawId) - .rpid(options.rp.id) - .userHandle(Base64.decode(options.user.id, Base64.URL_SAFE or Base64.NO_WRAP)) - .otherUI(options.user.displayName).build() - persist(context, source) - } + publicKeyCredential.rawId?.let { + val source = PublicKeyCredentialSource.builder() + .id(it) + .rpid(options.rp.id) + .userHandle(Base64.decode(options.user.id, Base64.URL_SAFE or Base64.NO_WRAP)) + .otherUI(options.user.displayName).build() + persist(context, source) + } + } return (sb.toString()) } diff --git a/forgerock-auth/src/test/java/org/forgerock/android/auth/ServerConfigTest.java b/forgerock-auth/src/test/java/org/forgerock/android/auth/ServerConfigTest.java index a0fd7936..6faabc30 100644 --- a/forgerock-auth/src/test/java/org/forgerock/android/auth/ServerConfigTest.java +++ b/forgerock-auth/src/test/java/org/forgerock/android/auth/ServerConfigTest.java @@ -81,7 +81,7 @@ public void testSha256Pinning() throws InterruptedException { ServerConfig serverConfig = ServerConfig.builder() .context(context) .url("https://api.ipify.org") - .pin("tWrCr1GAahCs75/Wfx+5pjRXCtOTzMPyw8TNPPivO0I=") + .pin("5nPgyHPl6VBofcqTPenG8H7ymlYexiUiimAQNRZa07I=") .build(); OkHttpClient client = OkHttpClientProvider.getInstance().lookup(serverConfig); @@ -123,7 +123,7 @@ public void testMultiplePinning() throws InterruptedException { ServerConfig serverConfig = ServerConfig.builder() .context(context) .url("https://api.ipify.org") - .pin("tWrCr1GAahCs75/Wfx+5pjRXCtOTzMPyw8TNPPivO0I=") + .pin("5nPgyHPl6VBofcqTPenG8H7ymlYexiUiimAQNRZa07I=") .pin("invalid") .build(); @@ -215,7 +215,7 @@ public void testBuildStepWithCustomPin() throws InterruptedException { .context(context) .url("https://api.ipify.org") .buildStep(builder -> builder.certificatePinner( - new CertificatePinner.Builder().add("api.ipify.org", "sha256/tWrCr1GAahCs75/Wfx+5pjRXCtOTzMPyw8TNPPivO0I=" ).build())) + new CertificatePinner.Builder().add("api.ipify.org", "sha256/5nPgyHPl6VBofcqTPenG8H7ymlYexiUiimAQNRZa07I=" ).build())) .build(); OkHttpClient client = OkHttpClientProvider.getInstance().lookup(serverConfig); diff --git a/forgerock-auth/src/test/java/org/forgerock/android/auth/callback/AppIntegrityCallbackTest.kt b/forgerock-auth/src/test/java/org/forgerock/android/auth/callback/AppIntegrityCallbackTest.kt index 80f1a44a..90b2d688 100644 --- a/forgerock-auth/src/test/java/org/forgerock/android/auth/callback/AppIntegrityCallbackTest.kt +++ b/forgerock-auth/src/test/java/org/forgerock/android/auth/callback/AppIntegrityCallbackTest.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 ForgeRock. All rights reserved. + * Copyright (c) 2023 - 2024 ForgeRock. All rights reserved. * * This software may be modified and distributed under the terms * of the MIT license. See the LICENSE file for details. @@ -133,7 +133,7 @@ class AppIntegrityCallbackTest { override fun token(): String { val token = JSONObject() token.put("value", "test-standard-integrity-token") - token.put("requestHash", request.a()) + token.put("requestHash", request.requestHash()) return token.toString() } } diff --git a/forgerock-core/build.gradle.kts b/forgerock-core/build.gradle.kts index 9285ee03..71fe7e4b 100644 --- a/forgerock-core/build.gradle.kts +++ b/forgerock-core/build.gradle.kts @@ -74,7 +74,6 @@ dependencies { testImplementation(libs.androidx.test.runner) androidTestImplementation(libs.androidx.test.ext.junit) - androidTestImplementation(libs.espresso.core) androidTestImplementation(libs.mockwebserver) androidTestImplementation(libs.commons.io) androidTestImplementation(libs.rules) diff --git a/forgerock-integration-tests/build.gradle.kts b/forgerock-integration-tests/build.gradle.kts index 6cc8c236..a6e47f4d 100644 --- a/forgerock-integration-tests/build.gradle.kts +++ b/forgerock-integration-tests/build.gradle.kts @@ -25,14 +25,13 @@ dependencies { api(project(":forgerock-auth")) api(project(":ping-protect")) - implementation(libs.appcompat) + implementation(libs.androidx.appcompat) implementation(libs.material) implementation(libs.firebase.crashlytics.buildtools) implementation(libs.kotlinx.serialization.json) testImplementation(libs.junit) androidTestImplementation(libs.androidx.test.ext.junit) - androidTestImplementation(libs.espresso.core) androidTestImplementation(libs.mockwebserver) androidTestImplementation(libs.commons.io) androidTestImplementation(libs.rules) diff --git a/gradle.properties b/gradle.properties index 9c68a887..3b974a33 100644 --- a/gradle.properties +++ b/gradle.properties @@ -25,4 +25,5 @@ GROUP=org.forgerock VERSION=4.6.0-SNAPSHOT VERSION_CODE=24 android.nonTransitiveRClass=false -android.nonFinalResIds=false \ No newline at end of file +android.nonFinalResIds=false +android.suppressUnsupportedCompileSdk=35 \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ed0fd421..ec37c540 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,9 +1,9 @@ [versions] -agp = "8.3.2" -annotation = "1.6.0" +agp = "8.6.0" +annotation = "1.8.2" appauth = "0.11.1" -appcompat = "1.6.1" -assertj-core = "2.9.1" +appcompat = "1.7.0" +assertj-core = "3.19.0" bcpkix-jdk15on = "1.58.0.0" biometric-ktx = "1.2.0-alpha05" commons-io = "2.16.1" @@ -11,38 +11,34 @@ constraintlayout = "2.1.4" easy-random-core = "4.0.0" facebook-login = "16.0.0" firebase-messaging = "23.1.2" -fragment-ktx = "1.6.1" -activity-ktx = "1.6.1" -integrity = "1.3.0" +integrity = "1.4.0" kotlin = "1.9.22" junit = "4.13.2" -androidx-test-core = "1.5.0" -androidx-test-ext-junit = "1.1.5" -androidx-test-runner = "1.5.2" -kotlinx-coroutines-play-services = "1.7.2" +androidx-test-core = "1.6.1" +androidx-test-ext-junit = "1.2.1" +androidx-test-runner = "1.6.2" +kotlinx-coroutines-play-services = "1.8.0" lombok-version = "1.18.28" -mockito-core = "4.8.1" +mockito-core = "5.4.0" mockito-kotlin = "4.0.0" mockwebserver = "4.12.0" nimbus-jose-jwt = "9.37.3" -okhttp = "4.11.0" -org-robolectric-robolectric = "4.9.2" -espresso-core = "3.5.1" -io-mockk = "1.13.9" -org-jetbrains-kotlinx = "1.7.2" +okhttp = "4.12.0" +org-robolectric-robolectric = "4.12.2" +io-mockk = "1.13.11" +org-jetbrains-kotlinx = "1.8.0" com-pingidentity-signals = "5.1.2" -core-ktx = "1.12.0" -material = "1.11.0" -play-services-auth = "20.6.0" -play-services-fido = "20.0.1" -play-services-location = "21.0.1" -play-services-safetynet = "18.0.1" +material = "1.12.0" +play-services-auth = "21.2.0" +play-services-fido = "21.1.0" +play-services-location = "21.3.0" +play-services-safetynet = "18.1.0" powermock-module-junit4 = "2.0.9" powermock-api-mockito2 = "2.0.9" recaptchaEnterprise = "18.6.0" -rules = "1.5.0" +rules = "1.6.1" security-crypto = "1.1.0-alpha06" -firebase-crashlytics-buildtools = "2.9.9" +firebase-crashlytics-buildtools = "3.0.2" pluginSserialization = "2.0.0" serialization = "1.6.3" @@ -51,10 +47,6 @@ androidx-annotation = { module = "androidx.annotation:annotation", version.ref = androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "appcompat" } androidx-biometric-ktx = { module = "androidx.biometric:biometric-ktx", version.ref = "biometric-ktx" } androidx-constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "constraintlayout" } -androidx-espresso-intents = { module = "androidx.test.espresso:espresso-intents", version.ref = "espresso-core" } -androidx-fragment-ktx = { module = "androidx.fragment:fragment-ktx", version.ref = "fragment-ktx" } -androidx-activity-ktx = { module = "androidx.activity:activity-ktx", version.ref = "activity-ktx" } -androidx-fragment-testing = { module = "androidx.fragment:fragment-testing", version.ref = "fragment-ktx" } androidx-security-crypto = { module = "androidx.security:security-crypto", version.ref = "security-crypto" } appauth = { module = "net.openid:appauth", version.ref = "appauth" } assertj-core = { module = "org.assertj:assertj-core", version.ref = "assertj-core" } @@ -77,11 +69,9 @@ mockwebserver = { module = "com.squareup.okhttp3:mockwebserver", version.ref = " nimbus-jose-jwt = { module = "com.nimbusds:nimbus-jose-jwt", version.ref = "nimbus-jose-jwt" } okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" } org-robolectric-robolectric = { group = "org.robolectric", name = "robolectric", version.ref = "org-robolectric-robolectric" } -espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espresso-core" } io-mockk = { group = "io.mockk", name = "mockk", version.ref = "io-mockk" } org-jetbrains-kotlinx = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "org-jetbrains-kotlinx" } com-pingidentity-signals = { group = "com.pingidentity.signals", name = "android-sdk", version.ref = "com-pingidentity-signals" } -appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } material = { group = "com.google.android.material", name = "material", version.ref = "material" } play-services-auth = { module = "com.google.android.gms:play-services-auth", version.ref = "play-services-auth" } play-services-fido = { module = "com.google.android.gms:play-services-fido", version.ref = "play-services-fido" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 72ad0731..8405e511 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Mon Jun 03 12:27:16 PDT 2024 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/ping-protect/build.gradle.kts b/ping-protect/build.gradle.kts index 1feb4835..cf314999 100644 --- a/ping-protect/build.gradle.kts +++ b/ping-protect/build.gradle.kts @@ -63,11 +63,9 @@ dependencies { testImplementation(libs.androidx.test.core) testImplementation(libs.androidx.test.runner) testImplementation(libs.androidx.test.ext.junit) - testImplementation(libs.espresso.core) // Mockk testImplementation(libs.io.mockk) androidTestImplementation(libs.androidx.test.ext.junit) - androidTestImplementation(libs.espresso.core) } \ No newline at end of file diff --git a/samples/app/build.gradle.kts b/samples/app/build.gradle.kts index 9dac0e36..ab88bf49 100644 --- a/samples/app/build.gradle.kts +++ b/samples/app/build.gradle.kts @@ -12,7 +12,7 @@ plugins { android { namespace = "com.example.app" - compileSdk = 34 + compileSdk = 35 defaultConfig { minSdk = 23 } diff --git a/samples/app/proguard-rules.pro b/samples/app/proguard-rules.pro index ff59496d..eeb18fb1 100644 --- a/samples/app/proguard-rules.pro +++ b/samples/app/proguard-rules.pro @@ -18,4 +18,6 @@ # If you keep the line number information, uncomment this to # hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file +#-renamesourcefileattribute SourceFile + +-dontwarn com.google.android.apps.common.proguard.SideEffectFree \ No newline at end of file diff --git a/samples/app/src/main/java/com/example/app/callback/DeviceSigningVerifierCallback.kt b/samples/app/src/main/java/com/example/app/callback/DeviceSigningVerifierCallback.kt index e870a8d2..88857b91 100644 --- a/samples/app/src/main/java/com/example/app/callback/DeviceSigningVerifierCallback.kt +++ b/samples/app/src/main/java/com/example/app/callback/DeviceSigningVerifierCallback.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 ForgeRock. All rights reserved. + * Copyright (c) 2023 -2024 ForgeRock. All rights reserved. * * This software may be modified and distributed under the terms * of the MIT license. See the LICENSE file for details. @@ -18,8 +18,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.wrapContentSize -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Button import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults @@ -57,7 +55,6 @@ fun DeviceSigningVerifierCallback(callback: DeviceSigningVerifierCallback, val currentOnCompleted by rememberUpdatedState(onCompleted) val coroutineScope = rememberCoroutineScope() val context = LocalContext.current - val scroll = rememberScrollState(0) var showProgress by remember { mutableStateOf(true) } @@ -85,8 +82,7 @@ fun DeviceSigningVerifierCallback(callback: DeviceSigningVerifierCallback, border = BorderStroke(2.dp, Color.Black), shape = MaterialTheme.shapes.medium) { Text(modifier = Modifier - .padding(4.dp) - .verticalScroll(scroll), + .padding(4.dp), text = callback.challenge) } Spacer(modifier = Modifier.height(8.dp)) @@ -143,9 +139,11 @@ suspend fun sign(context: Context, callback: DeviceSigningVerifierCallback) { //custom error example //callback.setClientError("UnAuth") } + is DeviceBindingErrorStatus.Abort -> { return@loop } + is DeviceBindingErrorStatus.ClientNotRegistered -> { return@loop } diff --git a/samples/auth/build.gradle b/samples/auth/build.gradle index 94695e6b..f66d4217 100644 --- a/samples/auth/build.gradle +++ b/samples/auth/build.gradle @@ -12,11 +12,11 @@ android { namespace 'org.forgerock.auth' - compileSdk 34 + compileSdk 35 defaultConfig { applicationId "org.forgerock.auth" minSdkVersion 23 - targetSdkVersion 34 + targetSdkVersion 35 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/samples/authenticator/build.gradle b/samples/authenticator/build.gradle index 4bb62bc5..b109ceca 100644 --- a/samples/authenticator/build.gradle +++ b/samples/authenticator/build.gradle @@ -10,12 +10,12 @@ apply plugin: 'com.android.application' android { namespace 'org.forgerock.authenticator.sample' - compileSdk 34 + compileSdk 35 defaultConfig { applicationId "org.forgerock.authenticator.sample" minSdkVersion 23 - targetSdkVersion 34 + targetSdkVersion 35 versionCode 1 versionName "1.0" diff --git a/samples/kotlin/build.gradle b/samples/kotlin/build.gradle index 8a84f364..ecaae714 100644 --- a/samples/kotlin/build.gradle +++ b/samples/kotlin/build.gradle @@ -13,12 +13,12 @@ plugins { android { namespace 'com.forgerock.kotlinapp' - compileSdk 34 + compileSdk 35 defaultConfig { applicationId "com.forgerock.kotlinapp" minSdk 23 - targetSdk 34 + targetSdk 35 versionCode 1 versionName "1.0" diff --git a/samples/quickstart/build.gradle b/samples/quickstart/build.gradle index f2a068ab..ff00ea49 100644 --- a/samples/quickstart/build.gradle +++ b/samples/quickstart/build.gradle @@ -12,12 +12,12 @@ plugins { android { namespace 'org.forgerock.quickstart' - compileSdk 34 + compileSdk 35 defaultConfig { applicationId "org.forgerock.quickstart" minSdkVersion 23 - targetSdkVersion 34 + targetSdkVersion 35 versionCode 1 versionName "1.0" diff --git a/samples/quickstart/src/main/AndroidManifest.xml b/samples/quickstart/src/main/AndroidManifest.xml index 256952db..0cb43e2f 100644 --- a/samples/quickstart/src/main/AndroidManifest.xml +++ b/samples/quickstart/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ -