-
Notifications
You must be signed in to change notification settings - Fork 626
Description
[REQUIRED] Step 2: Describe your environment
Android Studio version: 3.6.1
Firebase Component: Firebase Performance Monitoring
Component version: 19.0.6
ExoPlayer version: r2.11.3
[REQUIRED] Step 3: Describe the problem
Firebase Performance Monitoring + R8 encounters problems when using obfuscated library.
This reproduction occurred when I used Google ExoPlayer.
Steps to reproduce:
-
Obfuscate & build aar ExoPlayer in R8
Get the latest version of release-v2 branch from GitHub of ExoPlayer.
Enable obfuscation by R8 for library-core.
=>set the obfuscation out of scorpe as appropriate.Execute the assemblyRelease task of library-core, library-dash, library-hls, library-smoothstreaming, and library-ui.
Execute the library-all assemblyRelease with the generated jar file.
=>ExoPlayer's aar is completed. -
Load the library and enable Firebase Performance Monitoring in the application.
-
Running the app occurred an exception.
=>Please check out the Crash logs.
Tried patterns
- AAR obfuscated by R8 + Enable Firebase Performance Monitoring : NG
- AAR obfuscated by R8 + Disable Firebase Performance Monitoring : OK
- Unobfuscated AAR + Enable Firebase Performance Monitoring : OK
- AAR obfuscated by ProGuard + Enable Firebase Performance Monitoring : OK
Relevant Code:
- Sample Application
import android.net.Uri;
import android.os.Bundle;
import android.view.SurfaceView;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.source.dash.DashMediaSource;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
public class MainActivity extends AppCompatActivity {
SimpleExoPlayer mExoPlayer = null;
SurfaceView mSurfaceView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSurfaceView = findViewById(R.id.surface_view);
}
@Override
protected void onStart() {
super.onStart();
mExoPlayer = new SimpleExoPlayer.Builder(this).build();
mExoPlayer.setVideoSurfaceView(mSurfaceView);
Uri uri = Uri.parse("http://www.bok.net/dash/tears_of_steel/cleartext/stream.mpd");
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this, "User Agent");
DashMediaSource dashMediaSource = new DashMediaSource.Factory(dataSourceFactory).createMediaSource(uri);
mExoPlayer.prepare(dashMediaSource);
mExoPlayer.setPlayWhenReady(true);
}
@Override
protected void onStop() {
if (mExoPlayer != null) {
mExoPlayer.stop();
mExoPlayer.release();
mExoPlayer = null;
}
super.onStop();
}
}
Crash Logs
--------- beginning of crash
2020-04-09 17:22:58.634 31471-31471/com.example.testapp_exo_r8 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.testapp_exo_r8, PID: 31471
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/exoplayer2/C;
at com.google.android.exoplayer2.e.<init>(Unknown Source:61)
at com.google.android.exoplayer2.e.<init>(Unknown Source:18)
at com.google.android.exoplayer2.e.<init>(Unknown Source:8)
at com.google.android.exoplayer2.SimpleExoPlayer$Builder.<init>(Unknown Source:7)
at com.google.android.exoplayer2.SimpleExoPlayer$Builder.<init>(Unknown Source:5)
at com.example.testapp_exo_r8.MainActivity.onStart(MainActivity.java:30)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1333)
at android.app.Activity.performStart(Activity.java:6992)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2780)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.exoplayer2.C" on path: DexPathList[[zip file "/data/app/com.example.testapp_exo_r8-9PEyGT_SiZPKi56jWRLmAQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.testapp_exo_r8-9PEyGT_SiZPKi56jWRLmAQ==/lib/arm64, /system/lib64, /vendor/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.google.android.exoplayer2.e.<init>(Unknown Source:61)
at com.google.android.exoplayer2.e.<init>(Unknown Source:18)
at com.google.android.exoplayer2.e.<init>(Unknown Source:8)
at com.google.android.exoplayer2.SimpleExoPlayer$Builder.<init>(Unknown Source:7)
at com.google.android.exoplayer2.SimpleExoPlayer$Builder.<init>(Unknown Source:5)
at com.example.testapp_exo_r8.MainActivity.onStart(MainActivity.java:30)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1333)
at android.app.Activity.performStart(Activity.java:6992)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2780)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
2020-04-09 17:23:04.017 31471-31491/com.example.testapp_exo_r8 I/zygote64: System.exit called, status: 1
For details, please check the sample project.
TestApp_Exo_R8.zip
Thanks in advance for any help!