Mopub ClassNotFoundException в моем FragmentActivity

Я пытаюсь добавить в свое приложение mopub. Я установил SDK через плагин AndroidStudio. и добавил это в мой xml

 <com.mopub.mobileads.mopubview
   android:id="@+id/adview"
    android:layout_alignParentBottom="true"
    android:layout_width="fill_parent"
    android:layout_height="50dp">
</com.mopub.mobileads.mopubview>

Но это дает мне следующие ошибки:

The following classes could not be found:
- com.mopub.mobileads.mopubview (Fix Build Path, Create Class)

и когда я запускаю приложение, оно вылетает:

java.lang.RuntimeException: не удалось запустить действие ComponentInfo {com.example.hroshandel.myapplication / com.example.hroshandel.myapplication.SimpleIntro_FragmentActivity}: android.view.InflateException: двоичный файл XML, строка № 15: ошибка наполнения класса com.mopub .mobileads.mopubview

Вызвано: android.view.InflateException: строка двоичного XML-файла №15: ошибка надувания класса com.mopub.mobileads.mopubview

в com.example.hroshandel.myapplication.SimpleIntro_FragmentActivity.onCreate (SimpleIntro_FragmentActivity.java:20)

Вызвано: java.lang.ClassNotFoundException: не удалось найти класс «com.mopub.mobileads.mopubview» по пути: DexPathList [[zip-файл «/data/app/com.example.hroshandel.myapplication-4.apk»] , nativeLibraryDirectories = [/ data / app-lib / com.example.hroshandel.myapplication-4, / vendor / lib, / system / lib]]


person Hirad Roshandel    schedule 06.12.2014    source источник
comment
Вы можете проверить путь к классам, чтобы узнать, есть ли в нем com.mopub.mobileads.mopubview. Если это так, вы можете использовать dex2jar (code.google.com/p/dex2jar) и загляните внутрь своего apk, если там есть файл .class.   -  person Bogdan V.    schedule 06.12.2014
comment
@BogdanV. Я проверил структуру своего проекта, и в моих зависимостях есть com.mopub.sdk.android:mopub:3.2.2@aar.   -  person Hirad Roshandel    schedule 06.12.2014


Ответы (3)


проверьте, пожалуйста, опечатку в названии класса, гений напишите в документации:

<com.mopub.mobileads.mopubview
   android:id="@+id/adview"
    android:layout_alignParentBottom="true"
    android:layout_width="fill_parent"
    android:layout_height="50dp">
</com.mopub.mobileads.mopubview>

но правильное имя класса:

    <com.mopub.mobileads.MoPubView> ... </com.mopub.mobileads.MoPubView>
person aorlando    schedule 26.05.2015
comment
О, ирония. Я буквально скопировал и вставил эту часть из руководства по началу работы в твиттере, чтобы быть уверенным, что не сделаю никаких опечаток. Исправление опечатки в твиттере тоже помогло мне. Спасибо. - person ; 16.12.2015
comment
Ты спас мне день! - person Denis Babak; 18.10.2016

Похоже, вам придется исправить свой градиент, как указано в приведенном выше ответе. Но помимо этого у меня было такое же сообщение об ошибке при запуске приложения, и вот как я смог это обойти:

  1. Удалите ссылку времени разработки на объявление MoPub.
    <com.mopub.mobileads.mopubview
       android:id="@+id/adview"
        android:layout_alignParentBottom="true"
        android:layout_width="fill_parent"
        android:layout_height="50dp">
    </com.mopub.mobileads.mopubview>
  1. Вместо него поставьте емкость. Я решил использовать FrameLayout:
    <FrameLayout
    android:id="@+id/adContainer"
    android:layout_width="match_parent"
    android:layout_alignParentBottom="true"
    android:layout_height="50dp">
    </FrameLayout>
  1. В Activity я загрузил MoPubView программно, создав его экземпляр, назначив и загрузив свое объявление, а затем используя событие BannerAdListener onBannerLoaded, чтобы добавить его в adContainer:
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Fabric.with(this, new Crashlytics()); // optional library
        setContentView(R.layout.main_activity);
        ButterKnife.inject(this); // optional, used to inject views e.g. adContainer

        MoPubView moPubView = new MoPubView(this);

        moPubView.setAdUnitId("ad unit id");
        moPubView.loadAd();
        moPubView.setBannerAdListener(new MoPubView.BannerAdListener() {
            @Override
            public void onBannerLoaded(MoPubView moPubView) {
                Log.d(TAG, "Banner loaded");
                try {
                    mAdContainer.addView(moPubView);
                }
                catch(Exception ex){
                    Log.d(TAG, "Error loading banner add to container");
                }
            }

            @Override
            public void onBannerFailed(MoPubView moPubView, MoPubErrorCode moPubErrorCode) {
                Log.d(TAG, "Banner failed");
            }

            @Override
            public void onBannerClicked(MoPubView moPubView) {
                Log.d(TAG, "Banner clicked");
            }

            @Override
            public void onBannerExpanded(MoPubView moPubView) {
                Log.d(TAG, "Banner expanded");
            }

            @Override
            public void onBannerCollapsed(MoPubView moPubView) {
                Log.d(TAG, "Banner collapsed");
            }
        });
person t3rse    schedule 29.12.2014

Очевидный вопрос, следовали ли вы процессу установки https://dev.twitter.com/mopub/android/getting-started

РЕДАКТИРОВАТЬ:

Есть ГРЕЙДЛ

Скопируйте в свой проект

$MY_PROJECT_DIR $ mkdir mopub-sdk
$MY_PROJECT_DIR $ cp -R $MOPUB_DIR/mopub-android-sdk/mopub-sdk mopub-sdk

Добавьте в свой build.gradle

include ':app', ':mopub-sdk'
dependencies { compile project(':mopub-sdk') }
person peter_budo    schedule 06.12.2014
comment
Я верю, что знал. Учебник предназначен для eclipse, а не для студии Android. когда я хочу добавить sdk, он не распознает mopud-sdk как модуль - person Hirad Roshandel; 06.12.2014
comment
Я сделал это, и в mopub-sdk в некоторых классах появляется такая ошибка: невозможно разрешить символ millennialmedia. Эта ошибка находится при импорте com.millennialmedia.android.MMAd; - person Hirad Roshandel; 07.12.2014