【问题标题】:Android: Cast SDK v3 CastOptionsProvider not detected in release buildAndroid:发布版本中未检测到 Cast SDK v3 CastOptionsProvider
【发布时间】:2017-02-17 13:12:21
【问题描述】:

我已正确声明 CastOptiponsProvider manifest.xml

        <meta-data
        android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
        android:value="org.lao.yao.kd.cast.CastOptionsProvider" />

无论如何,我只有在构建应用程序以发布时才收到此错误消息:

java.lang.ClassNotFoundException: org.lao.yao.kd.cast.CastOptionsProvider

这是我的 CastOptionsProvider 类:

public class CastOptionsProvider implements OptionsProvider {

@Override
public CastOptions getCastOptions(Context context) {
    NotificationOptions notificationOptions = new NotificationOptions.Builder()
            .setActions(Arrays.asList(MediaIntentReceiver.ACTION_SKIP_NEXT,
                    MediaIntentReceiver.ACTION_TOGGLE_PLAYBACK,
                    MediaIntentReceiver.ACTION_STOP_CASTING), new int[]{1, 2})
            .setTargetActivityClassName(ExpandedControlsActivity.class.getName())
            .build();
    CastMediaOptions mediaOptions = new CastMediaOptions.Builder()
            .setImagePicker(new ImagePickerImpl())
            .setNotificationOptions(notificationOptions)
            .setExpandedControllerActivityClassName(ExpandedControlsActivity.class.getName())
            .build();
    return new CastOptions.Builder()
            .setReceiverApplicationId(MyJsonConfig.getPrefString(MyJsonConfig.KEY_CHROMECAST_RECEIVER_ID, context) )
            .setCastMediaOptions(mediaOptions)
            .build();
}

@Override
public List<SessionProvider> getAdditionalSessionProviders(Context appContext) {
    return null;
}

private static class ImagePickerImpl extends ImagePicker {

    @Override
    public WebImage onPickImage(MediaMetadata mediaMetadata, int type) {
        if ((mediaMetadata == null) || !mediaMetadata.hasImages()) {
            return null;
        }
        List<WebImage> images = mediaMetadata.getImages();
        if (images.size() == 1) {
            return images.get(0);
        } else {
            if (type == ImagePicker.IMAGE_TYPE_MEDIA_ROUTE_CONTROLLER_DIALOG_BACKGROUND) {
                return images.get(0);
            } else {
                return images.get(1);
            }
        }
    }
}

}

我还在我的发布版本中使用了 proguard。

【问题讨论】:

    标签: android casting chromecast


    【解决方案1】:

    我之前在使用 Proguard 和外部库(尤其是 Google 的东西)时遇到过这个问题。我在proguard-rules.pro 文件中使用了以下内容:

    -keep class org.lao.yao.kd.cast.CastOptionsProvider { *; }
    

    还有你的 CastIntentReceiver。

    -keep class org.lao.yao.kd.cast.CastIntentReceiver { *; }
    

    为了更好的衡量,我还添加了以下几行:

    -keep class android.support.** { *; }
    -keep class com.google.** { *; }
    -keep class java.nio.file.** { *; }
    

    【讨论】:

      猜你喜欢
      • 2017-01-08
      • 1970-01-01
      • 2018-08-10
      • 1970-01-01
      • 2018-02-28
      • 2020-04-04
      • 1970-01-01
      • 1970-01-01
      • 2017-03-01
      相关资源
      最近更新 更多