import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform apply plugin: 'com.android.library' apply from: '../utils.gradle' apply plugin: 'kotlin-android' repositories { mavenCentral() google() maven { url 'https://www.jitpack.io' content { includeModule 'com.github.UnifiedPush', 'android-connector' } } } configurations { compile.exclude module: 'support-v4' } configurations.all { exclude group: 'androidx.recyclerview', module: 'recyclerview' } dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.5' implementation 'androidx.core:core:1.16.0' implementation 'androidx.interpolator:interpolator:1.0.0' implementation 'androidx.fragment:fragment:1.2.0' implementation 'androidx.palette:palette:1.0.0' implementation 'androidx.exifinterface:exifinterface:1.3.6' implementation 'androidx.viewpager:viewpager:1.0.0' implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0' implementation "androidx.sharetarget:sharetarget:1.2.0" implementation 'androidx.interpolator:interpolator:1.0.0' implementation 'androidx.biometric:biometric:1.1.0' implementation "androidx.mediarouter:mediarouter:1.7.0" implementation 'org.nanohttpd:nanohttpd:2.3.1' implementation "androidx.core:core-ktx:1.9.0" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" compileOnly 'org.checkerframework:checker-qual:2.5.2' compileOnly 'org.checkerframework:checker-compat-qual:2.5.0' implementation 'com.googlecode.mp4parser:isoparser:1.0.6' implementation 'com.stripe:stripe-android:2.0.2' implementation 'com.google.code.gson:gson:2.11.0' implementation 'com.google.guava:guava:31.1-android' implementation 'com.google.android.play:integrity:1.3.0' constraints { implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0") { because("kotlin-stdlib-jdk7 is now a part of kotlin-stdlib") } implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0") { because("kotlin-stdlib-jdk8 is now a part of kotlin-stdlib") } } implementation 'com.github.UnifiedPush:android-connector:2.3.1' implementation 'org.osmdroid:osmdroid-android:6.1.20' } def getStringForConfig(String s) { return "\"" + s + "\"" } def isWindows = String.valueOf(DefaultNativePlatform.currentOperatingSystem.toFamilyName() == OperatingSystemFamily.WINDOWS) android { compileSdkVersion 35 buildToolsVersion '35.0.0' ndkVersion "21.4.7075529" // 26.3.11579264 sourceSets.main.jniLibs.srcDirs = ['./jni/'] externalNativeBuild { cmake { path 'jni/CMakeLists.txt' } } lintOptions { disable 'MissingTranslation' disable 'ExtraTranslation' disable 'BlockedPrivateApi' } compileOptions { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 coreLibraryDesugaringEnabled true } defaultConfig.versionCode = Integer.parseInt(Utils['getVersionCode']()) defaultConfig { minSdkVersion 21 targetSdkVersion 35 vectorDrawables.generatedDensities = ['mdpi', 'hdpi', 'xhdpi', 'xxhdpi'] multiDexEnabled true //obtain your own keys at https://core.telegram.org/api/obtaining_api_id buildConfigField 'int', 'APP_ID', APP_ID buildConfigField 'String', 'APP_HASH', getStringForConfig(APP_HASH) buildConfigField 'int', 'USER_ID_OWNER', USER_ID_OWNER buildConfigField 'String', 'USER_REPO', getStringForConfig(USER_REPO) buildConfigField 'int', 'CHECK_UPDATES', CHECK_UPDATES buildConfigField 'String', 'LASTFM_API_KEY', getStringForConfig(LASTFM_API_KEY) buildConfigField 'String', 'LASTFM_API_SECRET', getStringForConfig(LASTFM_API_SECRET) vectorDrawables.generatedDensities = ['mdpi', 'hdpi', 'xhdpi', 'xxhdpi'] versionName = Utils['getVersionName']() buildConfigField 'int', 'ADDITIONAL_BUILD_NUMBER', ADDITIONAL_BUILD_NUMBER buildConfigField 'String', 'VERSION_NAME', getStringForConfig(versionName) buildConfigField 'int', 'VERSION_CODE', Utils['getVersionCode']() buildConfigField 'boolean', 'SKIP_DNS_RESOLVER', (Utils['isFdroid']() ? 'true' : 'false') buildConfigField 'boolean', 'SKIP_INTERNAL_BROWSER_BY_DEFAULT', (Utils['isFdroid']() ? 'true' : 'false') manifestPlaceholders = [appLabel: Utils['isFdroid']() ? "@string/AppNameFdroid" : "@string/AppName"] externalNativeBuild { cmake { version '3.10.2' arguments '-DANDROID_STL=c++_static', '-DANDROID_PLATFORM=android-21' //, '-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON' if (project.hasProperty("armeabi-v7a")) { abiFilters 'armeabi-v7a' } else if (project.hasProperty("arm64-v8a")) { abiFilters 'arm64-v8a' } else { abiFilters 'armeabi-v7a', 'arm64-v8a' } } } } buildTypes { debug { jniDebuggable true minifyEnabled false shrinkResources false multiDexEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), '../TMessagesProj/proguard-rules.pro', '../TMessagesProj/proguard-rules-beta.pro' buildConfigField "String", "BUILD_VERSION_STRING", "\"" + APP_VERSION_NAME + "\"" buildConfigField "String", "APP_CENTER_HASH", "\"\"" buildConfigField "String", "BETA_URL", "\"" + getProps("BETA_PRIVATE_URL") + "\"" buildConfigField "boolean", "DEBUG_VERSION", "true" buildConfigField "boolean", "DEBUG_PRIVATE_VERSION", "true" buildConfigField "boolean", "BUILD_HOST_IS_WINDOWS", isWindows buildConfigField "int", "VERSION_NUM", "0" } HA_private { jniDebuggable false minifyEnabled true multiDexEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), '../TMessagesProj/proguard-rules.pro', '../TMessagesProj/proguard-rules-beta.pro' buildConfigField "String", "BUILD_VERSION_STRING", "\"" + APP_VERSION_NAME + "\"" buildConfigField "String", "APP_CENTER_HASH", "\"" + getProps("APP_CENTER_HASH_PRIVATE") + "\"" buildConfigField "String", "BETA_URL", "\"" + getProps("BETA_PRIVATE_URL") + "\"" buildConfigField "boolean", "DEBUG_VERSION", "true" buildConfigField "boolean", "DEBUG_PRIVATE_VERSION", "true" buildConfigField "boolean", "BUILD_HOST_IS_WINDOWS", isWindows buildConfigField "int", "VERSION_NUM", "1" } HA_public { jniDebuggable false minifyEnabled true multiDexEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), '../TMessagesProj/proguard-rules.pro', '../TMessagesProj/proguard-rules-beta.pro' buildConfigField "String", "BUILD_VERSION_STRING", "\"" + APP_VERSION_NAME + "\"" buildConfigField "String", "APP_CENTER_HASH", "\"" + getProps("APP_CENTER_HASH_PUBLIC") + "\"" buildConfigField "String", "BETA_URL", "\"" + getProps("BETA_PUBLIC_URL") + "\"" buildConfigField "boolean", "DEBUG_VERSION", "true" buildConfigField "boolean", "DEBUG_PRIVATE_VERSION", "false" buildConfigField "boolean", "BUILD_HOST_IS_WINDOWS", isWindows buildConfigField "int", "VERSION_NUM", "4" } HA_hardcore { jniDebuggable false minifyEnabled true multiDexEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), '../TMessagesProj/proguard-rules.pro', '../TMessagesProj/proguard-rules-beta.pro' ndk.debugSymbolLevel = 'FULL' buildConfigField "String", "BUILD_VERSION_STRING", "\"" + APP_VERSION_NAME + "\"" buildConfigField "String", "APP_CENTER_HASH", "\"" + getProps("APP_CENTER_HASH_HARDCORE") + "\"" buildConfigField "String", "BETA_URL", "\"" + getProps("BETA_HARDCORE_URL") + "\"" buildConfigField "boolean", "DEBUG_VERSION", "true" buildConfigField "boolean", "DEBUG_PRIVATE_VERSION", "true" buildConfigField "boolean", "BUILD_HOST_IS_WINDOWS", isWindows buildConfigField "int", "VERSION_NUM", "5" } standalone { jniDebuggable false minifyEnabled true multiDexEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), '../TMessagesProj/proguard-rules.pro' buildConfigField "String", "BUILD_VERSION_STRING", "\"" + APP_VERSION_NAME + "\"" buildConfigField "String", "APP_CENTER_HASH", "\"\"" buildConfigField "String", "BETA_URL", "\"\"" buildConfigField "boolean", "DEBUG_VERSION", "false" buildConfigField "boolean", "DEBUG_PRIVATE_VERSION", "false" buildConfigField "boolean", "BUILD_HOST_IS_WINDOWS", isWindows buildConfigField "int", "VERSION_NUM", "6" } release { jniDebuggable false minifyEnabled true shrinkResources false multiDexEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), '../TMessagesProj/proguard-rules.pro' buildConfigField "String", "BUILD_VERSION_STRING", "\"" + APP_VERSION_NAME + "\"" buildConfigField "String", "APP_CENTER_HASH", "\"\"" buildConfigField "String", "BETA_URL", "\"\"" buildConfigField "boolean", "DEBUG_VERSION", "false" buildConfigField "boolean", "DEBUG_PRIVATE_VERSION", "false" buildConfigField "boolean", "BUILD_HOST_IS_WINDOWS", isWindows buildConfigField "int", "VERSION_NUM", "7" } } namespace 'org.telegram.messenger' } def getProps(String propName) { def propsFile = rootProject.file('local.properties') if (propsFile.exists()) { def props = new Properties() props.load(new FileInputStream(propsFile)) return props[propName] } else { return ""; } } task buildNativeDeps(description: 'Build native dependencies.') { doFirst { exec { def ndkDir = android.ndkDirectory println "NDK Directory: ${ndkDir}" println "Working Directory: ${projectDir}/jni" workingDir "${projectDir}/jni" commandLine 'python3', 'prepare.py', 'silent', 'ndk=' + ndkDir, 'arm', 'arm64' } } } task checkVisibility { doFirst { def isPrivateBuild = project.gradle.startParameter.taskNames.find { it.contains("HA_private") || it.contains("HA_hardcore") || it.contains("Debug") || it.contains("Release") } def isPublicAllowed = !project.hasProperty("IS_PRIVATE") || !project.property("IS_PRIVATE").toBoolean() if (!isPrivateBuild && !isPublicAllowed) { throw new GradleException("Building public version of private code!") } } doLast { if (project.gradle.startParameter.taskNames.find { it.contains("HA_public") }) { def privateBuild = file("${projectDir}_AppHockeyApp/afat/HA_private/Telegram-Beta.apk") if (privateBuild.exists()) { privateBuild.delete() } } } } preBuild.dependsOn buildNativeDeps preBuild.dependsOn checkVisibility