ZaStoGram/TMessagesProj_AppStandalone/build.gradle
2026-08-05 23:09:28 +03:00

239 lines
7.8 KiB
Groovy

apply plugin: 'com.android.application'
def zastoBuildNumberText = (project.findProperty("zastoBuildNumber") ?: System.getenv("ZASTO_BUILD_NUMBER") ?: "0").toString().trim()
if (!(zastoBuildNumberText ==~ /\d+/) || zastoBuildNumberText.toInteger() > 9999) {
throw new GradleException("Invalid ZaStoGram build number '${zastoBuildNumberText}'. Expected an integer from 0 to 9999")
}
def zastoBuildNumber = zastoBuildNumberText.toInteger()
def zastoReadSigningSecret = { String envName ->
def secretPath = System.getenv(envName)?.trim()
if (!secretPath) {
return null
}
def secretFile = file(secretPath)
if (!secretFile.isFile()) {
throw new GradleException("ZaStoGram signing secret file does not exist: ${secretPath}")
}
return secretFile.getText("UTF-8").trim()
}
def zastoReleaseKeystorePath = System.getenv("ZASTO_RELEASE_KEYSTORE")?.trim()
def zastoReleaseStorePassword = zastoReadSigningSecret("ZASTO_RELEASE_STORE_PASSWORD_FILE")
def zastoReleaseKeyPassword = zastoReadSigningSecret("ZASTO_RELEASE_KEY_PASSWORD_FILE")
def zastoReleaseKeyAlias = zastoReadSigningSecret("ZASTO_RELEASE_KEY_ALIAS_FILE")
def zastoExternalSigningValues = [
zastoReleaseKeystorePath,
zastoReleaseStorePassword,
zastoReleaseKeyPassword,
zastoReleaseKeyAlias,
]
if (zastoExternalSigningValues.any { it } && !zastoExternalSigningValues.every { it }) {
throw new GradleException("ZaStoGram external signing requires the keystore and all three credential files")
}
def zastoReleaseKeystoreFile = zastoReleaseKeystorePath
? file(zastoReleaseKeystorePath)
: file("../TMessagesProj/config/release.keystore")
if (zastoReleaseKeystorePath && !zastoReleaseKeystoreFile.isFile()) {
throw new GradleException("ZaStoGram release keystore does not exist: ${zastoReleaseKeystorePath}")
}
repositories {
mavenCentral()
google()
}
configurations {
compile.exclude module: 'support-v4'
}
configurations.all {
exclude group: 'com.google.firebase', module: 'firebase-core'
exclude group: 'androidx.recyclerview', module: 'recyclerview'
}
dependencies {
implementation project(':TMessagesProj')
implementation 'androidx.fragment:fragment:1.8.9'
implementation 'androidx.core:core:1.16.0'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.5'
implementation files('../TMessagesProj/libs/libgsaverification-client.aar')
}
android {
compileSdkVersion 35
buildToolsVersion '35.0.0'
defaultConfig.applicationId = APP_PACKAGE
sourceSets.main.jniLibs.srcDirs = ['../TMessagesProj/jni/']
lintOptions {
disable 'MissingTranslation'
disable 'ExtraTranslation'
disable 'BlockedPrivateApi'
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
coreLibraryDesugaringEnabled true
}
signingConfigs {
debug {
storeFile zastoReleaseKeystoreFile
storePassword zastoReleaseStorePassword ?: RELEASE_STORE_PASSWORD
keyAlias zastoReleaseKeyAlias ?: RELEASE_KEY_ALIAS
keyPassword zastoReleaseKeyPassword ?: RELEASE_KEY_PASSWORD
}
release {
storeFile zastoReleaseKeystoreFile
storePassword zastoReleaseStorePassword ?: RELEASE_STORE_PASSWORD
keyAlias zastoReleaseKeyAlias ?: RELEASE_KEY_ALIAS
keyPassword zastoReleaseKeyPassword ?: RELEASE_KEY_PASSWORD
}
}
buildTypes {
debug {
debuggable true
jniDebuggable true
signingConfig signingConfigs.debug
applicationIdSuffix ".web"
minifyEnabled false
multiDexEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), '../TMessagesProj/proguard-rules.pro', '../TMessagesProj/proguard-rules-beta.pro'
ndk.debugSymbolLevel = 'FULL'
}
standalone {
debuggable false
jniDebuggable false
signingConfig signingConfigs.release
minifyEnabled true
multiDexEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), '../TMessagesProj/proguard-rules.pro'
ndk.debugSymbolLevel = 'FULL'
}
}
sourceSets.debug {
manifest.srcFile '../TMessagesProj/config/release/AndroidManifest_standalone.xml'
}
sourceSets.standalone {
manifest.srcFile '../TMessagesProj/config/release/AndroidManifest_standalone.xml'
}
flavorDimensions "minApi"
productFlavors {
afat {
ndk {
abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
}
ext {
abiVersionCode = 9
}
sourceSets.standalone {
manifest.srcFile '../TMessagesProj/config/release/AndroidManifest_standalone.xml'
}
}
arm64 {
ndk {
abiFilters "arm64-v8a"
}
ext {
abiVersionCode = 11
}
sourceSets.standalone {
manifest.srcFile '../TMessagesProj/config/release/AndroidManifest_standalone.xml'
}
}
armv7 {
ndk {
abiFilters "armeabi-v7a"
}
ext {
abiVersionCode = 12
}
sourceSets.standalone {
manifest.srcFile '../TMessagesProj/config/release/AndroidManifest_standalone.xml'
}
}
x86 {
ndk {
abiFilters "x86"
}
ext {
abiVersionCode = 13
}
sourceSets.standalone {
manifest.srcFile '../TMessagesProj/config/release/AndroidManifest_standalone.xml'
}
}
x64 {
ndk {
abiFilters "x86_64"
}
ext {
abiVersionCode = 14
}
sourceSets.standalone {
manifest.srcFile '../TMessagesProj/config/release/AndroidManifest_standalone.xml'
}
}
}
defaultConfig.versionCode = Integer.parseInt(APP_VERSION_CODE)
applicationVariants.all { variant ->
variant.outputs.all { output ->
outputFileName = "app.apk"
// Reserve five decimal digits per upstream Telegram version: four for the
// GitHub Actions run and one for the ABI. A newer dev prerelease can then
// be installed over the previous prerelease even when APP_VERSION_CODE did
// not change between workflow runs.
def abiVersionDigit = variant.productFlavors.get(0).abiVersionCode % 10
output.versionCodeOverride = defaultConfig.versionCode * 100000 + zastoBuildNumber * 10 + abiVersionDigit
}
}
def standaloneBuildFlavors = ["afat", "arm64", "armv7", "x86", "x64"]
variantFilter { variant ->
def names = variant.flavors*.name
if (variant.buildType.name != "release" && !names.any { standaloneBuildFlavors.contains(it) }) {
setIgnore(true)
}
}
defaultConfig {
minSdkVersion 24 // ZaStoGram: raised for Chaquopy (plugin engine); must match library
targetSdkVersion 35
versionName APP_VERSION_NAME
ndkVersion "27.2.12479018"
multiDexEnabled true
vectorDrawables.generatedDensities = ['mdpi', 'hdpi', 'xhdpi', 'xxhdpi']
externalNativeBuild {
cmake {
version '3.10.2'
arguments '-DANDROID_STL=c++_static', '-DANDROID_PLATFORM=android-21' //, '-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON'
}
}
}
buildFeatures {
buildConfig = true
}
namespace 'org.telegram.messenger.web'
lintOptions {
checkReleaseBuilds false
}
}
apply plugin: 'com.google.gms.google-services'