Files
lawnchair/build.gradle

449 lines
16 KiB
Groovy
Raw Normal View History

import app.cash.licensee.LicenseeTask
2023-08-30 15:05:53 +08:00
import com.android.build.gradle.api.AndroidBasePlugin
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id 'com.android.application' version "8.3.1"
id 'com.android.library' version "8.3.1" apply false
id 'com.android.test' version '8.3.1' apply false
id 'androidx.baselineprofile' version '1.2.3'
id 'org.jetbrains.kotlin.android' version "1.9.23"
id 'org.jetbrains.kotlin.plugin.parcelize' version "1.9.23"
id 'org.jetbrains.kotlin.plugin.serialization' version "1.9.23"
id "com.google.devtools.ksp" version "1.9.23-1.0.19"
id 'com.google.protobuf' version "0.9.4"
id 'app.cash.licensee' version "1.11.0"
id 'dev.rikka.tools.refine' version "4.4.0"
id 'org.gradle.android.cache-fix' version '3.0.1'
id 'com.diffplug.spotless' version '6.25.0'
}
2021-02-28 02:55:46 +05:30
allprojects {
2023-08-30 15:05:53 +08:00
plugins.withType(AndroidBasePlugin).configureEach {
apply plugin: 'org.gradle.android.cache-fix'
android {
2023-08-10 09:42:33 +08:00
compileSdk 34
defaultConfig {
2023-12-17 20:44:39 +08:00
minSdk 26
targetSdk 34
vectorDrawables.useSupportLibrary = true
}
lint {
abortOnError true
checkReleaseBuilds false
}
}
dependencies {
implementation 'androidx.core:core-ktx:1.12.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
}
2021-02-28 02:55:46 +05:30
}
plugins.withId('com.google.protobuf') {
def protocVersion = '4.26.1'
protobuf {
// Configure the protoc executable
protoc {
artifact = "com.google.protobuf:protoc:${protocVersion}"
}
generateProtoTasks {
all().configureEach { task ->
task.builtins {
remove java
java {
option "lite"
}
}
}
}
}
dependencies {
implementation "com.google.protobuf:protobuf-javalite:$protocVersion"
}
}
2023-09-10 19:29:29 +08:00
plugins.withType(JavaBasePlugin).configureEach {
java {
2024-01-21 15:35:12 +08:00
toolchain.languageVersion = JavaLanguageVersion.of(21)
2023-09-10 19:29:29 +08:00
}
}
2023-11-14 10:58:50 +08:00
tasks.withType(KotlinCompile).configureEach {
compilerOptions.freeCompilerArgs.add(
"-Xjvm-default=all",
)
2023-11-14 10:58:50 +08:00
}
2023-11-24 20:31:53 +08:00
ext {
FRAMEWORK_PREBUILTS_DIR = "$rootDir/prebuilts/libs"
daggerVersion = '2.51.1'
2023-11-24 20:31:53 +08:00
addFrameworkJar = { String name ->
def frameworkJar = new File(FRAMEWORK_PREBUILTS_DIR, name)
if (!frameworkJar.exists()) {
throw new IllegalArgumentException("Framework jar path ${frameworkJar.path} doesn't exist")
2021-02-28 02:55:46 +05:30
}
2023-11-24 20:31:53 +08:00
gradle.projectsEvaluated {
tasks.withType(JavaCompile).configureEach {
classpath = files(frameworkJar, classpath)
}
tasks.withType(KotlinCompile).configureEach {
libraries.from(files(frameworkJar))
}
2022-01-12 22:12:55 +07:00
}
dependencies {
compileOnly files(frameworkJar)
}
2021-02-28 02:55:46 +05:30
}
2023-11-24 20:31:53 +08:00
compileOnlyCommonJars = {
dependencies {
compileOnly fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'SystemUI-core.jar')
compileOnly fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'SystemUI-statsd.jar')
compileOnly fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'WindowManager-Shell-14.jar')
compileOnly projects.compatLib
compileOnly projects.compatLib.compatLibVQ
compileOnly projects.compatLib.compatLibVR
compileOnly projects.compatLib.compatLibVS
compileOnly projects.compatLib.compatLibVT
compileOnly projects.compatLib.compatLibVU
2023-11-24 20:31:53 +08:00
}
}
}
2021-02-28 02:55:46 +05:30
}
final def buildCommit = providers.exec {
commandLine('git', 'rev-parse', '--short=7', 'HEAD')
}.standardOutput.asText.get().trim()
2022-11-28 00:52:22 +08:00
final def ciBuild = System.getenv("CI") == "true"
final def ciRef = System.getenv("GITHUB_REF") ?: ""
final def ciRunNumber = System.getenv("GITHUB_RUN_NUMBER") ?: ""
final def isReleaseBuild = ciBuild && ciRef.contains("alpha")
2023-11-01 14:49:44 +08:00
final def devReleaseName = ciBuild ? "Dev (#${ciRunNumber})" : "Dev (${buildCommit})"
final def version = "14"
2023-12-17 15:37:36 +08:00
final def releaseName = "Beta 1"
2022-11-28 00:52:22 +08:00
final def versionDisplayName = "${version} ${isReleaseBuild ? releaseName : devReleaseName}"
final def majorVersion = versionDisplayName.split("\\.")[0]
2021-10-20 19:59:31 +07:00
final def quickstepMinSdk = "29"
final def quickstepMaxSdk = "34"
2022-05-08 23:20:37 +07:00
android {
namespace "com.android.launcher3"
defaultConfig {
versionCode 14
2021-10-20 19:59:31 +07:00
versionName "${versionDisplayName}"
2021-08-26 23:00:13 +07:00
buildConfigField "String", "VERSION_DISPLAY_NAME", "\"${versionDisplayName}\""
buildConfigField "String", "MAJOR_VERSION", "\"${majorVersion}\""
2021-10-26 15:34:48 +07:00
buildConfigField "String", "COMMIT_HASH", "\"${buildCommit}\""
buildConfigField "boolean", "ENABLE_AUTO_INSTALLS_LAYOUT", "false"
2022-05-08 23:20:37 +07:00
manifestPlaceholders.quickstepMinSdk = quickstepMinSdk
manifestPlaceholders.quickstepMaxSdk = quickstepMaxSdk
buildConfigField "int", "QUICKSTEP_MIN_SDK", quickstepMinSdk
buildConfigField "int", "QUICKSTEP_MAX_SDK", quickstepMaxSdk
}
applicationVariants.configureEach { variant ->
variant.outputs.configureEach {
def channel = variant.productFlavors.last().name
outputFileName = "Lawnchair ${variant.versionName} $channel ${variant.buildType.name}.apk"
2021-03-17 10:29:38 +01:00
}
2022-08-10 17:37:14 +08:00
}
2021-03-03 14:25:21 +01:00
buildFeatures {
aidl true
buildConfig true
2021-03-03 14:25:21 +01:00
compose true
resValues true
2021-03-03 14:25:21 +01:00
}
composeOptions {
kotlinCompilerExtensionVersion = "1.5.11"
2021-03-03 14:25:21 +01:00
}
2022-08-10 17:37:14 +08:00
final def keystorePropertiesFile = rootProject.file("keystore.properties")
def releaseSigning = signingConfigs.debug
if (keystorePropertiesFile.exists()) {
final def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
2022-08-10 17:37:14 +08:00
releaseSigning = signingConfigs.create("release") {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile rootProject.file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
packagingOptions.resources.excludes += [
"**/*.proto",
"**/*.bin",
"**/*.java",
"**/*.properties",
"**/*.version",
"**/*.*_module",
"com/**",
"google/**",
"kotlin/**",
"kotlinx/**",
"okhttp3/**",
"META-INF/services/**",
"META-INF/com/**",
"META-INF/licenses/**",
"META-INF/AL2.0",
"META-INF/LGPL2.1",
]
2023-12-23 14:24:45 +08:00
// Load all proguard configs from AOSP
def proguardFilesFromAosp = allprojects
.collect { it.file("proguard.flags") }
.findAll { it.exists() }
.toArray()
buildTypes {
debug {
applicationIdSuffix ".debug"
resValue("string", "derived_app_name", "Lawnchair (Debug)")
signingConfig releaseSigning
}
release {
resValue("string", "derived_app_name", "Lawnchair")
2022-08-10 17:37:14 +08:00
signingConfig releaseSigning
minifyEnabled true
shrinkResources true
2023-12-23 14:24:45 +08:00
proguardFiles proguardFilesFromAosp + "proguard.pro"
}
}
compileOptions {
coreLibraryDesugaringEnabled true
}
2022-08-10 17:37:14 +08:00
dependenciesInfo {
includeInApk = false
includeInBundle = false
}
// See: https://developer.android.com/studio/build/build-variants#flavor-dimensions
flavorDimensions += ["app", "recents", "channel"]
productFlavors {
lawn {
dimension "app"
}
withQuickstep {
dimension "recents"
2022-08-10 17:37:14 +08:00
minSdk 26
}
github {
applicationId 'app.lawnchair'
dimension "channel"
}
market {
applicationId "ch.deletescape.lawnchair.plah"
dimension "channel"
isDefault true
}
configureEach {
resValue("string", "launcher_component", "${applicationId}/app.lawnchair.LawnchairLauncher")
}
}
sourceSets {
main {
res.srcDirs = ['res']
java.srcDirs = ['src', 'src_plugins']
manifest.srcFile 'AndroidManifest-common.xml'
proto {
2021-10-08 12:14:19 +07:00
srcDirs = ['protos/', 'quickstep/protos_overrides/']
}
}
lawn {
java.srcDirs = ['src_flags', 'src_shortcuts_overrides', 'lawnchair/src', 'tests/shared']
2021-03-19 03:38:39 +05:30
aidl.srcDirs = ['lawnchair/aidl']
res.srcDirs = ['lawnchair/res', 'platform_frameworks_libs_systemui/animationlib/res']
manifest.srcFile "lawnchair/AndroidManifest.xml"
2021-09-09 21:35:09 +07:00
assets {
srcDirs 'lawnchair/assets'
}
2022-05-18 18:31:18 +07:00
proto {
srcDirs = ['lawnchair/protos/']
}
}
lawnWithQuickstepGithub {
manifest.srcFile "quickstep/AndroidManifest-launcher.xml"
}
lawnWithQuickstepMarket {
manifest.srcFile "quickstep/AndroidManifest-launcher.xml"
}
withQuickstep {
res.srcDirs = ['quickstep/res', 'quickstep/recents_ui_overrides/res']
java.srcDirs = ['quickstep/src', 'quickstep/recents_ui_overrides/src']
manifest.srcFile "quickstep/AndroidManifest.xml"
}
}
}
2024-03-30 13:18:19 +08:00
androidComponents {
onVariants(selector().all()) { variant ->
def capName = variant.name.capitalize()
def licenseeTask = tasks.named("licenseeAndroid$capName", LicenseeTask)
def copyArtifactsTask = tasks.register("copy${capName}Artifacts", Copy) {
dependsOn(licenseeTask)
from(licenseeTask.map { it.jsonOutput })
// Copy artifacts.json to a new directory.
into(layout.buildDirectory.dir("generated/dependencyAssets/${variant.name}"))
}
variant.sources.assets?.addGeneratedSourceDirectory(licenseeTask) {
// Avoid using LicenseeTask::outputDir as it contains extra files that we don't need.
objects.directoryProperty().fileProvider(copyArtifactsTask.map { it.destinationDir })
}
}
}
addFrameworkJar('framework-14.jar')
2023-11-18 10:10:55 +08:00
dependencies {
implementation projects.iconloaderlib
implementation projects.searchuilib
implementation projects.animationlib
// Recents lib dependency
withQuickstepCompileOnly projects.hiddenApi
2023-09-21 21:54:56 +08:00
withQuickstepImplementation projects.systemUIShared
withQuickstepImplementation projects.systemUIAnim
2023-11-02 08:08:42 +08:00
withQuickstepImplementation projects.systemUnFold
2023-09-21 21:54:56 +08:00
withQuickstepImplementation projects.systemUIViewCapture
withQuickstepImplementation projects.systemUILog
withQuickstepCompileOnly projects.systemUIPlugin
withQuickstepImplementation projects.systemUIPluginCore
withQuickstepCompileOnly projects.systemUICommon
// QuickSwitch Compat
withQuickstepImplementation projects.compatLib
withQuickstepImplementation projects.compatLib.compatLibVQ
withQuickstepImplementation projects.compatLib.compatLibVR
withQuickstepImplementation projects.compatLib.compatLibVS
withQuickstepImplementation projects.compatLib.compatLibVT
withQuickstepImplementation projects.compatLib.compatLibVU
implementation fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'SystemUI-statsd-14.jar')
implementation fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'WindowManager-Shell-14.jar')
withQuickstepCompileOnly fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'framework-14.jar')
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
implementation 'androidx.profileinstaller:profileinstaller:1.3.1'
baselineProfile projects.baselineProfile
implementation "androidx.dynamicanimation:dynamicanimation:1.0.0"
implementation "androidx.recyclerview:recyclerview:1.3.2"
implementation "androidx.preference:preference-ktx:1.2.1"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0'
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3'
implementation "org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.7"
2021-02-28 02:55:46 +05:30
implementation 'com.github.ChickenHook:RestrictionBypass:2.2'
implementation 'dev.rikka.tools.refine:runtime:4.4.0'
2021-03-03 14:25:21 +01:00
implementation platform("androidx.compose:compose-bom:2024.03.00")
implementation "androidx.compose.ui:ui"
implementation "androidx.compose.ui:ui-util"
debugImplementation "androidx.compose.ui:ui-tooling"
implementation "androidx.compose.ui:ui-tooling-preview"
implementation "androidx.compose.ui:ui-text-google-fonts"
implementation "androidx.compose.foundation:foundation"
implementation "androidx.compose.material:material-icons-extended"
implementation "androidx.compose.material:material"
implementation "androidx.compose.runtime:runtime-livedata"
implementation 'androidx.compose.material3:material3:1.3.0-alpha03'
implementation 'androidx.compose.material3:material3-window-size-class:1.3.0-alpha03'
2022-05-28 18:52:15 +02:00
implementation "androidx.constraintlayout:constraintlayout:2.1.4"
implementation "androidx.activity:activity-compose:1.8.2"
implementation "androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0"
implementation "androidx.navigation:navigation-compose:2.7.7"
2022-08-15 18:36:32 +08:00
implementation "androidx.palette:palette-ktx:1.0.0"
2021-10-07 09:42:24 +07:00
implementation "androidx.slice:slice-core:1.1.0-alpha02"
def accompanistVersion = '0.34.0'
implementation "com.google.accompanist:accompanist-adaptive:$accompanistVersion"
2023-11-24 20:31:53 +08:00
implementation "com.google.accompanist:accompanist-drawablepainter:$accompanistVersion"
implementation "com.google.accompanist:accompanist-permissions:$accompanistVersion"
implementation "com.google.android.material:material:1.11.0"
implementation "io.github.fornewid:material-motion-compose-core:1.2.0"
2022-05-16 15:40:23 +07:00
implementation 'dev.kdrag0n:colorkt:1.0.5'
implementation 'io.coil-kt:coil-compose:2.6.0'
2022-05-16 15:40:23 +07:00
implementation 'me.xdrop:fuzzywuzzy:1.4.0'
2023-11-24 20:31:53 +08:00
def optoVersion = "1.0.18"
implementation "com.patrykmichalik.opto:domain:$optoVersion"
implementation "com.patrykmichalik.opto:core:$optoVersion"
implementation "com.patrykmichalik.opto:compose:$optoVersion"
implementation "androidx.datastore:datastore-preferences:1.0.0"
def retrofitVersion = "2.11.0"
implementation "com.squareup.retrofit2:retrofit:$retrofitVersion"
implementation "com.squareup.retrofit2:converter-kotlinx-serialization:$retrofitVersion"
2021-06-15 20:26:41 +07:00
def roomVersion = '2.6.1'
2023-11-24 20:31:53 +08:00
implementation "androidx.room:room-runtime:$roomVersion"
implementation "androidx.room:room-ktx:$roomVersion"
ksp "androidx.room:room-compiler:$roomVersion"
2022-01-12 22:12:55 +07:00
implementation "com.github.topjohnwu.libsu:service:5.2.2"
2021-10-07 09:42:24 +07:00
// Persian Date
implementation 'com.github.samanzamani:PersianDate:1.7.1'
implementation 'com.airbnb.android:lottie:6.4.0'
// Smartspacer
implementation('com.kieronquinn.smartspacer:sdk-client:1.0.6') {
exclude group: "com.github.skydoves", module: "balloon"
}
}
ksp {
arg("room.schemaLocation", "$projectDir/schemas")
arg("room.generateKotlin", "true")
arg("room.incremental", "true")
}
spotless {
java {
target("compatLib/**/src/**/*.java")
googleJavaFormat().aosp()
removeUnusedImports()
}
kotlin {
target("lawnchair/src/**/*.kt")
ktlint().customRuleSets([
"io.nlopez.compose.rules:ktlint:0.3.13",
]).editorConfigOverride([
"ktlint_compose_modifier-missing-check": "disabled",
"ktlint_compose_compositionlocal-allowlist": "disabled",
])
}
}
licensee {
allow("Apache-2.0")
allow("BSD-3-Clause")
2023-09-27 10:14:55 +08:00
allow("GPL-2.0-or-later")
allowDependency("com.github.topjohnwu.libsu", "core", "5.2.2")
allowDependency("com.github.topjohnwu.libsu", "service", "5.2.2")
allowUrl("https://github.com/patrykmichalik/opto/blob/master/LICENSE")
allowUrl("https://github.com/RikkaApps/HiddenApiRefinePlugin/blob/main/LICENSE")
2023-09-27 10:14:55 +08:00
allowUrl("https://opensource.org/licenses/mit-license.php")
}