mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 12:23:58 +01:00
Commit 0f0358f22 (Bump minSdk to 29, 2023-04-30) bumped the minSdk to
29 since it was found to be necessary for publishing the app to Play
Store.
On futher analysis[1], it seems like that might actually not be necessary.
The crux is:
1. We (rightly) answer "No" to the Play Console question:
"Does your app access location in the background in APKs or
app bundles targeting Android 9 (Pie) or older (SDK level 28 or lower)?"
2. We do not request for the ACCESS_BACKGROUND_LOCATION permission.
So, it should be safe for us to have the minSdkVersion as 21 itself. If
again we face any rejection of the app update, let us handle it at that
point. I clearly am not able to see any valid reason for Play store to
reject the app update.
[1]: https://github.com/commons-app/apps-android-commons/issues/5223#issuecomment-1569554999
377 lines
18 KiB
Groovy
377 lines
18 KiB
Groovy
plugins {
|
|
id 'com.github.triplet.play' version '2.7.2' apply false
|
|
}
|
|
apply from: '../gitutils.gradle'
|
|
apply plugin: 'com.android.application'
|
|
apply plugin: 'kotlin-android'
|
|
apply plugin: 'kotlin-kapt'
|
|
apply plugin: 'kotlin-android-extensions'
|
|
apply from: "$rootDir/jacoco.gradle"
|
|
|
|
def isRunningOnTravisAndIsNotPRBuild = System.getenv("CI") == "true" && file('../play.p12').exists()
|
|
|
|
if (isRunningOnTravisAndIsNotPRBuild) {
|
|
apply plugin: 'com.github.triplet.play'
|
|
}
|
|
|
|
dependencies {
|
|
|
|
implementation project(':wikimedia-data-client')
|
|
// Utils
|
|
implementation 'in.yuvi:http.fluent:1.3'
|
|
implementation 'com.google.code.gson:gson:2.8.5'
|
|
implementation ("com.squareup.okhttp3:okhttp:$OKHTTP_VERSION"){
|
|
force = true //API 19 support
|
|
}
|
|
implementation 'com.squareup.okio:okio:2.2.2'
|
|
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
|
|
implementation 'io.reactivex.rxjava2:rxjava:2.2.3'
|
|
implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1'
|
|
implementation 'com.jakewharton.rxbinding3:rxbinding-appcompat:3.0.0'
|
|
implementation 'com.jakewharton.rxbinding2:rxbinding-support-v4:2.1.1'
|
|
implementation 'com.jakewharton.rxbinding2:rxbinding-appcompat-v7:2.1.1'
|
|
implementation 'com.jakewharton.rxbinding2:rxbinding-design:2.1.1'
|
|
implementation 'com.facebook.fresco:fresco:1.13.0'
|
|
implementation 'org.apache.commons:commons-lang3:3.8.1'
|
|
|
|
// UI
|
|
implementation 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar'
|
|
implementation 'com.github.chrisbanes:PhotoView:2.0.0'
|
|
implementation 'com.github.pedrovgs:renderers:3.3.3'
|
|
implementation "org.maplibre.gl:android-sdk:$MAPLIBRE_VERSION"
|
|
implementation 'org.maplibre.gl:android-plugin-scalebar-v9:1.0.0'
|
|
|
|
implementation 'com.jakewharton.timber:timber:4.7.1'
|
|
implementation 'com.github.deano2390:MaterialShowcaseView:1.2.0'
|
|
implementation 'com.dinuscxj:circleprogressbar:1.1.1'
|
|
implementation 'com.karumi:dexter:5.0.0'
|
|
implementation "com.jakewharton:butterknife:$BUTTERKNIFE_VERSION"
|
|
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
|
|
|
|
kapt "com.jakewharton:butterknife-compiler:$BUTTERKNIFE_VERSION"
|
|
implementation "com.hannesdorfmann:adapterdelegates4-kotlin-dsl-viewbinding:$ADAPTER_DELEGATES_VERSION"
|
|
implementation "com.hannesdorfmann:adapterdelegates4-pagination:$ADAPTER_DELEGATES_VERSION"
|
|
implementation "androidx.paging:paging-runtime-ktx:$PAGING_VERSION"
|
|
testImplementation "androidx.paging:paging-common-ktx:$PAGING_VERSION"
|
|
implementation "androidx.paging:paging-rxjava2-ktx:$PAGING_VERSION"
|
|
implementation "androidx.recyclerview:recyclerview:1.2.0-alpha02"
|
|
implementation "com.squareup.okhttp3:okhttp-ws:$OKHTTP_VERSION"
|
|
|
|
// Logging
|
|
implementation 'ch.acra:acra-dialog:5.8.4'
|
|
implementation 'ch.acra:acra-mail:5.8.4'
|
|
implementation 'org.slf4j:slf4j-api:1.7.25'
|
|
api('com.github.tony19:logback-android-classic:1.1.1-6') {
|
|
exclude group: 'com.google.android', module: 'android'
|
|
}
|
|
implementation "com.squareup.okhttp3:logging-interceptor:$OKHTTP_VERSION"
|
|
|
|
// Dependency injector
|
|
implementation "com.google.dagger:dagger-android:$DAGGER_VERSION"
|
|
implementation "com.google.dagger:dagger-android-support:$DAGGER_VERSION"
|
|
kapt "com.google.dagger:dagger-android-processor:$DAGGER_VERSION"
|
|
kapt "com.google.dagger:dagger-compiler:$DAGGER_VERSION"
|
|
annotationProcessor "com.google.dagger:dagger-android-processor:$DAGGER_VERSION"
|
|
|
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$KOTLIN_VERSION"
|
|
implementation "org.jetbrains.kotlin:kotlin-reflect:$KOTLIN_VERSION"
|
|
|
|
//Mocking
|
|
testImplementation 'com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0'
|
|
testImplementation 'org.mockito:mockito-inline:2.13.0'
|
|
testImplementation 'org.mockito:mockito-core:2.25.1'
|
|
testImplementation "org.powermock:powermock-module-junit4:2.0.2"
|
|
testImplementation "org.powermock:powermock-api-mockito2:2.0.2"
|
|
|
|
// Unit testing
|
|
testImplementation 'junit:junit:4.13.2'
|
|
testImplementation 'org.robolectric:robolectric:4.6.1'
|
|
testImplementation 'androidx.test:core:1.4.0'
|
|
testImplementation "com.squareup.okhttp3:mockwebserver:$OKHTTP_VERSION"
|
|
testImplementation "com.jraska.livedata:testing-ktx:1.1.2"
|
|
testImplementation "androidx.arch.core:core-testing:2.1.0"
|
|
testImplementation "org.junit.jupiter:junit-jupiter-api:5.7.0"
|
|
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.7.0"
|
|
testImplementation 'com.facebook.soloader:soloader:0.10.1'
|
|
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.5.0"
|
|
|
|
// Android testing
|
|
androidTestImplementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$KOTLIN_VERSION"
|
|
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0-alpha04'
|
|
androidTestImplementation 'androidx.test.espresso:espresso-intents:3.4.0'
|
|
androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.5.0-alpha04'
|
|
androidTestImplementation 'androidx.test:runner:1.4.0'
|
|
androidTestImplementation 'androidx.test:rules:1.4.1-alpha04'
|
|
androidTestImplementation 'androidx.test:core:1.4.0'
|
|
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
|
|
androidTestImplementation 'androidx.annotation:annotation:1.3.0'
|
|
androidTestImplementation 'com.squareup.okhttp3:mockwebserver:4.8.0'
|
|
androidTestImplementation "androidx.test.uiautomator:uiautomator:2.2.0"
|
|
androidTestUtil 'androidx.test:orchestrator:1.4.1'
|
|
|
|
// Debugging
|
|
debugImplementation "com.squareup.leakcanary:leakcanary-android:$LEAK_CANARY_VERSION"
|
|
|
|
// Support libraries
|
|
implementation "com.google.android.material:material:1.1.0-alpha04"
|
|
implementation "androidx.browser:browser:1.3.0"
|
|
implementation "androidx.cardview:cardview:1.0.0"
|
|
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
|
|
implementation "androidx.exifinterface:exifinterface:1.3.2"
|
|
implementation "androidx.core:core-ktx:$CORE_KTX_VERSION"
|
|
implementation "androidx.multidex:multidex:2.0.1"
|
|
compile 'com.simplecityapps:recyclerview-fastscroll:2.0.1'
|
|
|
|
//swipe_layout
|
|
implementation 'com.daimajia.swipelayout:library:1.2.0@aar'
|
|
|
|
//Room
|
|
implementation "androidx.room:room-runtime:$ROOM_VERSION"
|
|
implementation "androidx.room:room-ktx:$ROOM_VERSION"
|
|
implementation "androidx.room:room-rxjava2:$ROOM_VERSION"
|
|
kapt "androidx.room:room-compiler:$ROOM_VERSION"
|
|
// For Kotlin use kapt instead of annotationProcessor
|
|
implementation 'com.squareup.retrofit2:retrofit:2.8.1'
|
|
testImplementation "androidx.arch.core:core-testing:2.1.0"
|
|
|
|
// Pref
|
|
// Java language implementation
|
|
implementation "androidx.preference:preference:$PREFERENCE_VERSION"
|
|
// Kotlin
|
|
implementation "androidx.preference:preference-ktx:$PREFERENCE_VERSION"
|
|
|
|
implementation "androidx.multidex:multidex:$MULTIDEX_VERSION"
|
|
|
|
def work_version = "2.8.0"
|
|
// Kotlin + coroutines
|
|
implementation "androidx.work:work-runtime-ktx:$work_version"
|
|
implementation("androidx.work:work-runtime:$work_version")
|
|
testImplementation "androidx.work:work-testing:$work_version"
|
|
|
|
//Glide
|
|
implementation 'com.github.bumptech.glide:glide:4.12.0'
|
|
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
|
|
|
|
implementation("io.github.coordinates2country:coordinates2country-android:1.3") { exclude group: 'com.google.android', module: 'android' }
|
|
}
|
|
|
|
task disableAnimations(type: Exec) {
|
|
def adb = "$System.env.ANDROID_HOME/platform-tools/adb"
|
|
commandLine "$adb", 'shell', 'settings', 'put', 'global', 'window_animation_scale', '0'
|
|
commandLine "$adb", 'shell', 'settings', 'put', 'global', 'transition_animation_scale', '0'
|
|
commandLine "$adb", 'shell', 'settings', 'put', 'global', 'animator_duration_scale', '0'
|
|
}
|
|
|
|
project.gradle.taskGraph.whenReady {
|
|
connectedBetaDebugAndroidTest.dependsOn disableAnimations
|
|
connectedProdDebugAndroidTest.dependsOn disableAnimations
|
|
}
|
|
|
|
android {
|
|
compileSdkVersion 31
|
|
|
|
defaultConfig {
|
|
//applicationId 'fr.free.nrw.commons'
|
|
|
|
versionCode 1034
|
|
versionName '4.1.0'
|
|
setProperty("archivesBaseName", "app-commons-v$versionName-" + getBranchName())
|
|
|
|
minSdkVersion 21
|
|
targetSdkVersion 31
|
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
|
testInstrumentationRunnerArguments clearPackageData: 'true'
|
|
|
|
multiDexEnabled true
|
|
|
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
|
|
|
vectorDrawables.useSupportLibrary = true
|
|
}
|
|
|
|
packagingOptions {
|
|
exclude 'META-INF/androidx.*'
|
|
exclude 'META-INF/proguard/androidx-annotations.pro'
|
|
}
|
|
|
|
testOptions {
|
|
animationsDisabled true
|
|
|
|
unitTests.returnDefaultValues = true
|
|
unitTests.includeAndroidResources = true
|
|
|
|
unitTests.all {
|
|
jvmArgs '-noverify'
|
|
}
|
|
}
|
|
|
|
sourceSets {
|
|
// use kotlin only in tests (for now)
|
|
test.java.srcDirs += 'src/test/kotlin'
|
|
|
|
// use main assets and resources in test
|
|
test.assets.srcDirs += 'src/main/assets'
|
|
test.resources.srcDirs += 'src/main/resoures'
|
|
}
|
|
|
|
signingConfigs {
|
|
release
|
|
}
|
|
|
|
buildTypes {
|
|
release {
|
|
minifyEnabled true
|
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
|
|
testProguardFile 'test-proguard-rules.txt'
|
|
if (isRunningOnTravisAndIsNotPRBuild) {
|
|
signingConfig signingConfigs.release
|
|
}
|
|
}
|
|
debug {
|
|
minifyEnabled false
|
|
testCoverageEnabled true
|
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
|
|
testProguardFile 'test-proguard-rules.txt'
|
|
versionNameSuffix "-debug-" + getBranchName()
|
|
}
|
|
}
|
|
|
|
if (isRunningOnTravisAndIsNotPRBuild) {
|
|
// configure keystore based on env vars in Travis for automated alpha builds
|
|
signingConfigs.release.storeFile = file("../nr-commons.keystore")
|
|
signingConfigs.release.storePassword = System.getenv("keystore_password")
|
|
signingConfigs.release.keyAlias = System.getenv("key_alias")
|
|
signingConfigs.release.keyPassword = System.getenv("key_password")
|
|
}
|
|
|
|
configurations.all {
|
|
resolutionStrategy.force 'androidx.annotation:annotation:1.1.0'
|
|
resolutionStrategy.force 'com.jakewharton.timber:timber:4.7.1'
|
|
resolutionStrategy.force 'androidx.fragment:fragment:1.3.6'
|
|
exclude module: 'okhttp-ws'
|
|
}
|
|
flavorDimensions 'tier'
|
|
productFlavors {
|
|
prod {
|
|
|
|
applicationId 'fr.free.nrw.commons'
|
|
|
|
buildConfigField "String", "WIKIMEDIA_API_POTD", "\"https://commons.wikimedia.org/w/api.php?action=featuredfeed&feed=potd&feedformat=rss&language=en\""
|
|
buildConfigField "String", "WIKIMEDIA_API_HOST", "\"https://commons.wikimedia.org/w/api.php\""
|
|
buildConfigField "String", "WIKIDATA_API_HOST", "\"https://www.wikidata.org/w/api.php\""
|
|
buildConfigField "String", "WIKIDATA_URL", "\"https://www.wikidata.org\""
|
|
buildConfigField "String", "WIKIMEDIA_FORGE_API_HOST", "\"https://tools.wmflabs.org/\""
|
|
buildConfigField "String", "WIKIMEDIA_CAMPAIGNS_URL", "\"https://raw.githubusercontent.com/commons-app/campaigns/master/campaigns.json\""
|
|
buildConfigField "String", "IMAGE_URL_BASE", "\"https://upload.wikimedia.org/wikipedia/commons\""
|
|
buildConfigField "String", "HOME_URL", "\"https://commons.wikimedia.org/wiki/\""
|
|
buildConfigField "String", "COMMONS_URL", "\"https://commons.wikimedia.org\""
|
|
buildConfigField "String", "WIKIDATA_URL", "\"https://www.wikidata.org\""
|
|
buildConfigField "String", "MOBILE_HOME_URL", "\"https://commons.m.wikimedia.org/wiki/\""
|
|
buildConfigField "String", "SIGNUP_LANDING_URL", "\"https://commons.m.wikimedia.org/w/index.php?title=Special:CreateAccount&returnto=Main+Page&returntoquery=welcome%3Dyes\""
|
|
buildConfigField "String", "SIGNUP_SUCCESS_REDIRECTION_URL", "\"https://commons.m.wikimedia.org/w/index.php?title=Main_Page&welcome=yes\""
|
|
buildConfigField "String", "FORGOT_PASSWORD_URL", "\"https://commons.wikimedia.org/wiki/Special:PasswordReset\""
|
|
buildConfigField "String", "PRIVACY_POLICY_URL", "\"https://github.com/commons-app/commons-app-documentation/blob/master/android/Privacy-policy.md\""
|
|
buildConfigField "String", "ACCOUNT_TYPE", "\"fr.free.nrw.commons\""
|
|
buildConfigField "String", "CONTRIBUTION_AUTHORITY", "\"fr.free.nrw.commons.contributions.contentprovider\""
|
|
buildConfigField "String", "MODIFICATION_AUTHORITY", "\"fr.free.nrw.commons.modifications.contentprovider\""
|
|
buildConfigField "String", "CATEGORY_AUTHORITY", "\"fr.free.nrw.commons.categories.contentprovider\""
|
|
buildConfigField "String", "RECENT_SEARCH_AUTHORITY", "\"fr.free.nrw.commons.explore.recentsearches.contentprovider\""
|
|
buildConfigField "String", "RECENT_LANGUAGE_AUTHORITY", "\"fr.free.nrw.commons.recentlanguages.contentprovider\""
|
|
buildConfigField "String", "BOOKMARK_AUTHORITY", "\"fr.free.nrw.commons.bookmarks.contentprovider\""
|
|
buildConfigField "String", "BOOKMARK_LOCATIONS_AUTHORITY", "\"fr.free.nrw.commons.bookmarks.locations.contentprovider\""
|
|
buildConfigField "String", "BOOKMARK_ITEMS_AUTHORITY", "\"fr.free.nrw.commons.bookmarks.items.contentprovider\""
|
|
buildConfigField "String", "COMMIT_SHA", "\"" + getBuildVersion().toString() + "\""
|
|
buildConfigField "String", "TEST_USERNAME", "\"" + getTestUserName() + "\""
|
|
buildConfigField "String", "TEST_PASSWORD", "\"" + getTestPassword() + "\""
|
|
buildConfigField "String", "DEPICTS_PROPERTY", "\"P180\""
|
|
|
|
dimension 'tier'
|
|
}
|
|
|
|
beta {
|
|
applicationId 'fr.free.nrw.commons.beta'
|
|
|
|
// What values do we need to hit the BETA versions of the site / api ?
|
|
buildConfigField "String", "WIKIMEDIA_API_POTD", "\"https://commons.wikimedia.org/w/api.php?action=featuredfeed&feed=potd&feedformat=rss&language=en\""
|
|
buildConfigField "String", "WIKIMEDIA_API_HOST", "\"https://commons.wikimedia.beta.wmflabs.org/w/api.php\""
|
|
buildConfigField "String", "WIKIDATA_API_HOST", "\"https://www.wikidata.org/w/api.php\""
|
|
buildConfigField "String", "WIKIDATA_URL", "\"https://www.wikidata.org\""
|
|
buildConfigField "String", "WIKIMEDIA_FORGE_API_HOST", "\"https://tools.wmflabs.org/\""
|
|
buildConfigField "String", "WIKIMEDIA_CAMPAIGNS_URL", "\"https://raw.githubusercontent.com/commons-app/campaigns/master/campaigns_beta_active.json\""
|
|
buildConfigField "String", "IMAGE_URL_BASE", "\"https://upload.beta.wmflabs.org/wikipedia/commons\""
|
|
buildConfigField "String", "HOME_URL", "\"https://commons.wikimedia.beta.wmflabs.org/wiki/\""
|
|
buildConfigField "String", "COMMONS_URL", "\"https://commons.wikimedia.beta.wmflabs.org\""
|
|
buildConfigField "String", "WIKIDATA_URL", "\"https://www.wikidata.org\""
|
|
buildConfigField "String", "MOBILE_HOME_URL", "\"https://commons.m.wikimedia.beta.wmflabs.org/wiki/\""
|
|
buildConfigField "String", "SIGNUP_LANDING_URL", "\"https://commons.m.wikimedia.beta.wmflabs.org/w/index.php?title=Special:CreateAccount&returnto=Main+Page&returntoquery=welcome%3Dyes\""
|
|
buildConfigField "String", "SIGNUP_SUCCESS_REDIRECTION_URL", "\"https://commons.m.wikimedia.beta.wmflabs.org/w/index.php?title=Main_Page&welcome=yes\""
|
|
buildConfigField "String", "FORGOT_PASSWORD_URL", "\"https://commons.wikimedia.beta.wmflabs.org/wiki/Special:PasswordReset\""
|
|
buildConfigField "String", "PRIVACY_POLICY_URL", "\"https://github.com/commons-app/commons-app-documentation/blob/master/android/Privacy-policy.md\""
|
|
buildConfigField "String", "ACCOUNT_TYPE", "\"fr.free.nrw.commons.beta\""
|
|
buildConfigField "String", "CONTRIBUTION_AUTHORITY", "\"fr.free.nrw.commons.beta.contributions.contentprovider\""
|
|
buildConfigField "String", "MODIFICATION_AUTHORITY", "\"fr.free.nrw.commons.beta.modifications.contentprovider\""
|
|
buildConfigField "String", "CATEGORY_AUTHORITY", "\"fr.free.nrw.commons.beta.categories.contentprovider\""
|
|
buildConfigField "String", "RECENT_SEARCH_AUTHORITY", "\"fr.free.nrw.commons.beta.explore.recentsearches.contentprovider\""
|
|
buildConfigField "String", "RECENT_LANGUAGE_AUTHORITY", "\"fr.free.nrw.commons.beta.recentlanguages.contentprovider\""
|
|
buildConfigField "String", "BOOKMARK_AUTHORITY", "\"fr.free.nrw.commons.beta.bookmarks.contentprovider\""
|
|
buildConfigField "String", "BOOKMARK_LOCATIONS_AUTHORITY", "\"fr.free.nrw.commons.beta.bookmarks.locations.contentprovider\""
|
|
buildConfigField "String", "BOOKMARK_ITEMS_AUTHORITY", "\"fr.free.nrw.commons.beta.bookmarks.items.contentprovider\""
|
|
buildConfigField "String", "COMMIT_SHA", "\"" + getBuildVersion().toString() + "\""
|
|
buildConfigField "String", "TEST_USERNAME", "\"" + getTestUserName() + "\""
|
|
buildConfigField "String", "TEST_PASSWORD", "\"" + getTestPassword() + "\""
|
|
buildConfigField "String", "DEPICTS_PROPERTY", "\"P245962\""
|
|
|
|
dimension 'tier'
|
|
}
|
|
}
|
|
|
|
lintOptions {
|
|
disable 'MissingTranslation'
|
|
disable 'ExtraTranslation'
|
|
abortOnError false
|
|
}
|
|
|
|
compileOptions {
|
|
sourceCompatibility JavaVersion.VERSION_1_8
|
|
targetCompatibility JavaVersion.VERSION_1_8
|
|
}
|
|
|
|
buildToolsVersion buildToolsVersion
|
|
|
|
buildFeatures {
|
|
viewBinding true
|
|
}
|
|
|
|
}
|
|
|
|
String getTestUserName() {
|
|
def propFile = rootProject.file("./local.properties")
|
|
def properties = new Properties()
|
|
properties.load(new FileInputStream(propFile))
|
|
return properties['TEST_USER_NAME']
|
|
}
|
|
|
|
String getTestPassword() {
|
|
def propFile = rootProject.file("./local.properties")
|
|
def properties = new Properties()
|
|
properties.load(new FileInputStream(propFile))
|
|
return properties['TEST_USER_PASSWORD']
|
|
}
|
|
|
|
if (isRunningOnTravisAndIsNotPRBuild) {
|
|
play {
|
|
track = "alpha"
|
|
userFraction = 1
|
|
serviceAccountEmail = System.getenv("SERVICE_ACCOUNT_NAME")
|
|
serviceAccountCredentials = file("../play.p12")
|
|
|
|
resolutionStrategy = "auto"
|
|
outputProcessor { // this: ApkVariantOutput
|
|
versionNameOverride = "$versionNameOverride.$versionCode"
|
|
}
|
|
}
|
|
}
|
|
|
|
androidExtensions {
|
|
experimental = true
|
|
}
|