box / box-android-preview-sdk

Box Android Preview SDK
Apache License 2.0
13 stars 10 forks source link

Preview Box SDK crashes with EXOPlayer #15

Closed RosalineMakar closed 6 years ago

RosalineMakar commented 7 years ago

Hello, In our application, We used to the preview box SDK, and it worked fine, then we added ExoPlayer r2.5.1 to support playing videos in the app, However, after adding the EXO Player, the preview box SDK no longer works, it displays the following Exception for this line: BoxPreviewActivity.IntentBuilder builder = BoxPreviewActivity.createIntentBuilder(context, boxSharedLinkSession, boxFile);

08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: Rejecting re-init on previously-failed class java.lang.Class: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/exoplayer/audio/AudioCapabilitiesReceiver$Listener; 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void com.box.androidsdk.preview.ext.DefaultPreviewController.(com.box.androidsdk.content.models.BoxSession) (DefaultPreviewController.java:35) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void com.box.androidsdk.preview.BoxPreviewActivity$IntentBuilder.(android.content.Context, com.box.androidsdk.content.models.BoxSession, com.box.androidsdk.content.models.BoxFile) (BoxPreviewActivity.java:411) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void com.box.androidsdk.preview.BoxPreviewActivity$2.(android.content.Context, com.box.androidsdk.content.models.BoxSession, com.box.androidsdk.content.models.BoxFile, android.content.Context) (BoxPreviewActivity.java:380) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at com.box.androidsdk.preview.BoxPreviewActivity$IntentBuilder com.box.androidsdk.preview.BoxPreviewActivity.createIntentBuilder(android.content.Context, com.box.androidsdk.content.models.BoxSession, com.box.androidsdk.content.models.BoxFile) (BoxPreviewActivity.java:380) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void com.ibm.cio.be.ppm.fragments.BoxPreviewRetainedFragment$GetFileFromSharedLink.onPostExecute(com.box.androidsdk.content.models.BoxFile) (BoxPreviewRetainedFragment.java:150) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void com.ibm.cio.be.ppm.fragments.BoxPreviewRetainedFragment$GetFileFromSharedLink.onPostExecute(java.lang.Object) (BoxPreviewRetainedFragment.java:102) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void android.os.AsyncTask.finish(java.lang.Object) (AsyncTask.java:660) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void android.os.AsyncTask.-wrap1(android.os.AsyncTask, java.lang.Object) (AsyncTask.java:-1) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void android.os.AsyncTask$InternalHandler.handleMessage(android.os.Message) (AsyncTask.java:677) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void android.os.Looper.loop() (Looper.java:154) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6682) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:1520) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1410) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.exoplayer.audio.AudioCapabilitiesReceiver$Listener" on path: DexPathList[[zip file "/data/app/com.ibm.cio.be.ppm-1/base.apk", zip file "/data/app/com.ibm.cio.be.ppm-1/split_lib_dependencies_apk.apk", zip file "/data/app/com.ibm.cio.be.ppm-1/split_lib_slice_0_apk.apk", zip file "/data/app/com.ibm.cio.be.ppm-1/split_lib_slice_1_apk.apk", zip file "/data/app/com.ibm.cio.be.ppm-1/split_lib_slice_2_apk.apk", zip file "/data/app/com.ibm.cio.be.ppm-1/split_lib_slice_3_apk.apk", zip file "/data/app/com.ibm.cio.be.ppm-1/split_lib_slice_4_apk.apk", zip file "/data/app/com.ibm.cio.be.ppm-1/split_lib_slice_5_apk.apk", zip file "/data/app/com.ibm.cio.be.ppm-1/split_lib_slice_6_apk.apk", zip file "/data/app/com.ibm.cio.be.ppm-1/split_lib_slice_7_apk.apk", zip file "/data/app/com.ibm.cio.be.ppm-1/split_lib_slice_8_apk.apk", zip file "/data/app/com.ibm.cio.be.ppm-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.ibm.cio.be 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:56) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:380) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void com.box.androidsdk.preview.ext.DefaultPreviewController.(com.box.androidsdk.content.models.BoxSession) (DefaultPreviewController.java:35) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void com.box.androidsdk.preview.BoxPreviewActivity$IntentBuilder.(android.content.Context, com.box.androidsdk.content.models.BoxSession, com.box.androidsdk.content.models.BoxFile) (BoxPreviewActivity.java:411) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void com.box.androidsdk.preview.BoxPreviewActivity$2.(android.content.Context, com.box.androidsdk.content.models.BoxSession, com.box.androidsdk.content.models.BoxFile, android.content.Context) (BoxPreviewActivity.java:380) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at com.box.androidsdk.preview.BoxPreviewActivity$IntentBuilder com.box.androidsdk.preview.BoxPreviewActivity.createIntentBuilder(android.content.Context, com.box.androidsdk.content.models.BoxSession, com.box.androidsdk.content.models.BoxFile) (BoxPreviewActivity.java:380) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void com.ibm.cio.be.ppm.fragments.BoxPreviewRetainedFragment$GetFileFromSharedLink.onPostExecute(com.box.androidsdk.content.models.BoxFile) (BoxPreviewRetainedFragment.java:150) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void com.ibm.cio.be.ppm.fragments.BoxPreviewRetainedFragment$GetFileFromSharedLink.onPostExecute(java.lang.Object) (BoxPreviewRetainedFragment.java:102) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void android.os.AsyncTask.finish(java.lang.Object) (AsyncTask.java:660) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void android.os.AsyncTask.-wrap1(android.os.AsyncTask, java.lang.Object) (AsyncTask.java:-1) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void android.os.AsyncTask$InternalHandler.handleMessage(android.os.Message) (AsyncTask.java:677) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void android.os.Looper.loop() (Looper.java:154) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6682) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:1520) 08-21 21:51:29.809 20459-20459/com.ibm.cio.be.ppm I/art: at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1410)


This is our gradle file: apply plugin: 'com.android.application'

android { compileSdkVersion 25 buildToolsVersion '25.0.3' packagingOptions { exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/maven/org.apache.commons/commons-lang3/pom.properties' exclude 'META-INF/maven/org.apache.commons/commons-lang3/pom.xml' } defaultConfig { applicationId 'com.ibm.cio.be.ppm' minSdkVersion 21 versionCode 20 versionName "2.0" targetSdkVersion 25 multiDexEnabled true

    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

signingConfigs {
    release {
        storeFile file("ppmkeystore.jks")
        storePassword "ppmkeystore"
        keyAlias "ppmalias"
        keyPassword "ppmalias"
    }
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release
    }
}
productFlavors {
    dev {
        applicationId "com.ibm.cio.be.ppm"
        versionName "2.0-dev"
    }
    tst {
        applicationId "com.ibm.cio.be.ppm"
        versionName "2.0-test"
    }
    stg {
        applicationId "com.ibm.cio.be.ppm"
        versionName "2.0-stg"
    }
    prod {
        applicationId "com.ibm.cio.be.ppm"
        versionName "2.0"
    }
}
dexOptions {
    jumboMode true
}
dataBinding {
    enabled = true
}

}

dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.github.bumptech.glide:glide:3.6.1' compile 'com.box:box-android-sdk:4.0.8' compile 'com.loopj.android:android-async-http:1.4.9' compile 'com.box:box-android-preview-sdk:2.0.4' compile 'com.android.support:cardview-v7:25.4.0' compile 'com.android.support:appcompat-v7:25.4.0' compile 'com.android.support:support-v4:25.4.0' compile 'com.android.support:design:25.4.0' compile 'com.ibm.watson.developer_cloud:java-sdk:3.3.1' compile project(':MQA-Android-2.7.4') compile 'com.eclipsesource.minimal-json:minimal-json:0.9.1' compile 'org.apmem.tools:layouts:1.10' compile 'jp.wasabeef:recyclerview-animators:2.2.4' compile 'org.jsoup:jsoup:1.9.1' compile 'se.emilsjolander:StickyScrollViewItems:1.1.0' compile 'com.google.android.exoplayer:exoplayer:r2.5.1'

androidTestCompile 'com.android.support:support-annotations:25.4.0'
androidTestCompile 'com.android.support.test:runner:0.4.1'
androidTestCompile 'com.android.support.test:rules:0.4.1'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'

testCompile 'junit:junit:4.12'

}

doncung commented 6 years ago

Hi Rosaline, Sorry for the delay. The problem seems to be that currently the preview SDK also uses ExoPlayer uses compile 'com.google.android.exoplayer:exoplayer:r1.5.4' which has likely been broken by the usage of 2.5.1. If it's possible to use an earlier version for now that should work until we release a new version that uses the latest ExoPlayer.

doncung commented 6 years ago

Hi Rosaline,

After doing some further investigation on this it appears that ExoPlayer is backwards compatible since google has changed the package name. However due to an "oversight" they did not change their maven package (see https://github.com/google/ExoPlayer/issues/1842) so while both exoplayer 1 and 2 can be used together in one application it runs into gradle issues due to the naming.

As such as long as exoplayer 2 does not come from maven (i.e. from a submodule) as in your line: compile 'com.google.android.exoplayer:exoplayer:r2.5.1' You should be able to use both our preview sdk and your current logic. I was able to create a very simple application that tests this works. Basically I followed the "Locally" instructions from https://github.com/google/ExoPlayer

My dependencies for this project were: compile 'com.box:box-android-preview-sdk:2.0.4' compile project(':exoplayer-library-core') compile project(':exoplayer-library-dash') compile project(':exoplayer-library-ui')

This should unblock you until we can migrate officially to the new version of Exoplayer. Since there are quite a few changes necessary, I do not know when that will be completed.

RosalineMakar commented 6 years ago

Hello, Thanks a lot for your help, the workaround you suggested worked, would you please notify me of the once the migration is completed? Thanks in advance Rosaline

doncung commented 6 years ago

Sure we will update our documentation once this happens . Closing this issue.