mapbox / mapbox-navigation-android-examples

Other
54 stars 46 forks source link

TurnByTurnExperienceActivity crash when renderRouteDrawData #187

Open mckeny3 opened 1 year ago

mckeny3 commented 1 year ago
 */
private val routesObserver = RoutesObserver { routeUpdateResult ->
    try{
    if (routeUpdateResult.navigationRoutes.isNotEmpty()) {

        // RouteLine: wrap the NavigationRoute objects and pass them
        // to the MapboxRouteLineApi to generate the data necessary to draw the route(s)
        // on the map.
        routeLineApi.setNavigationRoutes(
            routeUpdateResult.navigationRoutes
        ) { value ->
            // RouteLine: The MapboxRouteLineView expects a non-null reference to the map style.
            // the data generated by the call to the MapboxRouteLineApi above must be rendered
            // by the MapboxRouteLineView in order to visualize the changes on the map.
            val toast = Toast.makeText(
                this@TurnByTurnExperienceActivity,
                value.toString(),
                Toast.LENGTH_SHORT
            )
            toast.show()
            binding.mapView.getMapboxMap().getStyle()?.apply {
                logE("STYLE_LOADING_ERROR", this.toString())
                logE("STYLE_LOADING_ERROR", value.toString())

               ///wait untill style is loaded

if(this.isValid() && this.isStyleLoaded) { routeLineView.renderRouteDrawData(this, value) } } }

        // update the camera position to account for the new route
        viewportDataSource.onRouteChanged(routeUpdateResult.navigationRoutes.first())
        viewportDataSource.evaluate()
    } else {
        // remove the route line and route arrow from the map
        val style = binding.mapView.getMapboxMap().getStyle()
        if (style != null) {
            routeLineApi.clearRouteLine { value ->
                routeLineView.renderClearRouteLineValue(
                    style,
                    value
                )
            }
            routeArrowView.render(style, routeArrowApi.clearArrows())
        }

        // remove the route reference from camera position evaluations
        viewportDataSource.clearRouteData()
        viewportDataSource.evaluate()
    }
    }catch (e:Exception){
        logD("STYLE_LOADING_ERROR", "Style is not loaded yet"+e.message)
    }
}` if i comment out 
routeLineView.renderRouteDrawData(this, value) the app doesn't crash...trip details and everything gets render except for the blue line ......this is my app level gradle `apply plugin: "com.android.application"

// @generated begin kotlin-plugin - expo prebuild (DO NOT MODIFY) sync-d3b3ca51f46e095030490967ff941f9810374f66 apply plugin: 'kotlin-android' // @generated end kotlin-plugin apply plugin: "com.facebook.react"

import com.android.build.OutputFile

def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath() def expoDebuggableVariants = ['debug'] // Override debuggableVariants for expo-updates debugging if (System.getenv('EX_UPDATES_NATIVE_DEBUG') == "1") { react { expoDebuggableVariants = [] } }

/**

// Override hermesEnabled by expo.jsEngine ext { hermesEnabled = (findProperty('expo.jsEngine') ?: "hermes") == "hermes" }

/**

/**

/**

/**

android {

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

// @generated begin @rnmapbox/maps-libcpp - expo prebuild (DO NOT MODIFY) sync-e24830a5a3e854b398227dfe9630aabfaa1cadd1 packagingOptions { pickFirst 'lib/x86/libc++_shared.so' pickFirst 'lib/x86_64/libc++_shared.so' pickFirst 'lib/arm64-v8a/libc++_shared.so' pickFirst 'lib/armeabi-v7a/libc++_shared.so' } // @generated end @rnmapbox/maps-libcpp // @generated begin view-binding - expo prebuild (DO NOT MODIFY) sync-1544b0716179aa2f63bb3ee58fc0f077fc85bcf2 viewBinding { enabled = true } // @generated end view-binding ndkVersion rootProject.ext.ndkVersion

compileSdkVersion rootProject.ext.compileSdkVersion

namespace 'com.mckenytech.swyfiodriver'
defaultConfig {
    applicationId 'com.mckenytech.swyfiodriver'
    minSdkVersion rootProject.ext.minSdkVersion
    targetSdkVersion rootProject.ext.targetSdkVersion
    versionCode 1
    versionName "1.0.0"
}

splits {
    abi {
        reset()
        enable enableSeparateBuildPerCPUArchitecture
        universalApk false  // If true, also generate a universal APK
        include (*reactNativeArchitectures())
    }
}
signingConfigs {
    debug {
        storeFile file('debug.keystore')
        storePassword 'android'
        keyAlias 'androiddebugkey'
        keyPassword 'android'
    }
}
buildTypes {
    debug {
        signingConfig signingConfigs.debug
    }
    release {
        // Caution! In production, you need to generate your own keystore file.
        // see https://reactnative.dev/docs/signed-apk-android.
        signingConfig signingConfigs.debug
        shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)
        minifyEnabled enableProguardInReleaseBuilds
        proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
    }
}

// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
    variant.outputs.each { output ->
        // For each separate APK per architecture, set a unique version code as described here:
        // https://developer.android.com/studio/build/configure-apk-splits.html
        // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.
        def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
        def abi = output.getFilter(OutputFile.ABI)
        if (abi != null) {  // null for the universal-debug, universal-release variants
            output.versionCodeOverride =
                    defaultConfig.versionCode * 1000 + versionCodes.get(abi)
        }

    }
}

}

// Apply static values from gradle.properties to the android.packagingOptions // Accepts values in comma delimited lists, example: // android.packagingOptions.pickFirsts=/LICENSE,**/picasa.ini ["pickFirsts", "excludes", "merges", "doNotStrip"].each { prop -> // Split option: 'foo,bar' -> ['foo', 'bar'] def options = (findProperty("android.packagingOptions.$prop") ?: "").split(","); // Trim all elements in place. for (i in 0..<options.size()) options[i] = options[i].trim(); // [] - "" is essentially [""].filter(Boolean) removing all empty strings. options -= ""

if (options.length > 0) {
    println "android.packagingOptions.$prop += $options ($options.length)"
    // Ex: android.packagingOptions.pickFirsts += '**/SCCS/**'
    options.each {
        android.packagingOptions[prop] += it
    }
}

}

dependencies { // @generated begin implementation installer - expo prebuild (DO NOT MODIFY) sync-c368448d790ad0ed58f621364f7e3e0fc7fae55d

implementation "com.mapbox.navigation:ui-dropin:2.10.1"

implementation "com.mapbox.maps:android:10.13.0"

testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'

implementation "com.mapbox.navigation:android:2.10.1"

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.21"
implementation "androidx.core:core-ktx:1.10.1"
implementation "com.google.android.material:material:1.9.0"
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1'
implementation "androidx.appcompat:appcompat:1.6.1"
implementation "androidx.cardview:cardview:1.0.0"
implementation "androidx.constraintlayout:constraintlayout:2.1.4"
implementation "com.google.android.gms:play-services-location:20.0.0"
implementation "com.squareup.leakcanary:leakcanary-android:2.11"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1"

// @generated end implementation installer // The version of react-native is set by the React Native Gradle Plugin implementation("com.facebook.react:react-android")

def isGifEnabled = (findProperty('expo.gif.enabled') ?: "") == "true";
def isWebpEnabled = (findProperty('expo.webp.enabled') ?: "") == "true";
def isWebpAnimatedEnabled = (findProperty('expo.webp.animated') ?: "") == "true";
def frescoVersion = rootProject.ext.frescoVersion

// If your app supports Android versions before Ice Cream Sandwich (API level 14)
if (isGifEnabled || isWebpEnabled) {
    implementation("com.facebook.fresco:fresco:${frescoVersion}")
    implementation("com.facebook.fresco:imagepipeline-okhttp3:${frescoVersion}")
}

if (isGifEnabled) {
    // For animated gif support
    implementation("com.facebook.fresco:animated-gif:${frescoVersion}")
}

if (isWebpEnabled) {
    // For webp support
    implementation("com.facebook.fresco:webpsupport:${frescoVersion}")
    if (isWebpAnimatedEnabled) {
        // Animated webp support
        implementation("com.facebook.fresco:animated-webp:${frescoVersion}")
    }
}

implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.0.0")

debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}")
debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
    exclude group:'com.squareup.okhttp3', module:'okhttp'
}
debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}")

if (hermesEnabled.toBoolean()) {
    implementation("com.facebook.react:hermes-android")
} else {
    implementation jscFlavor
}

}

apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json')"].execute(null, rootDir).text.trim(), "../native_modules.gradle"); applyNativeModulesAppBuildGradle(project)

and this is the project level// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript { ext { // @generated begin kotlin-version - expo prebuild (DO NOT MODIFY) sync-7016fa9bfefaee9751ded5cd30217d49469cf07f

  if (project.properties.containsKey('android.kotlinVersion')) {
    kotlinVersion = project.properties['android.kotlinVersion']
  } else {
    kotlinVersion = '1.7.21'  // Default value if not defined in gradle.properties
  }

// @generated end kotlin-version buildToolsVersion = findProperty('android.buildToolsVersion') ?: '33.0.0' minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '21') compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '33') targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '33') if (findProperty('android.kotlinVersion')) { kotlinVersion = findProperty('android.kotlinVersion') } frescoVersion = findProperty('expo.frescoVersion') ?: '2.5.0'

    // We use NDK 23 which has both M1 support and is the side-by-side NDK version from AGP.
    ndkVersion = "23.1.7779620"
}
repositories {
    google()
    mavenCentral()
}
dependencies {

// @generated begin kotlin-gradle-plugin - expo prebuild (DO NOT MODIFY) sync-ff8c56c90f1dc46b2f08298aded350044c114c0c

    classpath 'com.android.tools.build:gradle:7.4.1'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.21"
    classpath('com.facebook.react:react-native-gradle-plugin')
}

}

allprojects { repositories { maven { // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm url(new File(['node', '--print', "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), '../android')) } maven { // Android JSC is installed from npm url(new File(['node', '--print', "require.resolve('jsc-android/package.json')"].execute(null, rootDir).text.trim(), '../dist')) }

    google()
    mavenCentral()
    maven { url 'https://www.jitpack.io' }
}

} // @generated begin @rnmapbox/maps-v2-maven - expo prebuild (DO NOT MODIFY) sync-32f1b7024bb5099f2805443b1960a3233ccde124

allprojects { repositories { maven { url 'https://api.mapbox.com/downloads/v2/releases/maven' authentication { basic(BasicAuthentication) } credentials { username = 'mapbox' password = project.properties['MAPBOX_DOWNLOADS_TOKEN'] ?: "" } } } }

// @generated end @rnmapbox/maps-v2-maven`

tinBilicCoreline commented 1 year ago

same here.... cannot start navigation in any of example projects

dominik992 commented 1 year ago

Same issue. I've spent 5 days trying to find a solution but without any luck

kcuric-coreline commented 1 year ago

same issue ...

mckeny3 commented 1 year ago

been working on this a few days now...what i discovered is that if your using react native 71xx ...thats when it crash.

tinBilicCoreline commented 1 year ago

@mckeny3 thank you! downgraded to 0.70.x and now it works !

mckeny3 commented 1 year ago

if we could now figure what changes in 71 is causing the crash

arunprasath2007 commented 1 year ago

Still the same issue for now. Is there a way to resolve this with latest RN version. I just cant go back to an older version for various reasons. Thanks and looking forward to an update on this.