Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
133 changes: 131 additions & 2 deletions example-app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,120 +1,249 @@
plugins {
plugins {

alias(libs.plugins.android.application)

alias(libs.plugins.kotlin.android)

alias(libs.plugins.kotlin.compose)

id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")

id("org.jlleitschuh.gradle.ktlint")
}

ktlint {

android.set(true)

reporters {

reporter(org.jlleitschuh.gradle.ktlint.reporter.ReporterType.PLAIN)

reporter(org.jlleitschuh.gradle.ktlint.reporter.ReporterType.CHECKSTYLE)
}
}

android {

namespace = "com.mapconductor.example"

compileSdk = project.property("compileSdk").toString().toInt()

defaultConfig {

applicationId = "com.mapconductor.example"

minSdk = project.property("minSdk").toString().toInt()

targetSdk = project.property("targetSdk").toString().toInt()
ndk { abiFilters += listOf("arm64-v8a") }
vectorDrawables {
useSupportLibrary = true
}

versionCode = 1

versionName = "1.0"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}

composeOptions {

kotlinCompilerExtensionVersion =

project.property("kotlinCompilerExtensionVersion").toString()
}

buildTypes {

debug {

isMinifyEnabled = false

proguardFiles(
getDefaultProguardFile("proguard-android.txt"),
"proguard-rules.pro",
)
}

release {
isMinifyEnabled = project.property("isMinifyEnabled").toString().toBoolean()

isMinifyEnabled = true

isShrinkResources = true

proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro",
)

// Force legacy ProGuard instead of R8

buildConfigField("String", "BUILD_CONFIG_VERSION", "\"release\"")
signingConfig = signingConfigs.getByName("debug")
}
}

packaging {

resources {

excludes += "META-INF/versions/9/previous-compilation-data.bin"
excludes += "META-INF/*.kotlin_module"
excludes += "META-INF/AL2.0"
excludes += "META-INF/LGPL2.1"
excludes += "META-INF/androidx.*.version"
excludes += "**/*.proto"
}

jniLibs {
useLegacyPackaging = true
}
}

compileOptions {

sourceCompatibility = JavaVersion.toVersion(project.property("javaVersion").toString())

targetCompatibility = JavaVersion.toVersion(project.property("javaVersion").toString())
}

kotlinOptions {

jvmTarget = project.property("jvmTarget").toString()
}

buildFeatures {

compose = true

buildConfig = true
}

bundle {
language {
enableSplit = true
}
density {
enableSplit = true
}
abi {
enableSplit = true
}
}

testOptions {

unitTests {

isIncludeAndroidResources = true
}
}
}

secrets {

// To add your Maps API key to this project:

// 1. If the secrets.properties file does not exist, create it in the same folder as the local.properties file.

// 2. Add this line, where YOUR_API_KEY is your API key:

// MAPS_API_KEY=YOUR_API_KEY

propertiesFileName = "secrets.properties"

// A properties file containing default secret values. This file can be

// checked in version control.

defaultPropertiesFileName = "local.defaults.properties"
}

dependencies {

implementation(libs.androidx.core.ktx)

implementation(libs.androidx.lifecycle.runtime.ktx)

implementation(libs.androidx.activity.compose)

implementation(libs.androidx.lifecycle.viewmodel.compose)

implementation(platform(libs.androidx.compose.bom))

implementation(libs.androidx.ui)

implementation(libs.androidx.ui.graphics)

implementation(libs.androidx.ui.tooling.preview)

implementation(libs.androidx.material3)

implementation(libs.androidx.appcompat)

implementation(platform(libs.firebase.bom))

// Google Maps SDK

implementation(libs.play.services.maps)

// Here Maps SDK

val hereSdkAarName: String by project

implementation(files("${rootProject.projectDir}/libs/$hereSdkAarName.aar"))

// Mapbox SDK

implementation(libs.mapbox.android)

// ArcGIS Maps for Kotlin - SDK dependency

implementation(libs.arcgis.maps.kotlin)

implementation(platform(libs.arcgis.maps.kotlin.toolkit.bom))

implementation(libs.arcgis.maps.kotlin.toolkit.geoview.compose)

implementation(libs.arcgis.maps.kotlin.toolkit.authentication)

// Map Conductor

implementation(project(":mapconductor-core"))

implementation(project(":mapconductor-icons"))

implementation(project(":mapconductor-for-googlemaps"))

implementation(project(":mapconductor-for-here"))

implementation(project(":mapconductor-for-mapbox"))

implementation(project(":mapconductor-for-arcgis"))

implementation(libs.androidx.vectordrawable)

implementation(libs.androidx.room.runtime.android)

testImplementation(libs.junit)

testImplementation(libs.androidx.core)

testImplementation(libs.androidx.junit)

testImplementation(libs.androidx.runner)

androidTestImplementation(libs.androidx.junit)

androidTestImplementation(libs.androidx.espresso.core)

androidTestImplementation(platform(libs.androidx.compose.bom))

androidTestImplementation(libs.androidx.ui.test.junit4)

debugImplementation(libs.androidx.ui.tooling)

debugImplementation(libs.androidx.ui.test.manifest)
}
86 changes: 65 additions & 21 deletions example-app/proguard-rules.pro
Original file line number Diff line number Diff line change
@@ -1,21 +1,65 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
# MapConductor Example App ProGuard Rules

# Keep line number information for debugging stack traces
-keepattributes SourceFile,LineNumberTable

# Optimization settings
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
-optimizationpasses 5
-allowaccessmodification
-dontpreverify

# Obfuscation settings (remove -dontobfuscate for better compression)
-repackageclasses ''
-allowaccessmodification

# Keep essential Android classes
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider

# Keep Compose essentials only
-keep class androidx.compose.runtime.Composable
-keep class * extends androidx.activity.ComponentActivity {
public <init>(...);
}

# Keep ViewModel constructors
-keep class * extends androidx.lifecycle.ViewModel {
<init>(...);
}

# Keep only essential MapConductor classes
-keep class com.mapconductor.example.MainActivity { *; }
-keep class com.mapconductor.example.MapConductorExampleApplication { *; }

# Keep data classes used in UI
-keepclassmembers class com.mapconductor.example.pages.stores.DemoData {
<fields>;
<methods>;
}

# Keep Parcelable implementations
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}

# Keep serialization
-keepattributes Signature
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}

# Remove logging in release builds
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** v(...);
public static *** i(...);
}
8 changes: 6 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Project-wide Gradle settings.
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
Expand Down Expand Up @@ -32,4 +32,8 @@ versionCode=1
versionName=1.0.0
javaVersion=11
jvmTarget=11
isMinifyEnabled=false
isMinifyEnabled=true
# R8 settings for handling duplicate classes
android.enableR8.fullMode=true
android.r8.ignoreAllowListBinaryFiles=true
android.enableJetifier=true
14 changes: 11 additions & 3 deletions mapconductor-core/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
plugins {
plugins {
id("com.android.library")
id("org.jetbrains.kotlin.android")
id("maven-publish")
Expand All @@ -21,6 +21,7 @@ android {
defaultConfig {
minSdk = project.property("minSdk").toString().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
}

buildFeatures {
Expand All @@ -32,10 +33,17 @@ android {
}

buildTypes {
debug {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android.txt"),
"proguard-rules.pro",
)
}
release {
isMinifyEnabled = project.property("isMinifyEnabled").toString().toBoolean()
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
getDefaultProguardFile("proguard-android.txt"),
"proguard-rules.pro",
)
}
Expand Down
3 changes: 3 additions & 0 deletions mapconductor-core/consumer-rules.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Keep Settings and its nested classes for consumers
-keep class com.mapconductor.settings.Settings { *; }
-keep class com.mapconductor.settings.Settings$* { *; }
Loading
Loading