1

I am a new developers trying to make Android application using the Parse's service. My application used the ParseUI available on Github and it work fine.

However, recently when running the application I encounter this error when the application start:

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/parse/ui/R$layout;
        at com.parse.ui.ParseLoginFragment.onCreateView(ParseLoginFragment.java:212)
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
        at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:551)
        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1171)
        at android.app.Activity.performStart(Activity.java:5241)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2157)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
        at android.app.ActivityThread.access$800(ActivityThread.java:135)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5001)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.parse.ui.R$layout" on path: DexPathList[[zip file "/data/app/com.udrink-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.udrink-1, /system/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
        at com.parse.ui.ParseLoginFragment.onCreateView(ParseLoginFragment.java:212)
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
        at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:551)
        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1171)
        at android.app.Activity.performStart(Activity.java:5241)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2157)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
        at android.app.ActivityThread.access$800(ActivityThread.java:135)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5001)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
Suppressed: java.lang.ClassNotFoundException: com.parse.ui.R$layout
        at java.lang.Class.classForName(Native Method)
        at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
        at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
        ... 20 more
 Caused by: java.lang.NoClassDefFoundError: Class "Lcom/parse/ui/R$layout;" not found
        ... 24 more

I know that there are a few questions about this problem before. But this is a little different since this error ONLY occur on devices running on Android KitKat and before (API <=19). When I executed the same codes - with NO modifications whatsoever, on devices running Android Lollipop (API >=21), it run perfectly fine.

Can anybody point out what is the problem here and how to fix it?

Here is my project's build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"
    defaultConfig {
        applicationId 'com.udrink'
        minSdkVersion 16
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
        renderscriptTargetApi 22
        renderscriptSupportModeEnabled true
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    // Module dependency on ParseLoginUI library sources
    compile 'com.google.android.gms:play-services:7.5.0'
    compile 'com.android.support:appcompat-v7:22.2.1'
    compile 'com.android.support:recyclerview-v7:22.2.1'
    compile 'com.android.support:cardview-v7:22.2.1'
    compile 'com.android.support:design:22.2.1'
    compile 'com.tonicartos:superslim:0.4.13'
    compile 'com.makeramen:roundedimageview:2.1.0'
    compile 'com.daimajia.swipelayout:library:1.2.0'
    compile 'com.github.gabrielemariotti.cards:cardslib-core:2.1.0'
    compile 'com.github.gabrielemariotti.cards:cardslib-cards:2.1.0'
    compile 'com.github.gabrielemariotti.cards:cardslib-recyclerview:2.1.0'
    compile('com.mikepenz:actionitembadge:3.0.1@aar') {
        transitive = true
    }
    compile 'com.github.jd-alexander:library:1.0.5'
    compile 'com.github.castorflex.smoothprogressbar:library:1.1.0'
    compile 'com.github.castorflex.smoothprogressbar:library-circular:1.1.0'
    compile project(':ParseLoginUI')
    compile project(':crop')
}

I am running Android Studio 1.3.

EDIT

Here is some additional information:

The specific code that cause this error is this:

at com.parse.ui.ParseLoginFragment.onCreateView(ParseLoginFragment.java:212)

Which point to this line in ParseLoginFragment.java in ParseUI:

View v = inflater.inflate(R.layout.com_parse_ui_parse_login_fragment, parent, false);

As you can see this is just plain layout inflate codes that does not have any API specific functions.

Furthermore, the message specify that the error is:

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/parse/ui/R$layout;

This as I understand mean it the R class of the ParseUI is not found.

Hùng Lý
  • 91
  • 1
  • 6

2 Answers2

1

you should check the API level first before invoke code(API) that is born greater than your minimized level. e.g. your minSdkVersion is 16. while you are using an API that is born in 22. then you need

if (android.os.Build.VERSION.SDK_INT >=22)
{
     //the specify code.
}
RyanShao
  • 429
  • 2
  • 9
  • I appreciate your answer but the error code is not API specific as my edited question state so this is not what I am looking for. – Hùng Lý Aug 11 '15 at 04:23
1

After my friend and I carefully check the codes we finally know what is the problem:

It is because a previous fix for this error as suggest by minhazur. I added multiDexEnabled true to my gradle.build without look through this document carefuly for pre-lollipop support. So the app with multi-dex class lost references to my library classes, hence the error of class R not found.

I fix this by follow the page's instruction:

  • First at this to my gradle.build:

    dependencies {
        compile 'com.android.support:multidex:1.0.0'
    }
    
  • Then I extend my Application class (or declare the application class in AndroidManifest.xml or override attachBaseContext() function) as instructed by the MultiDexApplication class document on the page.

This have fixed my problem.

Community
  • 1
  • 1
Hùng Lý
  • 91
  • 1
  • 6