// Copyright 2025 The Lynx Authors. All rights reserved.
// Licensed under the Apache License Version 2.0 that can be found in the
// LICENSE file in the root directory of this source tree.
apply plugin: 'com.android.library'
apply from: '../../../platform/android/publish.gradle'
import org.json.simple.JSONObject
android {
compileSdkVersion rootProject.ext.compileSdkVersion
ndkVersion rootProject.ext.ndkVersion
defaultConfig {
minSdkVersion 16
targetSdkVersion 22
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles "consumer-rules.pro"
multiDexEnabled true
packagingOptions {
exclude 'lib/*/libc++_shared.so'
}
}
flavorDimensions "lynx"
productFlavors {
debugMode {
dimension "lynx"
externalNativeBuild {
cmake {
cppFlags '-Wl,-ldl',
'-Wno-unused-command-line-argument'
arguments '-DFLAVOR_NAME=debugMode'
}
}
}
asan {
dimension "lynx"
externalNativeBuild {
cmake {
cppFlags '-fsanitize=address',
'-fsanitize-address-use-after-scope',
'-fPIE',
'-Wl,-ldl',
'-Wl,-llog',
'-Wno-unused-command-line-argument'
arguments '-DANDROID_ARM_MODE=arm', '-DFLAVOR_NAME=asan'
abiFilters(*rootProject.ext.abiList)
}
}
}
noasan {
dimension "lynx"
externalNativeBuild {
cmake {
arguments '-DFLAVOR_NAME=noasan'
}
}
}
dev {
dimension "lynx"
matchingFallbacks = ["noasan"]
externalNativeBuild {
cmake {
cppFlags '-Wl,-ldl',
'-Wno-unused-command-line-argument'
arguments '-DANDROID_STL='+getCppLib(),
'-DFLAVOR_NAME=dev'
}
}
}
}
buildTypes {
release {
externalNativeBuild {
cmake {
arguments '-DANDROID_PLATFORM=android-14',
'-DBUILD_LEPUS_COMPILE=false',
'-DANDROID_TOOLCHAIN=clang',
'-DANDROID_STL='+getCppLib(),
'-DCMAKE_BUILD_TYPE=Release',
'-DLOCAL_ARM_NEON=true',
'-DBUILD_TYPE=release',
'-LH'// Show compile parameters.
cppFlags '-Wl,-ldl',
'-Wno-unused-command-line-argument'
}
}
ndk {
abiFilters(*rootProject.ext.abiList)
}
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
externalNativeBuild {
cmake {
arguments '-DANDROID_PLATFORM=android-14',
'-DBUILD_LEPUS_COMPILE=false',
'-DANDROID_TOOLCHAIN=clang',
'-DANDROID_STL='+getCppLib(),
'-DLOCAL_ARM_NEON=true',
'-DBUILD_TYPE=debug',
'-LH'// Show compile parameters.
// Symbol table with line numbers.
cppFlags "-g",
'-Wl,-ldl',
'-Wno-unused-command-line-argument'
}
}
ndk {
abiFilters(*rootProject.ext.abiList)
}
debuggable true
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
version CMAKE_VERSION
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
// Configure the compilation parameters in gn to generate the corresponding CMakeLists.txt files.
task configGnCompileParas {
def buildVariantList = getFlavorNamesAndBuildTypes(project)
def flavorNames = buildVariantList[0]
def buildTypes = buildVariantList[1]
JSONObject gnBuildArgs_map = new JSONObject()
flavorNames.each{
JSONObject gnBuildArgsList = new JSONObject()
String flavorName = it
if (flavorName == "asan") {
gnBuildArgsList.put("is_asan", "true")
} else {
gnBuildArgsList.put("is_asan", "false")
}
buildTypes.each{
JSONObject gnBuildArgs_list = new JSONObject(gnBuildArgsList)
String buildType = it
if (buildType == "release") {
gnBuildArgs_list.put("is_debug", "false")
} else if(buildType == "debug") {
gnBuildArgs_list.put("is_debug", "true")
}
rootProject.ext.abiList.each { abi ->
gnBuildArgs_map.put(flavorName+buildType+abi, gnBuildArgs_list)
}
}
}
writeGnArgs(gnBuildArgs_map.toJSONString())
}
dependencies {
compileOnly 'androidx.annotation:annotation:1.0.0'
api project(':ServiceAPI')
}