Migrate Spa to Kotlin DSL

Also the following changes,
- Upgrade gradle to 8.1
- Upgrade AGP to 8.0.2
- Enable Version Catalog
- Set target SDK to 34

Bug: 284913888
Test: Gradle Sync
Test: Run Gallery
Test: Unit test
Change-Id: I08e1f0517277f176d94c36b1cf18015c988d2a0d
This commit is contained in:
Chaohui Wang
2023-06-08 16:11:22 +08:00
parent f4c17a175d
commit 4c18b35802
10 changed files with 289 additions and 263 deletions

View File

@@ -0,0 +1,66 @@
/*
* Copyright 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import com.android.build.gradle.BaseExtension
import com.android.build.gradle.api.AndroidBasePlugin
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.android.library) apply false
alias(libs.plugins.kotlin.android) apply false
}
allprojects {
extra["jetpackComposeVersion"] = "1.4.0-beta01"
}
subprojects {
plugins.withType<AndroidBasePlugin> {
configure<BaseExtension> {
compileSdkVersion(33)
defaultConfig {
minSdk = 21
targetSdk = 34
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
}
}
afterEvaluate {
plugins.withType<AndroidBasePlugin> {
configure<BaseExtension> {
if (buildFeatures.compose == true) {
composeOptions {
kotlinCompilerExtensionVersion = "1.4.4"
}
}
}
}
}
tasks.withType<KotlinCompile> {
kotlinOptions {
jvmTarget = "17"
freeCompilerArgs = listOf("-Xjvm-default=all")
}
}
}

View File

@@ -1,58 +0,0 @@
/*
* Copyright 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
plugins {
id 'com.android.application'
id 'kotlin-android'
}
android {
namespace 'com.android.settingslib.spa.gallery'
compileSdk TARGET_SDK
buildToolsVersion = BUILD_TOOLS_VERSION
defaultConfig {
applicationId "com.android.settingslib.spa.gallery"
minSdk MIN_SDK
targetSdk TARGET_SDK
versionCode 1
versionName "1.0"
}
sourceSets {
main {
kotlin {
srcDir "src"
}
res.srcDirs = ["res"]
manifest.srcFile "AndroidManifest.xml"
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
buildFeatures {
compose true
}
composeOptions {
kotlinCompilerExtensionVersion jetpack_compose_compiler_version
}
}
dependencies {
implementation project(":spa")
}

View File

@@ -14,27 +14,32 @@
* limitations under the License.
*/
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
buildscript {
ext {
BUILD_TOOLS_VERSION = "30.0.3"
MIN_SDK = 21
TARGET_SDK = 33
jetpack_compose_version = '1.4.0-beta01'
jetpack_compose_compiler_version = '1.4.4'
}
}
plugins {
id 'com.android.application' version '8.0.0' apply false
id 'com.android.library' version '8.0.0' apply false
id 'org.jetbrains.kotlin.android' version '1.8.10' apply false
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
}
subprojects {
tasks.withType(KotlinCompile).configureEach {
kotlinOptions {
jvmTarget = "17"
freeCompilerArgs = ["-Xjvm-default=all"]
android {
namespace = "com.android.settingslib.spa.gallery"
defaultConfig {
applicationId = "com.android.settingslib.spa.gallery"
versionCode = 1
versionName = "1.0"
}
sourceSets {
sourceSets.getByName("main") {
java.setSrcDirs(listOf("src"))
res.setSrcDirs(listOf("res"))
manifest.srcFile("AndroidManifest.xml")
}
}
buildFeatures {
compose = true
}
}
dependencies {
implementation(project(":spa"))
}

View File

@@ -0,0 +1,30 @@
#
# Copyright (C) 2023 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
[versions]
agp = "8.0.2"
dexmaker-mockito = "2.28.3"
kotlin = "1.8.10"
truth = "1.1"
[libraries]
dexmaker-mockito = { module = "com.linkedin.dexmaker:dexmaker-mockito", version.ref = "dexmaker-mockito" }
truth = { module = "com.google.truth:truth", version.ref = "truth" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
android-library = { id = "com.android.library", version.ref = "agp" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }

View File

@@ -14,9 +14,8 @@
# limitations under the License.
#
#Thu Jul 14 10:36:06 CST 2022
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME

View File

@@ -16,20 +16,27 @@
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
rulesMode.set(RulesMode.FAIL_ON_PROJECT_RULES)
repositories {
google()
mavenCentral()
maven { url "https://jitpack.io"}
maven {
url = uri("https://jitpack.io")
content {
includeGroup("com.github.PhilJay")
}
}
}
}
rootProject.name = "SpaLib"
include ':spa'
include ':gallery'
include ':testutils'
include(":spa")
include(":gallery")
include(":testutils")

View File

@@ -1,119 +0,0 @@
/*
* Copyright 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
plugins {
id 'com.android.library'
id 'kotlin-android'
}
android {
namespace 'com.android.settingslib.spa'
compileSdk TARGET_SDK
buildToolsVersion = BUILD_TOOLS_VERSION
defaultConfig {
minSdk MIN_SDK
targetSdk TARGET_SDK
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
sourceSets {
main {
kotlin {
srcDir "src"
}
res.srcDirs = ["res"]
manifest.srcFile "AndroidManifest.xml"
}
androidTest {
kotlin {
srcDir "../tests/src"
}
res.srcDirs = ["../tests/res"]
manifest.srcFile "../tests/AndroidManifest.xml"
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
buildFeatures {
compose true
}
composeOptions {
kotlinCompilerExtensionVersion jetpack_compose_compiler_version
}
buildTypes {
debug {
testCoverageEnabled = true
}
}
}
dependencies {
api "androidx.appcompat:appcompat:1.7.0-alpha02"
api "androidx.slice:slice-builders:1.1.0-alpha02"
api "androidx.slice:slice-core:1.1.0-alpha02"
api "androidx.slice:slice-view:1.1.0-alpha02"
api "androidx.compose.material3:material3:1.1.0-alpha06"
api "androidx.compose.material:material-icons-extended:$jetpack_compose_version"
api "androidx.compose.runtime:runtime-livedata:$jetpack_compose_version"
api "androidx.compose.ui:ui-tooling-preview:$jetpack_compose_version"
api "androidx.lifecycle:lifecycle-livedata-ktx"
api "androidx.lifecycle:lifecycle-runtime-compose"
api "androidx.navigation:navigation-compose:2.6.0-alpha08"
api "com.github.PhilJay:MPAndroidChart:v3.1.0-alpha"
api "com.google.android.material:material:1.7.0-alpha03"
debugApi "androidx.compose.ui:ui-tooling:$jetpack_compose_version"
implementation "com.airbnb.android:lottie-compose:5.2.0"
androidTestImplementation project(":testutils")
androidTestImplementation 'androidx.lifecycle:lifecycle-runtime-testing'
androidTestImplementation "com.linkedin.dexmaker:dexmaker-mockito:2.28.3"
}
task coverageReport(type: JacocoReport, dependsOn: "connectedDebugAndroidTest") {
group = "Reporting"
description = "Generate Jacoco coverage reports after running tests."
sourceDirectories.from = files("src")
classDirectories.from = fileTree(
dir: "$buildDir/tmp/kotlin-classes/debug",
excludes: [
"com/android/settingslib/spa/debug/**",
// Excludes files forked from AndroidX.
"com/android/settingslib/spa/widget/scaffold/CustomizedAppBar*",
"com/android/settingslib/spa/widget/scaffold/TopAppBarColors*",
// Excludes files forked from Accompanist.
"com/android/settingslib/spa/framework/compose/DrawablePainter*",
// Excludes inline functions, which is not covered in Jacoco reports.
"com/android/settingslib/spa/framework/util/Collections*",
"com/android/settingslib/spa/framework/util/Flows*",
// Excludes debug functions
"com/android/settingslib/spa/framework/compose/TimeMeasurer*",
// Excludes slice demo presenter & provider
"com/android/settingslib/spa/slice/presenter/Demo*",
"com/android/settingslib/spa/slice/provider/Demo*",
],
)
executionData.from = fileTree(dir: "$buildDir/outputs/code_coverage/debugAndroidTest/connected")
}

View File

@@ -0,0 +1,110 @@
/*
* Copyright 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
plugins {
id(libs.plugins.android.library.get().pluginId)
id(libs.plugins.kotlin.android.get().pluginId)
jacoco
}
val jetpackComposeVersion: String? by extra
android {
namespace = "com.android.settingslib.spa"
defaultConfig {
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
sourceSets {
sourceSets.getByName("main") {
kotlin.setSrcDirs(listOf("src"))
res.setSrcDirs(listOf("res"))
manifest.srcFile("AndroidManifest.xml")
}
sourceSets.getByName("androidTest") {
kotlin.setSrcDirs(listOf("../tests/src"))
res.setSrcDirs(listOf("../tests/res"))
manifest.srcFile("../tests/AndroidManifest.xml")
}
}
buildFeatures {
compose = true
}
buildTypes {
getByName("debug") {
enableAndroidTestCoverage = true
}
}
}
dependencies {
api("androidx.appcompat:appcompat:1.7.0-alpha02")
api("androidx.slice:slice-builders:1.1.0-alpha02")
api("androidx.slice:slice-core:1.1.0-alpha02")
api("androidx.slice:slice-view:1.1.0-alpha02")
api("androidx.compose.material3:material3:1.1.0-alpha06")
api("androidx.compose.material:material-icons-extended:$jetpackComposeVersion")
api("androidx.compose.runtime:runtime-livedata:$jetpackComposeVersion")
api("androidx.compose.ui:ui-tooling-preview:$jetpackComposeVersion")
api("androidx.lifecycle:lifecycle-livedata-ktx")
api("androidx.lifecycle:lifecycle-runtime-compose")
api("androidx.navigation:navigation-compose:2.6.0-alpha08")
api("com.github.PhilJay:MPAndroidChart:v3.1.0-alpha")
api("com.google.android.material:material:1.7.0-alpha03")
debugApi("androidx.compose.ui:ui-tooling:$jetpackComposeVersion")
implementation("com.airbnb.android:lottie-compose:5.2.0")
androidTestImplementation(project(":testutils"))
androidTestImplementation("androidx.lifecycle:lifecycle-runtime-testing")
}
tasks.register<JacocoReport>("coverageReport") {
group = "Reporting"
description = "Generate Jacoco coverage reports after running tests."
dependsOn("connectedDebugAndroidTest")
sourceDirectories.setFrom(files("src"))
classDirectories.setFrom(
fileTree(layout.buildDirectory.dir("tmp/kotlin-classes/debug")) {
setExcludes(
listOf(
"com/android/settingslib/spa/debug/**",
// Excludes files forked from AndroidX.
"com/android/settingslib/spa/widget/scaffold/CustomizedAppBar*",
"com/android/settingslib/spa/widget/scaffold/TopAppBarColors*",
// Excludes files forked from Accompanist.
"com/android/settingslib/spa/framework/compose/DrawablePainter*",
// Excludes inline functions, which is not covered in Jacoco reports.
"com/android/settingslib/spa/framework/util/Collections*",
"com/android/settingslib/spa/framework/util/Flows*",
// Excludes debug functions
"com/android/settingslib/spa/framework/compose/TimeMeasurer*",
// Excludes slice demo presenter & provider
"com/android/settingslib/spa/slice/presenter/Demo*",
"com/android/settingslib/spa/slice/provider/Demo*",
)
)
}
)
executionData.setFrom(
fileTree(layout.buildDirectory.dir("outputs/code_coverage/debugAndroidTest/connected"))
)
}

View File

@@ -1,60 +0,0 @@
/*
* Copyright 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
plugins {
id 'com.android.library'
id 'kotlin-android'
}
android {
namespace 'com.android.settingslib.spa.testutils'
compileSdk TARGET_SDK
buildToolsVersion = BUILD_TOOLS_VERSION
defaultConfig {
minSdk MIN_SDK
targetSdk TARGET_SDK
}
sourceSets {
main {
kotlin {
srcDir "src"
}
manifest.srcFile "AndroidManifest.xml"
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
buildFeatures {
compose true
}
composeOptions {
kotlinCompilerExtensionVersion jetpack_compose_compiler_version
}
}
dependencies {
api project(":spa")
api "androidx.arch.core:core-testing:2.2.0-alpha01"
api "androidx.compose.ui:ui-test-junit4:$jetpack_compose_version"
api "com.google.truth:truth:1.1.3"
api "org.mockito:mockito-core:2.21.0"
debugApi "androidx.compose.ui:ui-test-manifest:$jetpack_compose_version"
}

View File

@@ -0,0 +1,46 @@
/*
* Copyright 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
plugins {
id(libs.plugins.android.library.get().pluginId)
id(libs.plugins.kotlin.android.get().pluginId)
}
val jetpackComposeVersion: String? by extra
android {
namespace = "com.android.settingslib.spa.testutils"
sourceSets {
sourceSets.getByName("main") {
java.setSrcDirs(listOf("src"))
manifest.srcFile("AndroidManifest.xml")
}
}
buildFeatures {
compose = true
}
}
dependencies {
api(project(":spa"))
api("androidx.arch.core:core-testing:2.2.0-alpha01")
api("androidx.compose.ui:ui-test-junit4:$jetpackComposeVersion")
api(libs.truth)
api(libs.dexmaker.mockito)
debugApi("androidx.compose.ui:ui-test-manifest:$jetpackComposeVersion")
}