2015-04-04 43 views
1

我有一个使用库的应用程序,它依次具有外部JAR - Cardboard SDK。从外部库访问内部类时出现NoClassDefFoundError

应用程序编译但在运行时我得到NoClassDefFoundError - 它无法从Cardboard SDK中找到内部类CardboardDevice$DeviceParams

完整堆栈跟踪:

java.lang.NoClassDefFoundError: com.google.vrtoolkit.cardboard.proto.CardboardDevice$DeviceParams 
     at com.google.vrtoolkit.cardboard.CardboardDeviceParams.createFromInputStream(CardboardDeviceParams.java:273) 
     at com.google.vrtoolkit.cardboard.HeadMountedDisplayManager.createCardboardDeviceParamsFromExternalStorage(HeadMountedDisplayManager.java:247) 
     at com.google.vrtoolkit.cardboard.HeadMountedDisplayManager.createCardboardDeviceParams(HeadMountedDisplayManager.java:200) 
     at com.google.vrtoolkit.cardboard.HeadMountedDisplayManager.<init>(HeadMountedDisplayManager.java:54) 
     at com.google.vrtoolkit.cardboard.CardboardView.init(CardboardView.java:793) 
     at com.google.vrtoolkit.cardboard.CardboardView.<init>(CardboardView.java:262) 
     at org.androidworks.villagevr.villagevr.BaseVRActivity.onCreate(BaseVRActivity.java:65) 
     at android.app.Activity.performCreate(Activity.java:5933) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
     at android.app.ActivityThread.access$800(ActivityThread.java:144) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5221) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

图书馆build.gradle

apply plugin: 'com.android.library' 

android { 
    compileSdkVersion 21 
    buildToolsVersion "19.1.0" 

    defaultConfig { 
     //applicationId "org.androidworks.vrcommon" 
     minSdkVersion 9 
     targetSdkVersion 21 
     versionCode 1 
     versionName "1.0" 
    } 
} 

dependencies { 
// compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile files('libs/cardboard.jar') 
    compile 'com.android.support:appcompat-v7:21.0.3' 
    compile project(':LiveWallpaperTulipsCommon') 
} 

应用build.gradle

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 21 
    buildToolsVersion "19.1.0" 

    defaultConfig { 
     applicationId "org.androidworks.villagevr.villagevr" 
     minSdkVersion 9 
     targetSdkVersion 21 
     versionCode 15 
     versionName "1.5" 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile project(':LiveWallpaperTulipsCommon') 
    compile project(':LiveWallpaperVillageCommon') 
    compile project(':VRCommon') 
} 
+0

这是一个'debug'或'release'版本,是否给你带来问题?如果是后者,可能是ProGuard配置问题。 – CommonsWare 2015-04-04 18:15:17

+0

它是调试版本 – keaukraine 2015-04-04 18:18:38

回答

2

的纸板SDK包括libprotobuf jar文件。确保它存在并包含在您的构建中。

+0

谢谢。我应该首先注意到这一点。事实上,它缺少protobuf库,但堆栈跟踪并没有真正清楚它(该类来自'proto'包) – keaukraine 2015-04-05 07:11:36