1+ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
2+ import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
13import java.io.FileInputStream
24import java.util.Properties
35
@@ -9,43 +11,60 @@ plugins {
911 id(" com.google.devtools.ksp" )
1012 id(" androidx.navigation.safeargs.kotlin" )
1113 alias(libs.plugins.detekt.plugin)
14+ alias(libs.plugins.google.gms.google.services)
15+ alias(libs.plugins.google.firebase.crashlytics)
1216}
1317
1418fun loadLocalProperties (): Properties = Properties ().apply {
1519 val localPropsFile = rootProject.file(" local.properties" )
1620 if (localPropsFile.exists()) {
1721 FileInputStream (localPropsFile).use { load(it) }
1822 } else {
19- throw GradleException (" Missing local.properties file" )
23+ setProperty(" MIXPANELKEY" , System .getenv(" MIXPANEL_KEY" ) ? : " " )
24+ setProperty(" STOREFILE" , System .getenv(" STOREFILE" ) ? : " " )
25+ setProperty(" STOREPASSWORD" , System .getenv(" STOREPASSWORD" ) ? : " " )
26+ setProperty(" KEYALIAS" , System .getenv(" KEYALIAS" ) ? : " " )
27+ setProperty(" KEYPASSWORD" , System .getenv(" KEYPASSWORD" ) ? : " " )
28+ }
29+ }
30+
31+ kotlin {
32+
33+ compilerOptions {
34+
35+ jvmTarget.set(JvmTarget .JVM_17 )
36+ languageVersion.set(KotlinVersion .KOTLIN_2_2 )
37+ }
38+ }
39+
40+ kotlin {
41+ compilerOptions {
42+
43+ jvmTarget.set(JvmTarget .JVM_17 )
44+ languageVersion.set(KotlinVersion .KOTLIN_2_2 )
2045 }
2146}
2247
2348android {
2449
25- // noinspection GradleDependency
26- compileSdk = 34
50+ compileSdk = 36
2751
2852 compileOptions {
2953 sourceCompatibility = JavaVersion .VERSION_17
3054 targetCompatibility = JavaVersion .VERSION_17
3155 }
3256
33- kotlinOptions {
34- jvmTarget = " 17"
35- }
36-
3757 defaultConfig {
3858 applicationId = " net.opendasharchive.openarchive"
3959 minSdk = 29
40- // noinspection OldTargetApi
41- targetSdk = 34
42- versionCode = 30006
43- versionName = " 0.7.8"
60+ targetSdk = 36
61+ versionCode = 30018
62+ versionName = " 4.0.2"
4463 multiDexEnabled = true
4564 vectorDrawables.useSupportLibrary = true
4665 testInstrumentationRunner = " androidx.test.runner.AndroidJUnitRunner"
4766 val localProps = loadLocalProperties()
48- resValue(" string" , " mixpanel_key" , localProps.getProperty(" mixpanel.key " ) ? : " " )
67+ resValue(" string" , " mixpanel_key" , localProps.getProperty(" MIXPANELKEY " ) ? : " " )
4968 }
5069
5170 base {
@@ -64,24 +83,44 @@ android {
6483 signingConfig = signingConfigs.getByName(" debug" )
6584 isMinifyEnabled = false
6685 isShrinkResources = false
67- applicationIdSuffix = " .release"
6886 proguardFiles(getDefaultProguardFile(" proguard-android.txt" ), " proguard-rules.pro" )
6987 }
7088
7189 getByName(" debug" ) {
7290 signingConfig = signingConfigs.getByName(" debug" )
73- applicationIdSuffix = " .debug"
7491 isMinifyEnabled = false
7592 }
7693 }
7794
95+ flavorDimensions + = " env"
96+
97+ productFlavors {
98+
99+ create(" dev" ) {
100+ dimension = " env"
101+ versionNameSuffix = " -dev"
102+ applicationIdSuffix = " .debug"
103+ }
104+
105+ create(" staging" ) {
106+ dimension = " env"
107+ versionNameSuffix = " -staging"
108+ applicationIdSuffix = " .debug"
109+ }
110+
111+ create(" prod" ) {
112+ dimension = " env"
113+ applicationIdSuffix = " .release"
114+ }
115+ }
116+
78117 signingConfigs {
79118 getByName(" debug" ) {
80119 val props = loadLocalProperties()
81- storeFile = file(props[" storeFile " ] as ? String ? : " " )
82- storePassword = props[" storePassword " ] as ? String ? : " "
83- keyAlias = props[" keyAlias " ] as ? String ? : " "
84- keyPassword = props[" keyPassword " ] as ? String ? : " "
120+ storeFile = file(props[" STOREFILE " ] as ? String ? : " " )
121+ storePassword = props[" STOREPASSWORD " ] as ? String ? : " "
122+ keyAlias = props[" KEYALIAS " ] as ? String ? : " "
123+ keyPassword = props[" KEYPASSWORD " ] as ? String ? : " "
85124 }
86125 }
87126
@@ -100,14 +139,12 @@ android {
100139 abortOnError = false
101140 }
102141
103-
104142 testOptions {
105143 unitTests {
106144 isIncludeAndroidResources = true
107145 }
108146 }
109147
110-
111148 namespace = " net.opendasharchive.openarchive"
112149
113150 configurations.all {
@@ -140,7 +177,6 @@ dependencies {
140177 implementation(libs.androidx.lifecycle.livedata)
141178 implementation(libs.androidx.lifecycle.runtime.compose)
142179
143-
144180 implementation(libs.androidx.preferences)
145181 implementation(libs.androidx.biometric)
146182 implementation(libs.androidx.work)
@@ -159,13 +195,15 @@ dependencies {
159195 implementation(libs.androidx.swiperefresh)
160196
161197 // Compose Libraries
198+ implementation(libs.androidx.core.ktx)
162199 implementation(libs.androidx.activity.ktx)
163200 implementation(libs.androidx.activity.compose)
164201 implementation(libs.androidx.compose.material3)
165202 implementation(libs.androidx.compose.ui)
166203 implementation(libs.androidx.compose.foundation)
167204 implementation(libs.androidx.compose.ui.tooling.preview)
168205 implementation(libs.androidx.compose.icons.extended)
206+ implementation(libs.firebase.crashlytics)
169207 debugImplementation(libs.androidx.compose.ui.tooling)
170208
171209 implementation(libs.androidx.compose.runtime)
@@ -190,13 +228,10 @@ dependencies {
190228 implementation(libs.koin.compose.viewmodel.navigation)
191229
192230 // Image Libraries
193- implementation(libs.glide)
194- annotationProcessor(libs.glide.compiler)
195- implementation(libs.asafirm.image.picker)
196- implementation(libs.picasso)
197231 implementation(libs.coil)
198232 implementation(libs.coil.compose)
199233 implementation(libs.coil.video)
234+ implementation(libs.coil.network)
200235
201236 // Networking and Data
202237 // Networking
@@ -209,42 +244,43 @@ dependencies {
209244
210245 // Utility Libraries
211246 implementation(libs.timber)
212- implementation(libs.orhanobut.logger)
213- implementation(" com.github. abdularis:circularimageview:1.4 " )
214- implementation(" com.tbuonomo: dotsindicator:5.1.0 " )
215- implementation(" com.guolindev. permissionx:permissionx:1.6.4 " )
247+ // implementation(libs.orhanobut.logger)
248+ // implementation(libs. abdularis.circularimageview )
249+ implementation(libs. dotsindicator)
250+ implementation(libs. permissionx)
216251
217252 // Barcode Scanning
218- implementation(" com.google.zxing:core:3.5.3" )
219- implementation(" com.journeyapps:zxing-android-embedded:4.3.0" )
253+ // implementation("com.google.zxing:core:3.5.3")
254+ // implementation("com.journeyapps:zxing-android-embedded:4.3.0")
220255
221256 // Security and Encryption
222- implementation(" org .bouncycastle:bcpkix-jdk15to18:1.72 " )
223- implementation(" org .bouncycastle:bcprov-jdk15to18:1.72 " )
224- api(" org .bouncycastle:bcpg-jdk15to18:1.71 " )
257+ implementation(libs .bouncycastle.bcpkix )
258+ implementation(libs .bouncycastle.bcprov )
259+ api(libs .bouncycastle.bcpg )
225260
226261 // Google Play Services
227- implementation(" com.google.android.gms:play-services-auth:21.3.0" )
228- // implementation("com.google.android.play:core-ktx:1.8.1")
229- // implementation("com.google.android.play:asset-delivery-ktx:2.3.0")
230- // implementation("com.google.android.play:feature-delivery-ktx:2.1.0")
231- // implementation("com.google.android.play:review-ktx:2.0.2")
232- // implementation("com.google.android.play:app-update-ktx:2.1.0")
262+ implementation(libs.google.auth)
263+ implementation(libs.google.play.asset.delivery.ktx)
264+ implementation(libs.google.play.feature.delivery)
265+ implementation(libs.google.play.feature.delivery.ktx)
266+ implementation(libs.google.play.review)
267+ implementation(libs.google.play.review.ktx)
268+ implementation(libs.google.play.app.update.ktx)
233269
234270 // Google Drive API
235- implementation(" com .google.http- client:google-http-client-gson:1.42.3 " )
236- implementation(" com .google.api- client:google-api-client-android:1.26.0 " )
237- implementation(" com .google.apis:google-api-services- drive:v3-rev136-1.25.0 " )
271+ implementation(libs .google.http. client.gson )
272+ implementation(libs .google.api. client.android )
273+ implementation(libs .google.drive.api )
238274
239275 // Tor Libraries
240- implementation(" info.guardianproject: tor-android:0.4.7.14 " )
241- implementation(" info.guardianproject: jtorctl:0.4.5.7 " )
276+ implementation(libs. tor.android )
277+ implementation(libs. jtorctl)
242278
243- implementation(" org .bitcoinj:bitcoinj-core:0.16.2 " )
244- implementation(" com.eclipsesource.j2v8:j2v8:6.2.1@aar" )
279+ implementation(libs .bitcoinj.core )
280+ // implementation("com.eclipsesource.j2v8:j2v8:6.2.1@aar")
245281
246282 // ProofMode //from here: https://github.com/guardianproject/proofmode
247- implementation(" org .proofmode:android-libproofmode:1.0.26 " ) {
283+ implementation(libs .proofmode) {
248284 // transitive = false
249285 exclude(group = " org.bitcoinj" )
250286 exclude(group = " com.google.protobuf" )
@@ -259,40 +295,37 @@ dependencies {
259295 }
260296
261297 // Guava Conflicts
262- implementation(" com.google.guava:guava:31.0.1-jre" )
263- implementation(" com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" )
264-
265-
266- implementation(" com.github.satyan:sugar:1.5" )
298+ implementation(libs.guava)
299+ implementation(libs.guava.listenablefuture)
267300
301+ implementation(libs.satyan.sugar)
268302
269303 // adding web dav support: https://github.com/thegrizzlylabs/sardine-android'
270304 implementation(" com.github.guardianproject:sardine-android:89f7eae512" )
271305
272-
273306 implementation(" com.github.derlio:audio-waveform:v1.0.1" )
274307
275-
276- implementation(" org.cleaninsights.sdk:clean-insights-sdk:2.8.0" )
277- implementation(" info.guardianproject.netcipher:netcipher:2.2.0-alpha" )
308+ implementation(libs.clean.insights)
309+ implementation(libs.netcipher)
278310
279311 // Mixpanel analytics
280- implementation(" com.mixpanel.android:mixpanel-android:8.0.2" )
281-
312+ implementation(libs.mixpanel)
282313
283314 // Tests
284- testImplementation(" junit:junit:4.13.2 " )
285- testImplementation(" org .robolectric:robolectric:4.14.1 " )
286- androidTestImplementation(" androidx.test.ext: junit:1.2.1 " )
287- androidTestImplementation(" androidx.test:runner:1.6.2 " )
288- testImplementation(" androidx .work:work-testing:2.9.1 " )
315+ testImplementation(libs.junit )
316+ testImplementation(libs .robolectric)
317+ androidTestImplementation(libs. androidx.test.junit)
318+ androidTestImplementation(libs. androidx.test.runner )
319+ testImplementation(libs .work.testing )
289320
290321 // Detekt
291322 detektPlugins(libs.detekt.formatting)
292323 detektPlugins(libs.detekt.rules.authors)
293324 detektPlugins(libs.detekt.rules.libraries)
294325 detektPlugins(libs.detekt.compose)
295326 detektPlugins(libs.detekt.rules.compose)
327+
328+ // debugImplementation("com.squareup.leakcanary:leakcanary-android:3.0-alpha-8")
296329}
297330
298331configurations.all {
0 commit comments