2.4.10 Android SDK Integration Guide

Get started

1. Get the app key

Add your app to Appodeal and get the app key for your application, as it is used during SDK integration.

2. Link your Admob account to Appodeal

Appodeal yields optimal results in cooperation with Admob. Use our Chrome extension to link them. The extension will allow Appodeal to access your Admob reports over API, and will create new ad units on Admob and submit them to Appodeal.

If you don't have Admob account, please sign up on admob.com.

Before installing the Appodeal extension, disable all third-party extensions. They may interfere with the correct operation of the Appodeal extension.


General Data Protection Regulation (GDPR) compliance

Publishers need to update their apps to collect the user consent prior to initializing our SDK (Read our guide on collecting consent here).

Publishers need to pass the boolean consent flag(with 'false' meaning that the user declined to give the consent) to the Appodeal.initialize() method of our SDK.

Appodeal.initialize(this, "YOUR_APPODEAL_APP_KEY", adTypes, consentValue);

Integrate SDK

1. Download SDK

You can integrate Android SDK 2.4.10.

If you're not using Multidex in your application, download this Appodeal SDK.

You can use our demo app as a reference project.

You can integrate Android SDK 2.5.3 beta that contains major Parallel Bidding improvements and allows to get the best out of our Parallel Bidding solution. Be aware that this version is still beta and may contain bugs.

Minimum requirements:

Android API level 14 (Android OS 4.0), but you can integrate Appodeal SDK in apps with lower minSdkVersion. On the devices that don't support Android 4.0+, our SDK will just be disabled.

Mediation A/B testing

If you want to compare Appodeal's performance to another mediation, please follow this Mediation A/B testing guide.

2. Copy SDK library files to your app

Place all .jar files from the SDK archive into the libs folder of your app.

Place all files from aar folder in the SDK archive to your libs folder.

Make sure to use third party libraries from the downloaded archive.

3. Configure Gradle file

Add the libs folder to repositories in the build.gradle file:

repositories {
    flatDir {
        dirs 'libs'
    }
}
Then add the lines below to the dependencies section your build.gradle file:
implementation 'com.squareup.picasso:picasso:2.5.2' //for Inmobi
implementation name: 'adcolony-3.3.4', ext: 'aar'
implementation name: 'mobvista-9.0.0-alphab', ext: 'aar'
implementation name: 'mobvista-9.0.0-common', ext: 'aar'
implementation name: 'mobvista-9.0.0-interstitial', ext: 'aar'
implementation name: 'mobvista-9.0.0-interstitialvideo', ext: 'aar'
implementation name: 'mobvista-9.0.0-mtgdownloads', ext: 'aar'
implementation name: 'mobvista-9.0.0-mtgjscommon', ext: 'aar'
implementation name: 'mobvista-9.0.0-mtgnative', ext: 'aar'
implementation name: 'mobvista-9.0.0-nativeex', ext: 'aar'
implementation name: 'mobvista-9.0.0-playercommon', ext: 'aar'
implementation name: 'mobvista-9.0.0-reward', ext: 'aar'
implementation name: 'mobvista-9.0.0-videocommon', ext: 'aar'
implementation name: 'mobvista-9.0.0-videojs', ext: 'aar'
implementation name: 'ogury-3.0.13', ext: 'aar'
Once that done, sync the Gradle to ensure that the dependencies are included.

4. Include Google Play Services lib in your project

Make sure to add Privacy Policy to your app on Google Play that links to Appodeal's Privacy Policy to avoid violating Google Play Developer Distribution Agreement.

For the versions 12.0.0 and higher add the lines below to the dependencies section of your build.gradle file:

implementation 'com.google.android.gms:play-services-ads:15.0.0'
implementation 'com.google.android.gms:play-services-location:15.0.0'
If you are using Play Services version 17 and higher, add <meta-data> tag to the AndroidManifest file:
<manifest>
	<application>
		<meta-data
			android:name="com.google.android.gms.ads.APPLICATION_ID"
			android:value="[ADMOB_APP_ID]"/>
	</application>
</manifest>

5. Configure AndroidManifest.xml

Add the required permissions to your AndroidManifest.xml file under the manifest tag:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
Add the optional permissions to your AndroidManifest.xml file under the manifest tag to improve ad targeting:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
Add the lines below to the application section of your AndroidManifest.xml file:
<activity android:name="com.appodeal.ads.InterstitialActivity" 
    android:configChanges="orientation|screenSize" 
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" />
<activity android:name="com.appodeal.ads.VideoActivity" 
    android:configChanges="orientation|screenSize"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" />
<activity android:name="com.appodealx.mraid.MraidActivity" 
    android:configChanges="orientation|screenSize" 
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>
<activity android:name="com.appodeal.ads.VideoPlayerActivity" 
    android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"/>
<receiver android:name="com.appodeal.ads.AppodealPackageAddedReceiver" 
    android:exported="true" 
    android:enabled="true">
    <intent-filter>
        <action android:name="android.intent.action.PACKAGE_ADDED" />
        <data android:scheme="package" />
    </intent-filter>
</receiver>
<activity android:name="com.appodeal.ads.TestActivity" 
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

<meta-data android:name="com.google.android.gms.version" 
    android:value="@integer/google_play_services_version" />
<activity android:name="com.google.android.gms.ads.AdActivity" 
    android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" 
    android:theme="@android:style/Theme.Translucent" />

<activity android:name="org.nexage.sourcekit.vast.activity.VASTActivity" 
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
    android:configChanges="keyboardHidden|orientation|screenSize"/>

<activity android:name="org.nexage.sourcekit.vast.activity.VPAIDActivity" 
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" />

<activity android:name="com.appodeal.ads.networks.vpaid.VPAIDActivity" 
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" />

<!-- Chartboost -->
<activity android:name="com.chartboost.sdk.CBImpressionActivity" 
    android:excludeFromRecents="true" 
    android:hardwareAccelerated="true"
    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" 
    android:configChanges="keyboardHidden|orientation|screenSize" />
<!-- End Chartboost -->

<!-- Applovin -->
<activity android:name="com.applovin.adview.AppLovinInterstitialActivity" 
    android:configChanges="orientation|screenSize"/>
<activity android:name="com.applovin.adview.AppLovinConfirmationActivity" 
    android:configChanges="orientation|screenSize"/>
<!-- End Applovin -->

<!-- Mopub -->
<activity android:name="com.mopub.common.privacy.ConsentDialogActivity" 
    android:configChanges="keyboardHidden|orientation|screenSize"/>
<activity android:name="com.mopub.common.MoPubBrowser" 
    android:configChanges="keyboardHidden|orientation|screenSize"/>
<activity android:name="com.mopub.mobileads.MoPubActivity" 
    android:configChanges="keyboardHidden|orientation|screenSize" />
<activity android:name="com.mopub.mobileads.MraidActivity" 
    android:configChanges="keyboardHidden|orientation|screenSize"/>
<activity android:name="com.mopub.mobileads.RewardedMraidActivity"
    android:configChanges="keyboardHidden|orientation|screenSize"/>
<activity android:name="com.mopub.mobileads.MraidVideoPlayerActivity" 
    android:configChanges="keyboardHidden|orientation|screenSize"/>
<!-- End Mopub -->

<!-- Amazon_ads -->
<activity android:name="com.amazon.device.ads.AdActivity"
    android:configChanges="keyboardHidden|orientation|screenSize"/>
<!-- End Amazon_ads -->

<!-- Facebook -->
<!--suppress AndroidDomInspection -->
<activity
    android:name="com.facebook.ads.AudienceNetworkActivity"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:exported="false" />
<activity
    android:name="com.facebook.ads.internal.ipc.RemoteANActivity"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:exported="false"
    android:process=":adnw" />
<service
    android:name="com.facebook.ads.internal.ipc.AdsProcessPriorityService"
    android:exported="false" />
<service
    android:name="com.facebook.ads.internal.ipc.AdsMessengerService"
    android:exported="false"
    android:process=":adnw" />
<!-- End Facebook -->

<!-- Startapp -->
<!--suppress AndroidDomInspection -->
<activity android:name="com.startapp.android.publish.ads.list3d.List3DActivity" 
    android:theme="@android:style/Theme" />
<!--suppress AndroidDomInspection -->
<activity android:name="com.startapp.android.publish.adsCommon.activities.OverlayActivity" 
    android:theme="@android:style/Theme.Translucent" 
    android:configChanges="orientation|keyboardHidden|screenSize" />
<!--suppress AndroidDomInspection -->
<activity android:name="com.startapp.android.publish.adsCommon.activities.FullScreenActivity" 
    android:theme="@android:style/Theme" 
    android:configChanges="orientation|keyboardHidden|screenSize" />
<!--suppress AndroidDomInspection -->
<service android:name="com.startapp.android.publish.common.metaData.PeriodicMetaDataService" />
<!--suppress AndroidDomInspection -->
<service android:name="com.startapp.android.publish.common.metaData.InfoEventService" />
<!--suppress AndroidDomInspection -->
<service android:name="com.startapp.android.publish.common.metaData.PeriodicJobService" 
    android:permission="android.permission.BIND_JOB_SERVICE" />
<receiver android:name="com.startapp.android.publish.common.metaData.BootCompleteListener">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>
<!-- End Startapp -->

<!-- Yandex-metrica -->
<service android:name="com.yandex.metrica.MetricaService"
    android:enabled="true"
    android:exported="true" 
    android:process=":Metrica" 
    tools:ignore="ExportedService">
    <intent-filter>
        <category android:name="android.intent.category.DEFAULT" />
        <action android:name="com.yandex.metrica.IMetricaService" />
        <data android:scheme="metrica" />
    </intent-filter>
    <meta-data android:name="metrica:api:level" 
        android:value="70" />
</service>
<service android:name="com.yandex.metrica.ConfigurationService" 
    android:enabled="true" 
    android:exported="true" 
    android:process=":Metrica" 
    tools:ignore="ExportedService">
    <meta-data android:name="metrica:configuration:api:level" android:value="2" />
    <intent-filter>
        <action android:name="com.yandex.metrica.configuration.ACTION_START" />
    </intent-filter>
</service>
<service android:name="com.yandex.metrica.ConfigurationJobService" 
    android:enabled="true" android:exported="false" 
    android:permission="android.permission.BIND_JOB_SERVICE"
    android:process=":Metrica">
</service>
<receiver android:name="com.yandex.metrica.MetricaEventHandler" 
    android:enabled="true" 
    android:exported="true" 
    tools:ignore="ExportedReceiver">
    <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
</receiver>
<!-- End Yandex-metrica -->

<!-- Yandex-mobileads -->
<!--suppress AndroidDomInspection -->
<activity android:name="com.yandex.mobile.ads.AdActivity" 
    android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
<!-- End Yandex-mobileads -->

<!-- Unity_ads -->
<activity android:name="com.unity3d.ads.adunit.AdUnitActivity" 
    android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" 
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
    android:hardwareAccelerated="true" />
<activity android:name="com.unity3d.ads.adunit.AdUnitSoftwareActivity" 
    android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" 
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
    android:hardwareAccelerated="false" />
<activity android:name="com.unity3d.ads.adunit.AdUnitTransparentActivity" 
    android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" 
    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" 
    android:hardwareAccelerated="true" />
<activity android:name="com.unity3d.ads.adunit.AdUnitTransparentSoftwareActivity" 
    android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" 
    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" 
    android:hardwareAccelerated="false" />
<activity android:name="com.unity3d.ads2.adunit.AdUnitActivity" 
    android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" 
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
    android:hardwareAccelerated="true" />
<activity android:name="com.unity3d.ads2.adunit.AdUnitSoftwareActivity" 
    android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" 
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
    android:hardwareAccelerated="false" />
<activity android:name="com.unity3d.ads2.adunit.AdUnitTransparentActivity" 
    android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" 
    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" 
    android:hardwareAccelerated="true" />
<activity android:name="com.unity3d.ads2.adunit.AdUnitTransparentSoftwareActivity" 
    android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" 
    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" 
    android:hardwareAccelerated="false" />
<!-- End Unity_ads -->

<!-- Vungle -->
<!--suppress AndroidDomInspection -->
<activity android:name="com.vungle.warren.ui.VungleActivity" 
    android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize" 
    android:launchMode="singleTop" 
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" />
<activity android:name="com.vungle.warren.ui.VungleWebViewActivity" 
    android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize" 
    android:launchMode="singleTop" 
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" />
<activity android:name="com.vungle.warren.ui.VungleFlexViewActivity" 
    android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize" 
    android:launchMode="singleTop" 
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" />
<!-- End Vungle -->

<!-- Flurry-ads -->
<!--suppress AndroidDomInspection -->
<activity android:name="com.flurry.android.FlurryFullscreenTakeoverActivity" 
    android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize">
</activity>
<!-- End Flurry-ads -->

<!-- Mobvista -->
<activity
    android:name="com.mintegral.msdk.activity.MTGCommonActivity"
    android:configChanges="keyboard|orientation"
    android:exported="true"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity
    android:name="com.mintegral.msdk.reward.player.MTGRewardVideoActivity"
    android:configChanges="orientation|keyboardHidden|screenSize"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" />
<activity
    android:name="com.mintegral.msdk.interstitial.view.MTGInterstitialActivity"
    android:configChanges="orientation|screenSize"
    android:screenOrientation="portrait" />
<service android:name="com.mintegral.msdk.shell.MTGService">
    <intent-filter>
        <action android:name="com.mintegral.msdk.download.action" />
    </intent-filter>
</service>
<!-- End Mobvista -->

<!-- Tapjoy -->
<!--suppress AndroidDomInspection -->
<activity android:name="com.tapjoy.TJAdUnitActivity" 
    android:configChanges="orientation|keyboardHidden|screenSize" 
    android:hardwareAccelerated="true" 
    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
<!--suppress AndroidDomInspection -->
<activity android:name="com.tapjoy.mraid.view.ActionHandler" 
    android:configChanges="orientation|keyboardHidden|screenSize" />
<!--suppress AndroidDomInspection -->
<activity android:name="com.tapjoy.mraid.view.Browser" 
    android:configChanges="orientation|keyboardHidden|screenSize" />
<!--suppress AndroidDomInspection -->
<activity android:name="com.tapjoy.TJContentActivity" 
    android:configChanges="orientation|keyboardHidden|screenSize" 
    android:theme="@android:style/Theme.Translucent.NoTitleBar" 
    android:hardwareAccelerated="true" />
<!-- End Tapjoy -->

<!-- Ironsource -->
<!--suppress AndroidDomInspection -->
<activity android:name="com.ironsource.sdk.controller.ControllerActivity" 
    android:configChanges="orientation|screenSize" 
    android:hardwareAccelerated="true" />
<!--suppress AndroidDomInspection -->
<activity android:name="com.ironsource.sdk.controller.InterstitialActivity" 
    android:configChanges="orientation|screenSize" 
    android:hardwareAccelerated="true"
    android:theme="@android:style/Theme.Translucent" />
<!--suppress AndroidDomInspection -->
<activity android:name="com.ironsource.sdk.controller.OpenUrlActivity" 
    android:configChanges="orientation|screenSize"
    android:hardwareAccelerated="true"
    android:theme="@android:style/Theme.Translucent" />
<!-- End Ironsource -->

<!-- Adcolony -->
<!--suppress AndroidDomInspection -->
<activity android:name="com.adcolony.sdk.AdColonyInterstitialActivity" 
    android:configChanges="keyboardHidden|orientation|screenSize" 
    android:hardwareAccelerated="true"/>
<!--suppress AndroidDomInspection -->
<activity android:name="com.adcolony.sdk.AdColonyAdViewActivity" 
    android:configChanges="keyboardHidden|orientation|screenSize" 
    android:hardwareAccelerated="true"/>
<!-- End Adcolony -->

<!-- Inmobi -->
<activity android:name="com.inmobi.rendering.InMobiAdActivity" 
    android:configChanges="keyboardHidden|orientation|keyboard|smallestScreenSize|screenSize|screenLayout" 
    android:hardwareAccelerated="true" 
    android:resizeableActivity="false" 
    android:theme="@android:style/Theme.NoTitleBar" 
    tools:ignore="UnusedAttribute"/>
<!-- End Inmobi -->

<!-- Mailru -->
<activity android:name="com.my.target.common.MyTargetActivity" 
    android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
<!-- End Mailru -->

6. Network security configuration

Android 9.0 (API 28) blocks cleartext (non-HTTPS) traffic by default, which can prevent ads from serving correctly. Read more on this here.

1. Add Network Security Configuration file in your AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest>
    <application 
        ...
        android:networkSecurityConfig="@xml/network_security_config"
        ... >
    </application>
</manifest>
2. In your network_security_config.xml file, add base-config that sets cleartextTrafficPermitted to true:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system"/>
        </trust-anchors>
    </base-config>
</network-security-config>
If your app is targeting API level 28 (Android 9.0) or higher, make sure to specify the requirement for Apache HTTP Legacy library. Include the following declaration within the <application> element of AndroidManifest.xml:
 <uses-library
     android:name="org.apache.http.legacy"
     android:required="false" />

7. Additional SDK and libraries

The optional folder contains the Flurry SDK. Add it only if you have connected your own Flurry account.

If you do not want to add the Flurry SDK, please delete com.flurry.android.FlurryFullscreenTakeoverActivity from AndroidManifest.xml.

Vungle SDK dependencies:

  • converter-gson-2.2.0.jar;
  • fetch-1.1.5.jar;
  • gson-2.7.jar;
  • logging-interceptor-3.7.0.jar;
  • okhttp-3.7.0.jar;
  • okio-1.12.0.jar;
  • retrofit-2.2.0.jar.

Our SDK uses Android Support Library (version 26.1.0 and higher) as it is used by most nested SDKs to support compatibility.

  • com.android.support:recyclerview-v7:26.1.0;
  • com.android.support:support-v4:26.1.0.

RecyclerView is required for Facebook, Inmobi, myTarget, Mopub to ensure the ads work correctly. The absence of RecyclerView may lead to crash.

8. AdColony support

Please note that AdColony v3.x and higher uses SDK libraries for all currently supported architectures.

If you are using native libraries, please check architectures used by them and add abi filters to exclude architectures that are supported by AdColony but are missing from those libraries by using this gradle parameter:

ndk { 
    abiFilters "armeabi-v7a", "x86" 
}

Currently supported AdColony architectures are:

  • armeabi;
  • armeabi-v7a;
  • arm64-v8a;
  • x86, x86_64.

9. Initialize SDK

To initialize SDK, add the line below to onCreate method of your main activity:

Appodeal.initialize(this, "YOUR_APPODEAL_APP_KEY", adTypes, consentValue);
consentValue is boolean, with 'false' meaning that the user declines to give the consent. Read our guide on collecting consent here.

Make sure to replace "YOUR_APPODEAL_APP_KEY" with the actual app key.

Use the type codes below to set the preferred ad format:

  • Appodeal.INTERSTITIAL for interstitial;
  • Appodeal.REWARDED_VIDEO for rewarded videos;
  • Appodeal.NON_SKIPPABLE_VIDEO for non-skippable videos;
  • Appodeal.NATIVE for native ads;
  • Appodeal.BANNER for banners;
  • Appodeal.MREC for 300*250 banners.

Please note:

Ad types can be combined using "|" operator. For example, Appodeal.INTERSTITIAL | Appodeal.REWARDED_VIDEO.

2. Appodeal.NON_SKIPPABLE_VIDEO - the alias of Appodeal.REWARDED_VIDEO. Both of them shouldn't be used together.

If you are not sure, which ad formats would suit you the best, check out our FAQ.

Proguard settings

If you are using Proguard, add the following lines  to your Proguard config file:

# AdMediator
-keep class com.admediator.** { *; }

# Appodeal
-keep class com.appodeal.** { *; }
-keep class com.appodealx.** { *; }
-keep class org.nexage.** { *; }
-keepattributes EnclosingMethod, InnerClasses, Signature, JavascriptInterface

# Amazon
-keep class com.amazon.** { *; }
-dontwarn com.amazon.**

# Mopub
-keep public class com.mopub.**
-keepclassmembers class com.mopub.** { public *; }
-dontwarn com.mopub.**
-keep class * extends com.mopub.mobileads.CustomEventBanner {}
-keepclassmembers class com.mopub.mobileads.CustomEventBannerAdapter {!private !public !protected *;}
-keep class * extends com.mopub.mobileads.CustomEventInterstitial {}
-keep class * extends com.mopub.nativeads.CustomEventNative {}
-keep class * extends com.mopub.mobileads.CustomEventRewardedVideo {}
-keep class * extends com.mopub.nativeads.CustomEventRewardedAd {}
-keepclassmembers class ** { @com.mopub.common.util.ReflectionTarget *; }
-dontwarn com.mopub.volley.toolbox.**
-keepclassmembers,allowshrinking,allowobfuscation class com.android.volley.NetworkDispatcher {
    void processRequest();
}
-keepclassmembers,allowshrinking,allowobfuscation class com.android.volley.CacheDispatcher {
    void processRequest();
}
-keep public class android.webkit.JavascriptInterface {}
-keepnames class * implements android.os.Parcelable {
    public static final ** CREATOR;
}

# Applovin
-keep class com.applovin.** { *; }
-dontwarn com.applovin.**

# Facebook
-keep class com.facebook.ads.** { *; }
-keeppackagenames com.facebook.*
-dontwarn com.facebook.ads.**

# Chartboost
-keep class com.chartboost.** { *; }
-dontwarn com.chartboost.**

# Unity Ads
-keepattributes SourceFile,LineNumberTable
-keep class com.unity3d.** { *; }
-dontwarn com.unity3d.**

# Yandex
-keep class com.yandex.metrica.** { *; }
-dontwarn com.yandex.metrica.**
-keep class com.yandex.mobile.ads.** { *; }
-dontwarn com.yandex.mobile.ads.**
-keepattributes *Annotation*
-keep class com.android.installreferrer.api.* { *; }
-dontwarn com.android.installreferrer.api.*

# StartApp
-keep class com.startapp.** { *;}
-keep class com.truenet.** { *;}
-dontwarn com.startapp.**
-dontwarn android.webkit.JavascriptInterface
-keepattributes Exceptions, InnerClasses, Signature, Deprecated, SourceFile, LineNumberTable, *Annotation*, EnclosingMethod
-dontwarn org.jetbrains.annotations.**

# Flurry
-keep class com.flurry.** { *; }
-dontwarn com.flurry.**
-keepattributes *Annotation*,EnclosingMethod,Signature
-keepclasseswithmembers class * {
  public <init>(android.content.Context, android.util.AttributeSet, int);
}

# Adcolony
-keep class com.jirbo.adcolony.** { *;}
-keep class com.adcolony.** { *;}
-keep class com.immersion.** { *;}
-dontnote com.immersion.**
-dontwarn android.webkit.**
-dontwarn com.jirbo.adcolony.**
-dontwarn com.adcolony.**
-keepclassmembers class com.adcolony.sdk.ADCNative** { *; }

# Vungle
-keep class com.vungle.warren.** { *; }
-dontwarn com.vungle.warren.error.VungleError$ErrorCode

# Vungle/Moat SDK
-keep class com.moat.** { *; }
-dontwarn com.moat.**

# Vungle/Okio
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement

# Vungle/Retrofit
-dontwarn okio.**
-dontwarn retrofit2.Platform$Java8

# Vungle/Gson
-keepattributes Signature
-keepattributes *Annotation*
-dontwarn sun.misc.**
-keep class com.google.gson.examples.android.model.** { *; }
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer

# Vungle/Google Android Advertising ID
-keep class com.google.android.gms.internal.** { *; }
-dontwarn com.google.android.gms.ads.identifier.**

# MyTarget
-keep class com.my.target.** { *; }
-dontwarn com.my.target.**

# Mobvista
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.mintegral.** {*; }
-keep interface com.mintegral.** {*; }
-keep class android.support.v4.** { *; }
-dontwarn com.mintegral.**
-keep class **.R$* { public static final int mintegral*; }
-keep class com.alphab.** {*; }
-keep interface com.alphab.** {*; }

# Admob
-keep class com.google.android.gms.ads.** { *; }

# Tapjoy
-keep class com.tapjoy.** { *; }
-dontwarn com.tapjoy.**

# IronSource
-keepclassmembers class com.ironsource.sdk.controller.IronSourceWebView$JSInterface { public *; }
-keepclassmembers class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; }
-keep public class com.google.android.gms.ads.** { public *; }
-dontwarn com.moat.**
-keep class com.moat.** { public protected private *; }
-keep class com.ironsource.adapters.** { *; }
-keepnames class com.ironsource.mediationsdk.IronSource { *; }
-dontwarn com.ironsource.**

# AdColonyV3
-keepclassmembers class * { @android.webkit.JavascriptInterface <methods>; }
-keep class com.adcolony.** { *; }
-dontwarn com.adcolony.**
-dontwarn android.app.Activity

# Inmobi
-keep class com.inmobi.** { *; }
-dontwarn com.inmobi.**
-keep public class com.google.android.gms.**
-dontwarn com.squareup.picasso.**
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient{
     public *;
}
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient$Info{ *; }
-keep class com.squareup.picasso.** {*;}
-dontwarn com.squareup.picasso.**
-dontwarn com.squareup.okhttp.**
-keep class com.moat.** {*;}
-dontwarn com.moat.**
-keep class com.integralads.avid.library.* {*;}

# Google
-keep class com.google.android.gms.common.GooglePlayServicesUtil {*;}
-keep class com.google.android.gms.ads.identifier.** { *; }
-dontwarn com.google.android.gms.**

# Legacy
-keep class org.apache.http.** { *; }
-dontwarn org.apache.http.**
-dontwarn android.net.http.**

# Google Play Services library
-keep class * extends java.util.ListResourceBundle {
  protected Object[][] getContents();
}
-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
  public static final *** NULL;
}
-keepnames class * implements android.os.Parcelable
-keepclassmembers class * implements android.os.Parcelable {
  public static final *** CREATOR;
}
-keep @interface android.support.annotation.Keep
-keep @android.support.annotation.Keep class *
-keepclasseswithmembers class * {
  @android.support.annotation.Keep <fields>;
}
-keepclasseswithmembers class * {
  @android.support.annotation.Keep <methods>;
}
-keep @interface com.google.android.gms.common.annotation.KeepName
-keepnames @com.google.android.gms.common.annotation.KeepName class *
-keepclassmembernames class * {
  @com.google.android.gms.common.annotation.KeepName *;
}
-keep @interface com.google.android.gms.common.util.DynamiteApi
-keep public @com.google.android.gms.common.util.DynamiteApi class * {
  public <fields>;
  public <methods>;
}
-keep class com.google.android.gms.common.GooglePlayServicesNotAvailableException {*;}
-keep class com.google.android.gms.common.GooglePlayServicesRepairableException {*;}

# Google Play Services library 9.0.0 only
-dontwarn android.security.NetworkSecurityPolicy
-keep public @com.google.android.gms.common.util.DynamiteApi class * { *; }

# support-v4
-keep class android.support.v4.app.Fragment { *; }
-keep class android.support.v4.app.FragmentActivity { *; }
-keep class android.support.v4.app.FragmentManager { *; }
-keep class android.support.v4.app.FragmentTransaction { *; }
-keep class android.support.v4.content.ContextCompat { *; }
-keep class android.support.v4.content.LocalBroadcastManager { *; }
-keep class android.support.v4.util.LruCache { *; }
-keep class android.support.v4.view.PagerAdapter { *; }
-keep class android.support.v4.view.ViewPager { *; }
-keep class android.support.v4.content.ContextCompat { *; }

# support-v7-recyclerview
-keep class android.support.v7.widget.RecyclerView { *; }
-keep class android.support.v7.widget.LinearLayoutManager { *; }

#MultiDex
-keepnames class android.support.multidex.MultiDex


It’s done!

You are ready to use Appodeal and implement ad types. If you have any questions, check out our FAQ or contact the support team.


Third-party SDKs versions

NetworkSDK version
Adcolony3.3.4
Admob15.0.0
Amazon Ads5.9.0
Applovin8.0.2
Chartboost7.2.0
Facebook Audience Network5.1.0
Flurry11.0.0
Inmobi7.1.1
IronSource6.7.9.1
Mobvista9.0.0
myTarget5.1.0
Mopub5.1.0
Ogury3.0.13
Startapp3.9.3
Tapjoy11.12.2
Unity Ads2.2.1
Vungle6.3.12
Yandex Metrica3.2.2
Yandex Mobile Ads2.75