Files
lawnchair/build.gradle

473 lines
17 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.7.2"
id 'com.android.library' version "8.7.2" apply false
id 'com.android.test' version '8.7.2' apply false
id 'androidx.baselineprofile' version '1.3.3'
2024-10-13 08:08:22 +08:00
id 'org.jetbrains.kotlin.android' version "2.0.21"
id 'org.jetbrains.kotlin.plugin.compose' version "2.0.21"
id 'org.jetbrains.kotlin.plugin.parcelize' version "2.0.21"
id 'org.jetbrains.kotlin.plugin.serialization' version "2.0.21"
id "com.google.devtools.ksp" version "2.0.21-1.0.26"
id 'com.google.protobuf' version "0.9.4"
id 'app.cash.licensee' version "1.12.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'
}
2024-10-06 13:34:50 +08:00
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 {
2024-06-20 10:07:31 +08:00
compileSdk 35
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.15.0'
}
2021-02-28 02:55:46 +05:30
}
plugins.withId('com.google.protobuf') {
def protocVersion = '4.28.3'
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 {
toolchain.languageVersion = JavaLanguageVersion.of(17)
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.52'
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')
2024-10-06 17:33:30 +08:00
compileOnly fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'WindowManager-Shell-15.jar')
2024-11-01 10:19:35 +08:00
// compileOnly fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'QuickstepResLib.jar')
compileOnly projects.compatLib
compileOnly projects.compatLib.compatLibVQ
compileOnly projects.compatLib.compatLibVR
compileOnly projects.compatLib.compatLibVS
compileOnly projects.compatLib.compatLibVT
compileOnly projects.compatLib.compatLibVU
2024-10-06 17:33:30 +08:00
compileOnly projects.compatLib.compatLibVV
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("beta")
final def devReleaseName = ciBuild ? "Dev.(#${ciRunNumber})" : "Dev.(${buildCommit})"
final def version = "14"
2024-08-20 21:57:24 +08:00
final def releaseName = "Beta 3"
final def versionDisplayName = "${version}.${isReleaseBuild ? releaseName : devReleaseName}"
2022-11-28 00:52:22 +08:00
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 {
2024-08-20 21:57:24 +08:00
// Lawnchair Launcher 14.0 Beta 3
// See CONTRIBUTING.md#versioning-scheme
2024-08-20 21:57:24 +08:00
versionCode 14_00_02_03
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
}
androidResources {
generateLocaleConfig true
}
2021-03-03 14:25:21 +01:00
buildFeatures {
aidl true
buildConfig true
resValues true
2021-03-03 14:25:21 +01:00
}
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()
2024-09-16 08:11:50 +08:00
def releaseSigning
try {
def keystoreProperties = new Properties()
keystoreProperties.load(rootProject.file("keystore.properties").newInputStream())
releaseSigning = signingConfigs.create("release") {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile rootProject.file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
} catch (Exception ignored) {
releaseSigning = signingConfigs.debug
}
buildTypes {
all {
signingConfig releaseSigning
pseudoLocalesEnabled true
}
debug {
applicationIdSuffix ".debug"
resValue("string", "derived_app_name", "Lawnchair (Debug)")
}
release {
resValue("string", "derived_app_name", "Lawnchair")
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"
}
play {
applicationId "app.lawnchair.play"
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']
2024-11-02 10:45:09 +08:00
res.srcDirs = ['lawnchair/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"
}
lawnWithQuickstepPlay {
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 })
}
}
}
composeCompiler {
stabilityConfigurationFile = layout.projectDirectory.file("compose_compiler_config.conf")
reportsDestination = layout.buildDirectory.dir("compose_build_reports")
}
2024-10-06 17:33:30 +08:00
addFrameworkJar('framework-15.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
2024-11-02 10:45:09 +08:00
withQuickstepImplementation projects.systemUIAnim
2023-11-02 08:08:42 +08:00
withQuickstepImplementation projects.systemUnFold
2024-11-02 10:45:09 +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
2024-11-02 10:45:09 +08:00
withQuickstepImplementation projects.compatLib.compatLibVV
withQuickstepImplementation projects.wmshell
withQuickstepImplementation projects.flags
withQuickstepImplementation projects.androidxLib
implementation fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'SystemUI-statsd-14.jar')
2024-10-06 17:33:30 +08:00
implementation fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'WindowManager-Shell-15.jar')
withQuickstepCompileOnly fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'framework-15.jar')
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.2'
implementation 'androidx.profileinstaller:profileinstaller:1.4.1'
baselineProfile projects.baselineProfile
implementation "androidx.recyclerview:recyclerview:1.3.2"
implementation "androidx.preference:preference-ktx:1.2.1"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0'
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3'
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.10.01")
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'
implementation 'androidx.compose.material3:material3-window-size-class'
implementation "androidx.activity:activity-compose:1.9.3"
implementation "androidx.lifecycle:lifecycle-viewmodel-compose:2.8.7"
implementation "androidx.navigation:navigation-compose:2.8.3"
implementation "androidx.constraintlayout:constraintlayout:2.2.0"
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.36.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.12.0"
implementation "io.github.fornewid:material-motion-compose-core:1.2.1"
2022-05-16 15:40:23 +07:00
implementation 'dev.kdrag0n:colorkt:1.0.5'
implementation 'io.coil-kt:coil-compose:2.7.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.1.1"
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"
2024-10-13 08:08:22 +08:00
ksp "androidx.room:room-compiler:$roomVersion"
2022-01-12 22:12:55 +07:00
2024-09-21 13:02:25 +08:00
def core_version = "1.13.1"
implementation "androidx.core:core:$core_version"
implementation "com.github.topjohnwu.libsu:service:6.0.0"
2021-10-07 09:42:24 +07:00
// Persian Date
implementation 'com.github.samanzamani:PersianDate:1.7.1'
implementation 'com.airbnb.android:lottie:6.6.0'
// Compose drag and drop library
implementation 'sh.calvin.reorderable:reorderable:2.4.0'
// Smartspacer
implementation('com.kieronquinn.smartspacer:sdk-client:1.0.11') {
exclude group: "com.github.skydoves", module: "balloon"
}
2024-07-28 18:46:37 +08:00
implementation("com.github.android:renderscript-intrinsics-replacement-toolkit:b6363490c3")
}
2024-10-13 08:08:22 +08:00
ksp {
arg("room.schemaLocation", "$projectDir/schemas")
arg("room.generateKotlin", "true")
arg("room.incremental", "true")
}
2024-10-06 13:34:50 +08:00
spotless {
java {
target("compatLib/**/src/**/*.java")
googleJavaFormat().aosp()
removeUnusedImports()
}
kotlin {
target("lawnchair/src/**/*.kt")
ktlint().customRuleSets([
"io.nlopez.compose.rules:ktlint:0.4.17",
]).editorConfigOverride([
"ktlint_compose_compositionlocal-allowlist": "disabled",
"ktlint_compose_lambda-param-event-trailing": "disabled",
"ktlint_compose_content-slot-reused": "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", "6.0.0")
allowDependency("com.github.topjohnwu.libsu", "service", "6.0.0")
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")
}