mirror of
https://github.com/oxen-io/session-android.git
synced 2024-11-23 18:15:22 +00:00
c095427835
Cleaned up the variant outputs for the huawei build Added local signing configs Made sure the output names were formatted properly
425 lines
18 KiB
Groovy
425 lines
18 KiB
Groovy
plugins {
|
|
id 'com.google.devtools.ksp'
|
|
id 'com.google.dagger.hilt.android'
|
|
}
|
|
|
|
apply plugin: 'com.android.application'
|
|
apply plugin: 'kotlin-android'
|
|
apply plugin: 'witness'
|
|
apply plugin: 'kotlin-parcelize'
|
|
apply plugin: 'kotlinx-serialization'
|
|
|
|
configurations.forEach {
|
|
it.exclude module: "commons-logging"
|
|
}
|
|
|
|
def canonicalVersionCode = 383
|
|
def canonicalVersionName = "1.20.1"
|
|
|
|
def postFixSize = 10
|
|
def abiPostFix = ['armeabi-v7a' : 1,
|
|
'arm64-v8a' : 2,
|
|
'x86' : 3,
|
|
'x86_64' : 4,
|
|
'universal' : 5]
|
|
|
|
// Function to get the current git commit hash so we can embed it along w/ the build version.
|
|
// Note: This is visible in the SettingsActivity, right at the bottom (R.id.versionTextView).
|
|
def getGitHash = { ->
|
|
def stdout = new ByteArrayOutputStream()
|
|
exec {
|
|
commandLine "git", "rev-parse", "--short", "HEAD"
|
|
standardOutput = stdout
|
|
}
|
|
return stdout.toString().trim()
|
|
}
|
|
|
|
android {
|
|
compileSdkVersion androidCompileSdkVersion
|
|
namespace 'network.loki.messenger'
|
|
useLibrary 'org.apache.http.legacy'
|
|
|
|
compileOptions {
|
|
sourceCompatibility JavaVersion.VERSION_1_8
|
|
targetCompatibility JavaVersion.VERSION_1_8
|
|
}
|
|
|
|
kotlinOptions {
|
|
jvmTarget = '1.8'
|
|
}
|
|
|
|
packagingOptions {
|
|
resources {
|
|
excludes += ['LICENSE.txt', 'LICENSE', 'NOTICE', 'asm-license.txt', 'META-INF/LICENSE', 'META-INF/NOTICE', 'META-INF/proguard/androidx-annotations.pro']
|
|
}
|
|
}
|
|
|
|
splits {
|
|
abi {
|
|
enable !project.hasProperty('huawei') // huawei builds do not need the split variants
|
|
reset()
|
|
include 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
|
|
universalApk true
|
|
}
|
|
}
|
|
|
|
buildFeatures {
|
|
compose true
|
|
}
|
|
|
|
composeOptions {
|
|
kotlinCompilerExtensionVersion '1.5.15'
|
|
}
|
|
|
|
defaultConfig {
|
|
versionCode canonicalVersionCode * postFixSize
|
|
versionName canonicalVersionName
|
|
|
|
minSdkVersion androidMinimumSdkVersion
|
|
targetSdkVersion androidTargetSdkVersion
|
|
|
|
multiDexEnabled = true
|
|
|
|
vectorDrawables.useSupportLibrary = true
|
|
project.ext.set("archivesBaseName", "session")
|
|
|
|
buildConfigField "long", "BUILD_TIMESTAMP", getLastCommitTimestamp() + "L"
|
|
buildConfigField "String", "GIT_HASH", "\"$getGitHash\""
|
|
buildConfigField "String", "CONTENT_PROXY_HOST", "\"contentproxy.signal.org\""
|
|
buildConfigField "int", "CONTENT_PROXY_PORT", "443"
|
|
buildConfigField "String", "USER_AGENT", "\"OWA\""
|
|
buildConfigField "int", "CANONICAL_VERSION_CODE", "$canonicalVersionCode"
|
|
resourceConfigurations += []
|
|
|
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
|
// The following argument makes the Android Test Orchestrator run its
|
|
// "pm clear" command after each test invocation. This command ensures
|
|
// that the app's state is completely cleared between tests.
|
|
testInstrumentationRunnerArguments clearPackageData: 'true'
|
|
testOptions {
|
|
execution 'ANDROIDX_TEST_ORCHESTRATOR'
|
|
}
|
|
}
|
|
|
|
sourceSets {
|
|
String sharedTestDir = 'src/sharedTest/java'
|
|
test.java.srcDirs += sharedTestDir
|
|
androidTest.java.srcDirs += sharedTestDir
|
|
}
|
|
|
|
buildTypes {
|
|
release {
|
|
minifyEnabled false
|
|
}
|
|
debug {
|
|
isDefault true
|
|
minifyEnabled false
|
|
enableUnitTestCoverage true
|
|
}
|
|
}
|
|
|
|
signingConfigs {
|
|
play {
|
|
if (project.hasProperty('SESSION_STORE_FILE')) {
|
|
storeFile file(SESSION_STORE_FILE)
|
|
storePassword SESSION_STORE_PASSWORD
|
|
keyAlias SESSION_KEY_ALIAS
|
|
keyPassword SESSION_KEY_PASSWORD
|
|
}
|
|
}
|
|
huawei {
|
|
if (project.hasProperty('SESSION_HUAWEI_STORE_FILE')) {
|
|
storeFile file(SESSION_HUAWEI_STORE_FILE)
|
|
storePassword SESSION_HUAWEI_STORE_PASSWORD
|
|
keyAlias SESSION_HUAWEI_KEY_ALIAS
|
|
keyPassword SESSION_HUAWEI_KEY_PASSWORD
|
|
}
|
|
}
|
|
}
|
|
|
|
flavorDimensions "distribution"
|
|
productFlavors {
|
|
play {
|
|
isDefault true
|
|
dimension "distribution"
|
|
apply plugin: 'com.google.gms.google-services'
|
|
ext.websiteUpdateUrl = "null"
|
|
buildConfigField "boolean", "PLAY_STORE_DISABLED", "false"
|
|
buildConfigField "org.session.libsession.utilities.Device", "DEVICE", "org.session.libsession.utilities.Device.ANDROID"
|
|
buildConfigField "String", "NOPLAY_UPDATE_URL", "$ext.websiteUpdateUrl"
|
|
buildConfigField 'String', 'PUSH_KEY_SUFFIX', '\"\"'
|
|
signingConfig signingConfigs.play
|
|
}
|
|
|
|
huawei {
|
|
dimension "distribution"
|
|
ext.websiteUpdateUrl = "null"
|
|
buildConfigField "boolean", "PLAY_STORE_DISABLED", "true"
|
|
buildConfigField "org.session.libsession.utilities.Device", "DEVICE", "org.session.libsession.utilities.Device.HUAWEI"
|
|
buildConfigField "String", "NOPLAY_UPDATE_URL", "$ext.websiteUpdateUrl"
|
|
buildConfigField 'String', 'PUSH_KEY_SUFFIX', '\"_HUAWEI\"'
|
|
signingConfig signingConfigs.huawei
|
|
}
|
|
|
|
website {
|
|
dimension "distribution"
|
|
ext.websiteUpdateUrl = "https://github.com/oxen-io/session-android/releases"
|
|
buildConfigField "boolean", "PLAY_STORE_DISABLED", "true"
|
|
buildConfigField "org.session.libsession.utilities.Device", "DEVICE", "org.session.libsession.utilities.Device.ANDROID"
|
|
buildConfigField "String", "NOPLAY_UPDATE_URL", "\"$ext.websiteUpdateUrl\""
|
|
buildConfigField 'String', 'PUSH_KEY_SUFFIX', '\"\"'
|
|
}
|
|
}
|
|
|
|
applicationVariants.configureEach { variant ->
|
|
variant.outputs.each { output ->
|
|
def abiName = output.getFilter("ABI") ?: 'universal'
|
|
def postFix = abiPostFix.get(abiName, 0)
|
|
|
|
def flavour = (variant.flavorName == 'huawei') ? "-huawei" : ""
|
|
|
|
if (postFix >= postFixSize) throw new AssertionError("postFix is too large")
|
|
output.outputFileName = output.outputFileName = "session-${variant.versionName}-${abiName}${flavour}.apk"
|
|
output.versionCodeOverride = canonicalVersionCode * postFixSize + postFix
|
|
}
|
|
}
|
|
|
|
|
|
testOptions {
|
|
unitTests {
|
|
includeAndroidResources = true
|
|
}
|
|
}
|
|
|
|
buildFeatures {
|
|
viewBinding true
|
|
}
|
|
|
|
def huaweiEnabled = project.properties['huawei'] != null
|
|
|
|
applicationVariants.configureEach { variant ->
|
|
if (variant.flavorName == 'huawei') {
|
|
variant.getPreBuildProvider().configure { task ->
|
|
task.doFirst {
|
|
if (!huaweiEnabled) {
|
|
def message = 'Huawei is not enabled. Please add -Phuawei command line arg. See BUILDING.md'
|
|
logger.error(message)
|
|
throw new GradleException(message)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
tasks.register('testPlayDebugUnitTestCoverageReport', JacocoReport) {
|
|
dependsOn 'testPlayDebugUnitTest'
|
|
|
|
reports {
|
|
xml.required = true
|
|
}
|
|
|
|
// Add files that should not be listed in the report (e.g. generated Files from dagger)
|
|
def fileFilter = []
|
|
def mainSrc = "$projectDir/src/main/java"
|
|
def kotlinDebugTree = fileTree(dir: "${buildDir}/tmp/kotlin-classes/playDebug", excludes: fileFilter)
|
|
|
|
// Compiled Kotlin class files are written into build-variant-specific subdirectories of 'build/tmp/kotlin-classes'.
|
|
classDirectories.from = files([kotlinDebugTree])
|
|
|
|
// To produce an accurate report, the bytecode is mapped back to the original source code.
|
|
sourceDirectories.from = files([mainSrc])
|
|
|
|
// Execution data generated when running the tests against classes instrumented by the JaCoCo agent.
|
|
// This is enabled with 'enableUnitTestCoverage' in the 'debug' build type.
|
|
executionData.from = "${project.buildDir}/outputs/unit_test_code_coverage/playDebugUnitTest/testPlayDebugUnitTest.exec"
|
|
}
|
|
|
|
|
|
testNamespace 'network.loki.messenger.test'
|
|
lint {
|
|
abortOnError true
|
|
baseline file('lint-baseline.xml')
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
implementation project(':content-descriptions')
|
|
|
|
ksp("androidx.hilt:hilt-compiler:$jetpackHiltVersion")
|
|
ksp("com.google.dagger:hilt-compiler:$daggerHiltVersion")
|
|
ksp("com.github.bumptech.glide:ksp:$glideVersion")
|
|
|
|
implementation("com.google.dagger:hilt-android:$daggerHiltVersion")
|
|
implementation "androidx.appcompat:appcompat:$appcompatVersion"
|
|
implementation 'androidx.recyclerview:recyclerview:1.2.1'
|
|
implementation "com.google.android.material:material:$materialVersion"
|
|
implementation 'com.google.android.flexbox:flexbox:3.0.0'
|
|
implementation 'androidx.legacy:legacy-support-v13:1.0.0'
|
|
implementation 'androidx.cardview:cardview:1.0.0'
|
|
implementation "androidx.preference:preference-ktx:$preferenceVersion"
|
|
implementation 'androidx.legacy:legacy-preference-v14:1.0.0'
|
|
implementation 'androidx.gridlayout:gridlayout:1.0.0'
|
|
implementation 'androidx.exifinterface:exifinterface:1.3.4'
|
|
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
|
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycleVersion"
|
|
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleVersion"
|
|
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycleVersion"
|
|
implementation "androidx.lifecycle:lifecycle-process:$lifecycleVersion"
|
|
implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycleVersion"
|
|
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
|
|
implementation "androidx.paging:paging-runtime-ktx:$pagingVersion"
|
|
implementation 'androidx.activity:activity-ktx:1.5.1'
|
|
implementation 'androidx.activity:activity-compose:1.5.1'
|
|
implementation 'androidx.fragment:fragment-ktx:1.5.3'
|
|
implementation "androidx.core:core-ktx:$coreVersion"
|
|
implementation "androidx.work:work-runtime-ktx:2.7.1"
|
|
|
|
playImplementation ("com.google.firebase:firebase-messaging:24.0.0") {
|
|
exclude group: 'com.google.firebase', module: 'firebase-core'
|
|
exclude group: 'com.google.firebase', module: 'firebase-analytics'
|
|
exclude group: 'com.google.firebase', module: 'firebase-measurement-connector'
|
|
}
|
|
|
|
if (project.hasProperty('huawei')) huaweiImplementation 'com.huawei.hms:push:6.7.0.300'
|
|
|
|
implementation 'androidx.media3:media3-exoplayer:1.4.0'
|
|
implementation 'androidx.media3:media3-ui:1.4.0'
|
|
implementation 'org.conscrypt:conscrypt-android:2.5.2'
|
|
implementation 'org.signal:aesgcmprovider:0.0.3'
|
|
implementation 'io.github.webrtc-sdk:android:125.6422.04'
|
|
implementation "me.leolin:ShortcutBadger:1.1.16"
|
|
implementation 'se.emilsjolander:stickylistheaders:2.7.0'
|
|
implementation 'com.jpardogo.materialtabstrip:library:1.0.9'
|
|
implementation 'org.apache.httpcomponents:httpclient-android:4.3.5'
|
|
implementation 'commons-net:commons-net:3.7.2'
|
|
implementation 'com.github.chrisbanes:PhotoView:2.1.3'
|
|
implementation "com.github.bumptech.glide:glide:$glideVersion"
|
|
implementation "com.github.bumptech.glide:compose:1.0.0-beta01"
|
|
implementation 'com.makeramen:roundedimageview:2.1.0'
|
|
implementation 'com.pnikosis:materialish-progress:1.5'
|
|
implementation 'org.greenrobot:eventbus:3.0.0'
|
|
implementation 'pl.tajchert:waitingdots:0.1.0'
|
|
implementation 'com.vanniktech:android-image-cropper:4.5.0'
|
|
implementation 'com.melnykov:floatingactionbutton:1.3.0'
|
|
implementation ('com.davemorrissey.labs:subsampling-scale-image-view:3.6.0') {
|
|
exclude group: 'com.android.support', module: 'support-annotations'
|
|
}
|
|
implementation ('com.tomergoldst.android:tooltips:1.0.6') {
|
|
exclude group: 'com.android.support', module: 'appcompat-v7'
|
|
}
|
|
implementation ('com.klinkerapps:android-smsmms:4.0.1') {
|
|
exclude group: 'com.squareup.okhttp', module: 'okhttp'
|
|
exclude group: 'com.squareup.okhttp', module: 'okhttp-urlconnection'
|
|
}
|
|
implementation 'com.annimon:stream:1.1.8'
|
|
implementation 'com.github.dmytrodanylyk.circular-progress-button:library:1.1.3-S2'
|
|
implementation 'androidx.sqlite:sqlite-ktx:2.3.1'
|
|
implementation 'net.zetetic:sqlcipher-android:4.5.4@aar'
|
|
implementation project(":libsignal")
|
|
implementation project(":libsession")
|
|
implementation project(":libsession-util")
|
|
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:$kotlinxJsonVersion"
|
|
implementation "com.github.oxen-io.session-android-curve-25519:curve25519-java:$curve25519Version"
|
|
implementation project(":liblazysodium")
|
|
implementation "net.java.dev.jna:jna:5.12.1@aar"
|
|
implementation "com.google.protobuf:protobuf-java:$protobufVersion"
|
|
implementation "com.fasterxml.jackson.core:jackson-databind:$jacksonDatabindVersion"
|
|
implementation "com.squareup.okhttp3:okhttp:$okhttpVersion"
|
|
implementation "com.squareup.phrase:phrase:$phraseVersion"
|
|
implementation 'app.cash.copper:copper-flow:1.0.0'
|
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
|
|
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion"
|
|
implementation "nl.komponents.kovenant:kovenant:$kovenantVersion"
|
|
implementation "nl.komponents.kovenant:kovenant-android:$kovenantVersion"
|
|
implementation "com.jakewharton.rxbinding3:rxbinding:3.1.0"
|
|
implementation "com.github.ybq:Android-SpinKit:1.4.0"
|
|
implementation "com.opencsv:opencsv:4.6"
|
|
testImplementation "junit:junit:$junitVersion"
|
|
testImplementation 'org.assertj:assertj-core:3.11.1'
|
|
testImplementation "org.mockito:mockito-inline:4.11.0"
|
|
testImplementation "org.mockito.kotlin:mockito-kotlin:$mockitoKotlinVersion"
|
|
androidTestImplementation "org.mockito:mockito-android:4.11.0"
|
|
androidTestImplementation "org.mockito.kotlin:mockito-kotlin:$mockitoKotlinVersion"
|
|
testImplementation "androidx.test:core:$testCoreVersion"
|
|
testImplementation "androidx.arch.core:core-testing:2.2.0"
|
|
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutinesVersion"
|
|
androidTestImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutinesVersion"
|
|
// Core library
|
|
androidTestImplementation "androidx.test:core:$testCoreVersion"
|
|
|
|
androidTestImplementation('com.adevinta.android:barista:4.2.0') {
|
|
exclude group: 'org.jetbrains.kotlin'
|
|
}
|
|
|
|
// AndroidJUnitRunner and JUnit Rules
|
|
androidTestImplementation 'androidx.test:runner:1.5.2'
|
|
androidTestImplementation 'androidx.test:rules:1.5.0'
|
|
|
|
// Assertions
|
|
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
|
|
androidTestImplementation 'androidx.test.ext:truth:1.5.0'
|
|
testImplementation 'com.google.truth:truth:1.1.3'
|
|
androidTestImplementation 'com.google.truth:truth:1.1.3'
|
|
|
|
// Espresso dependencies
|
|
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
|
|
androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.5.1'
|
|
androidTestImplementation 'androidx.test.espresso:espresso-intents:3.5.1'
|
|
androidTestImplementation 'androidx.test.espresso:espresso-accessibility:3.5.1'
|
|
androidTestImplementation 'androidx.test.espresso:espresso-web:3.5.1'
|
|
androidTestImplementation 'androidx.test.espresso.idling:idling-concurrent:3.5.1'
|
|
androidTestImplementation 'androidx.test.espresso:espresso-idling-resource:3.5.1'
|
|
androidTestUtil 'androidx.test:orchestrator:1.4.2'
|
|
|
|
testImplementation 'org.robolectric:robolectric:4.12.2'
|
|
testImplementation 'org.robolectric:shadows-multidex:4.12.2'
|
|
testImplementation 'org.conscrypt:conscrypt-openjdk-uber:2.5.2' // For Robolectric
|
|
testImplementation 'app.cash.turbine:turbine:1.1.0'
|
|
|
|
// compose
|
|
Dependency composeBom = platform('androidx.compose:compose-bom:2024.09.01')
|
|
implementation composeBom
|
|
testImplementation composeBom
|
|
androidTestImplementation composeBom
|
|
|
|
implementation "androidx.compose.ui:ui"
|
|
implementation "androidx.compose.animation:animation"
|
|
implementation "androidx.compose.ui:ui-tooling"
|
|
implementation "androidx.compose.runtime:runtime-livedata"
|
|
implementation "androidx.compose.foundation:foundation-layout"
|
|
implementation "androidx.compose.material3:material3"
|
|
|
|
androidTestImplementation "androidx.compose.ui:ui-test-junit4-android"
|
|
debugImplementation "androidx.compose.ui:ui-test-manifest"
|
|
|
|
implementation "com.google.accompanist:accompanist-themeadapter-appcompat:0.33.1-alpha"
|
|
implementation "com.google.accompanist:accompanist-permissions:0.36.0"
|
|
implementation "com.google.accompanist:accompanist-drawablepainter:0.33.1-alpha"
|
|
|
|
implementation "androidx.camera:camera-camera2:1.3.2"
|
|
implementation "androidx.camera:camera-lifecycle:1.3.2"
|
|
implementation "androidx.camera:camera-view:1.3.2"
|
|
|
|
// Note: ZXing 3.5.3 is the latest stable release as of 2024/08/21
|
|
implementation "com.google.zxing:core:$zxingVersion"
|
|
}
|
|
|
|
static def getLastCommitTimestamp() {
|
|
new ByteArrayOutputStream().withStream { os ->
|
|
return os.toString() + "000"
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Discovers supported languages listed as under the res/values- directory.
|
|
*/
|
|
def autoResConfig() {
|
|
def files = new ArrayList<String>()
|
|
def root = file("src/main/res")
|
|
root.eachFile { f -> files.add(f.name) }
|
|
['en'] + files.collect { f -> f =~ /^values-([a-z]{2}(-r[A-Z]{2})?)$/ }
|
|
.findAll { matcher -> matcher.find() }
|
|
.collect { matcher -> matcher.group(1) }
|
|
.sort()
|
|
}
|