Harsh Mahajan
Harsh Mahajan

Reputation: 21

Adding compose to buildFeatures gives NoSuchMethodError

The only changes I made were:

  1. Added compose true in buildFeatures
  2. Added composeOptions block
  3. Added runtime dependency
apply plugin: 'com.android.application'
...

android {

    compileSdk 31

    defaultConfig {
        applicationId "com.test.example"

        ...
    }

    buildFeatures {
        dataBinding true
        compose true
    }

    ...

    composeOptions {
        kotlinCompilerExtensionVersion '1.0.4'
    }

    ...
    }

    dependencies {
    ...

    // Compose
    implementation 'androidx.compose.runtime:runtime:1.0.4'

    ...
}

Here is the logcat:

    java.lang.NoSuchMethodError: No virtual method Int$class-BusStop()I in class Lcom/example/test/data/LiveLiterals$DataClassesKt; or its super classes (declaration of 'com.example.test.data.LiveLiterals$DataClassesKt' appears in /data/app/com.example.test.debug-_m_f7seUKhs5ZD32lzD5Jw==/base.apk!classes15.dex)
        at com.example.test.data.BusStop.<clinit>(Unknown Source:11)
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:454)
        at java.lang.Class.forName(Class.java:379)
        at androidx.navigation.NavType$Companion.fromArgType(NavType.kt:146)
        at androidx.navigation.NavInflater.inflateArgument(NavInflater.kt:165)
        at androidx.navigation.NavInflater.inflateArgumentForBundle(NavInflater.kt:145)
        at androidx.navigation.NavInflater.inflateAction(NavInflater.kt:316)
        at androidx.navigation.NavInflater.inflate(NavInflater.kt:107)
        at androidx.navigation.NavInflater.inflate(NavInflater.kt:114)
        at androidx.navigation.NavInflater.inflate(NavInflater.kt:64)
        at androidx.navigation.NavController.setGraph(NavController.kt:1026)
        at androidx.navigation.fragment.NavHostFragment.onCreate(NavHostFragment.kt:150)
        at androidx.fragment.app.Fragment.performCreate(Fragment.java:2979)
        at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:473)
        at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:257)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1828)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1752)
        at androidx.fragment.app.FragmentManager.execSingleAction(FragmentManager.java:1658)
        at androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:323)
        at androidx.fragment.app.FragmentContainerView.<init>(FragmentContainerView.kt:158)
        at androidx.fragment.app.FragmentLayoutInflaterFactory.onCreateView(FragmentLayoutInflaterFactory.java:53)
        at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:135)
        at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:295)
        at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:274)
        at android.view.LayoutInflater.tryCreateView(LayoutInflater.java:1069)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:997)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:682)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:481)
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:699)
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:195)
        at androidx.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:303)
        at androidx.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:284)
        at com.example.test.activity.MainActivity.onCreate(MainActivity.kt:84)
        at android.app.Activity.performCreate(Activity.java:7802)
        at android.app.Activity.performCreate(Activity.java:7791)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
2021-11-02 09:22:44.552 11192-11192/com.hmproductions.sgbuses.debug E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

Edit: Here is full build.gradle

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-parcelize'
apply plugin: 'dagger.hilt.android.plugin'
apply plugin: 'androidx.navigation.safeargs'
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'

android {

    compileSdk 31

    defaultConfig {
        applicationId "com.example.test"
        minSdk 24
        targetSdk 31
        versionCode 43
        versionName "5.4"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    signingConfigs {

        release {
            <keystore_password>

            v1SigningEnabled true
            v2SigningEnabled true
        }
    }

    buildTypes {

        release {
            signingConfig signingConfigs.release
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }

        internal {
            signingConfig signingConfigs.release
            minifyEnabled true
            shrinkResources true
            debuggable true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }

        debug {
            applicationIdSuffix ".debug"
            minifyEnabled false
            shrinkResources false
            debuggable true
        }
    }

    flavorDimensions "country"

    productFlavors {
        A {
            dimension "country"
            resConfigs("en", "X", "Y", "Z")
        }

        B {
            dimension "country"
            resConfigs("en", "something")
        }
    }

    buildFeatures {
        dataBinding true
        compose true
    }

    compileOptions {
        targetCompatibility JavaVersion.VERSION_1_8
        sourceCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }

    composeOptions {
        kotlinCompilerExtensionVersion '1.0.4'
    }

    testOptions {
        unitTests.includeAndroidResources = true
    }

    dynamicFeatures = [':dfsomething']

    sourceSets {
        A {
            assets {
                srcDirs 'src/A/assets'
            }
        }
        B {
            assets {
                srcDirs 'src/B/assets'
            }
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.annotation:annotation:1.2.0'

    // JUnit 4 and Mockito framework
    testImplementation 'junit:junit:4.13.2'
    testImplementation 'org.mockito:mockito-core:2.19.1'
    testImplementation 'androidx.test:core:1.4.0'
    androidTestImplementation 'androidx.test:runner:1.4.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'

    // Compose
    implementation 'androidx.compose.runtime:runtime:1.0.4'

    // Support Libraries
    implementation 'androidx.appcompat:appcompat:1.3.1'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.browser:browser:1.3.0'
    implementation 'androidx.preference:preference-ktx:1.1.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
    implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0'
    implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"

    // Lifecycle
    implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
    implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.3.1"
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1"

    // Hilt
    implementation "com.google.dagger:hilt-android:2.38.1"
    kapt "com.google.dagger:hilt-compiler:2.38.1"
    implementation 'androidx.hilt:hilt-work:1.0.0'
    kapt 'androidx.hilt:hilt-compiler:1.0.0'

    // Gson
    implementation 'com.google.code.gson:gson:2.8.6'

    // Room persistence library
    implementation "androidx.room:room-runtime:2.3.0"
    kapt "androidx.room:room-compiler:2.3.0"
    implementation "androidx.room:room-ktx:2.3.0"

    // Retrofit
    implementation 'com.squareup.retrofit2:retrofit:2.6.4'
    implementation 'com.squareup.retrofit2:converter-gson:2.6.4'
    implementation 'com.squareup.okhttp3:logging-interceptor:4.7.2'

    // Kotlin
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2'

    // Navigation
    implementation "androidx.navigation:navigation-fragment-ktx:2.4.0-alpha10"
    implementation "androidx.navigation:navigation-ui-ktx:2.4.0-alpha10"
    implementation "androidx.navigation:navigation-dynamic-features-fragment:2.4.0-alpha10"

    // Location
    implementation "com.google.android.gms:play-services-location:17.1.0"
    implementation "com.google.android.gms:play-services-maps:17.0.0"

    // Firebase Analytics
    implementation platform('com.google.firebase:firebase-bom:28.4.1')
    implementation 'com.google.firebase:firebase-analytics-ktx'
    implementation 'com.google.firebase:firebase-crashlytics-ktx'
    implementation 'com.google.firebase:firebase-dynamic-module-support:16.0.0-beta01'

    // Google Play Core
    implementation 'com.google.android.play:core:1.10.2'
    implementation 'com.google.android.play:core-ktx:1.8.1'


    // Work Manager
    implementation("androidx.work:work-runtime-ktx:2.7.0-beta01")
}

Upvotes: 1

Views: 1103

Answers (1)

Akhha8
Akhha8

Reputation: 490

Some checks that I recommend you to do based on the official doc. https://developer.android.com/jetpack/compose/interop/adding#setup

  1. In project build.gradle file make sure you have the the correct version of the AGP and Kotlin.

    dependencies {
    
    classpath "com.android.tools.build:gradle:7.0.0"
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21"
    ...
    }
    

In your app's build.gradle file check the for:

  1. Min Sdk to 21

  2. compile options to Java 8

  3. Kotlin options to 1.8

  4. Use the latest stable version of Android Studio ArticFox https://developer.android.com/studio

Your app's build.gradle file might looks like.

android {

compileSdk 31

defaultConfig {
    applicationId "com.test.example"
    minSdkVersion 21
    ...
}

buildFeatures {
    dataBinding true
    compose true
}

...

// Set both the Java and Kotlin compilers to target Java 8.
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
    jvmTarget = "1.8"
}

composeOptions {
    kotlinCompilerExtensionVersion '1.0.4'
}

...
}

dependencies {
...

// Compose
implementation 'androidx.compose.runtime:runtime:1.0.4'

...
}

Upvotes: 1

Related Questions