mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-07-29 15:23:01 -04:00
48de4bcb08
* Gradle build revisions * Update platforms/android/README.md
165 lines
4.4 KiB
Groovy
165 lines
4.4 KiB
Groovy
plugins {
|
|
id 'com.android.application'
|
|
}
|
|
|
|
def versionNameStr = (System.getenv("DUSK_VERSION") ?: "v0.1.0").replaceFirst("^v", "")
|
|
def versionCodeInt = (System.getenv("DUSK_VERSION_CODE") ?: "100000").toInteger()
|
|
|
|
def duskRepoDir = rootProject.projectDir.parentFile.parentFile
|
|
def androidNativeBuildDir = new File(duskRepoDir, 'build/android-arm64')
|
|
def nativeLibrary = new File(androidNativeBuildDir, 'libmain.so')
|
|
def stageStripValue = providers.gradleProperty('ANDROID_STAGE_STRIP')
|
|
.orElse(providers.gradleProperty('androidStageStrip'))
|
|
.orElse(providers.environmentVariable('ANDROID_STAGE_STRIP'))
|
|
.orElse('1')
|
|
def androidHome = {
|
|
def sdkPath = System.getenv('ANDROID_HOME')
|
|
if (!sdkPath) {
|
|
throw new GradleException('ANDROID_HOME is not available')
|
|
}
|
|
def sdkDir = new File(sdkPath)
|
|
if (!sdkDir.isDirectory()) {
|
|
throw new GradleException("ANDROID_HOME points to a missing directory: ${sdkDir}")
|
|
}
|
|
sdkDir
|
|
}.memoize()
|
|
|
|
def androidNdkVersion = {
|
|
def ndkVersion = System.getenv('ANDROID_NDK_VERSION')
|
|
if (!ndkVersion) {
|
|
throw new GradleException('ANDROID_NDK_VERSION is not available')
|
|
}
|
|
ndkVersion
|
|
}.memoize()
|
|
|
|
def androidNdkDir = {
|
|
def ndkDir = new File(androidHome(), "ndk/${androidNdkVersion()}")
|
|
if (!new File(ndkDir, 'build/cmake/android.toolchain.cmake').isFile()) {
|
|
throw new GradleException(
|
|
"Android NDK ${androidNdkVersion()} is missing or invalid at ${ndkDir}"
|
|
)
|
|
}
|
|
ndkDir
|
|
}.memoize()
|
|
|
|
def llvmPrebuiltDir = {
|
|
def prebuiltRoot = new File(androidNdkDir(), 'toolchains/llvm/prebuilt')
|
|
def prebuiltDir = (prebuiltRoot.listFiles()?.findAll { it.isDirectory() } ?: [])
|
|
.sort { it.name }
|
|
.find { candidate ->
|
|
new File(
|
|
candidate,
|
|
'sysroot/usr/lib/aarch64-linux-android/libc++_shared.so'
|
|
).isFile()
|
|
}
|
|
if (!prebuiltDir) {
|
|
throw new GradleException("Cannot find NDK libc++_shared.so under ${prebuiltRoot}")
|
|
}
|
|
prebuiltDir
|
|
}.memoize()
|
|
|
|
def stlLibrary = {
|
|
def library = new File(
|
|
llvmPrebuiltDir(),
|
|
'sysroot/usr/lib/aarch64-linux-android/libc++_shared.so'
|
|
)
|
|
if (!library.isFile()) {
|
|
throw new GradleException("libc++_shared.so is missing")
|
|
}
|
|
library
|
|
}.memoize()
|
|
|
|
def stagedJniLibsDir = layout.buildDirectory.dir('generated/jniLibs/dusklight')
|
|
|
|
def stageJniLibs = tasks.register('stageJniLibs', Sync) {
|
|
group = 'build'
|
|
from(nativeLibrary) {
|
|
rename { 'libmain.so' }
|
|
into 'arm64-v8a'
|
|
}
|
|
from(providers.provider { stlLibrary() }) {
|
|
rename { 'libc++_shared.so' }
|
|
into 'arm64-v8a'
|
|
}
|
|
into(stagedJniLibsDir)
|
|
|
|
doFirst {
|
|
if (!nativeLibrary.isFile()) {
|
|
throw new GradleException("Native library is missing")
|
|
}
|
|
}
|
|
}
|
|
|
|
def duskGeneratedAssetsDir = layout.buildDirectory.dir('generated/assets/dusklight')
|
|
def syncDuskAssets = tasks.register('syncDuskAssets', Sync) {
|
|
from(new File(duskRepoDir, 'res')) {
|
|
into 'res'
|
|
exclude '**/.DS_Store'
|
|
}
|
|
from(new File(androidNativeBuildDir, 'bundled_mods')) {
|
|
into 'mods'
|
|
include '*.dusk'
|
|
}
|
|
into(duskGeneratedAssetsDir)
|
|
}
|
|
|
|
android {
|
|
namespace 'dev.twilitrealm.dusk'
|
|
compileSdk 36
|
|
ndkVersion androidNdkVersion()
|
|
|
|
defaultConfig {
|
|
applicationId 'dev.twilitrealm.dusk'
|
|
minSdk 26
|
|
targetSdk 36
|
|
versionCode versionCodeInt
|
|
versionName versionNameStr
|
|
}
|
|
|
|
buildTypes {
|
|
debug {
|
|
minifyEnabled false
|
|
}
|
|
release {
|
|
minifyEnabled false
|
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
|
}
|
|
}
|
|
|
|
sourceSets {
|
|
main {
|
|
jniLibs.srcDirs = [stagedJniLibsDir]
|
|
assets.srcDirs = [duskGeneratedAssetsDir]
|
|
}
|
|
}
|
|
|
|
packaging {
|
|
jniLibs {
|
|
if (stageStripValue.get() == '0') {
|
|
keepDebugSymbols += '**/libmain.so'
|
|
}
|
|
}
|
|
}
|
|
|
|
splits {
|
|
abi {
|
|
enable true
|
|
reset()
|
|
include 'arm64-v8a'
|
|
universalApk false
|
|
}
|
|
}
|
|
|
|
lint {
|
|
abortOnError false
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
|
}
|
|
|
|
tasks.named('preBuild').configure {
|
|
dependsOn(stageJniLibs, syncDuskAssets)
|
|
}
|