SDK集成与工程配置

SDK版本说明列表

ADN SDK版本 adapter版本
OpenAD SDK OpenAD-6.20.1 6.20.1
趣盟 SDK com.qm.ad:qumeng:3.467.10.433 3.467.10.433
穿山甲 SDK com.pangle.cn:mediation-sdk:7.0.1.2 7.0.1.2
gdt SDK >=com.qq.e.union:union:4.642.1512 gdt:4.642.1512
Tanx SDK TanxCoreSDK,TanxUISDK 3.7.1
baidu SDK Baidu_MobAds_SDK_v9.40 baidu:9.40
ks SDK kssdk-ad-4.6.30.1 ks:4.6.30.1
JD SDK jad_yun_sdk_jingdong_2.6.20 jd:2.6.20

Maven集成

buildscript {
    repositories {
        maven {
            url 'https://maven.aliyun.com/repository/public'
        }
        maven {
            url "https://artifact.bytedance.com/repository/pangle"
        }
        google()
        jcenter()
    }
  dependencies {
        classpath 'com.android.tools.build:gradle:7.0.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.19'
    }
}

allprojects {
    repositories {
   maven {
            url 'https://maven.aliyun.com/repository/public'
        }
        maven {
            url "https://artifact.bytedance.com/repository/pangle"
        }
        google()
        jcenter()
    }
}
   //聚合SDK
    implementation('libs/openAD-6.20.1.aar')
    //广点通 SDK
    implementation 'com.qq.e.union:union:4.642.1512'
    //穿山甲 SDK
    implementation "com.pangle.cn:mediation-sdk:7.0.1.2"  
    //百度 SDK
    implementation files('libs/Baidu_MobAds_SDK-release_v9.40.aar')
//    京东
    implementation 'com.github.JAD-FE-TEAM.JADYunAndroid:jad_yun_sdk:2.6.20'

    //qm
    implementation files('libs/qumeng-3.467.10.433.aar')

    //快手 SDK
    implementationfiles('libs/kssdk-ad-4.6.30.1.aar')
    //说明:若集成openAD SDK必须添加
     implementation 'com.google.protobuf:protobuf-java:4.27.2' // 示例版本,请检查最新版本
    //阿里Tanx
    api (group: 'com.tanx', name: 'TanxUISDK', version: '3.7.1'){
        exclude group: 'com.squareup.okhttp3'
        exclude group: 'com.android.support', module: 'support-compat'
    }
dependencies {
    implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
//集成京东需添加AndroidX
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    //gif库 - 直客广告需要
    implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.24'
    // okhttp - 必须加上
    implementation 'com.squareup.okhttp3:okhttp:4.9.1'
    implementation 'com.google.protobuf:protobuf-java:4.27.2' // 示例版本,请检查最新版本
    //聚合基础包
    implementation('libs/openAD-6.20.1.aar')
//    京东
    implementation 'com.github.JAD-FE-TEAM.JADYunAndroid:jad_yun_sdk:2.6.8'
    //广点通 SDK
    implementation 'com.qq.e.union:union:4.642.1512'
    //穿山甲 SDK
    implementation "com.pangle.cn:mediation-sdk:7.0.1.2"  
    //百度 SDK
    implementation files('libs/Baidu_MobAds_SDK-release_v9.40.aar')
    //qm
    implementation files('libs/qumeng-3.467.10.433.aar')

    //快手 SDK
    implementation files('libs/kssdk-ad-4.6.30.1.aar')
    implementation 'com.google.protobuf:protobuf-java:4.27.2' // 示例版本,请检查最新版本
    //阿里Tanx
    implementation (group: 'com.tanx', name: 'TanxUISDK', version: '3.7.1'){
        exclude group: 'com.squareup.okhttp3'
        exclude group: 'com.android.support', module: 'support-compat'
    }
}

添加权限

1.聚合SDK所需必要权限

<!-- 必要权限 -->   
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />   
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" />  

1.申请以下权限用于防作弊功能以及有助于广告平台投放广告

<!--可选权限,申请后用于防作弊功能以及有助于广告平台投放广告-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
 <!--建议添加“query_all_package”权限,穿山甲将通过此权限在Android R系统上判定广告对应的应用是否在用户的app上安装,避免投放错误的广告,以此提高用户的广告体验。若添加此权限,需要在您的用户隐私文档中声明! -->
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" /> 

1.聚合三方ADN可选权限

<!-- 可选权限 -->  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />    

<!--suppress DeprecatedClassUsageInspection -->    
<uses-permission android:name="android.permission.GET_TASKS" />    
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  

AndroidManifest及资源文件配置

📢根据项目实际依赖各家ADN情况配置AndroidManifest文件

CSJ广告

AndroidManifest配置

        <!-- 穿山甲 start================== -->
        <provider
            android:name="com.bytedance.sdk.openadsdk.TTFileProvider"
            android:authorities="${applicationId}.TTFileProvider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/pangle_file_paths" />
        </provider>

        <provider
            android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"
            android:authorities="${applicationId}.TTMultiProvider"
            android:exported="false" />
        <!-- 穿山甲 end================== -->

在res/xml目录下,添加文件pangle_file_paths.xml

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path name="tt_external_root" path="." />
    <external-path name="tt_external_download" path="Download" />
    <external-files-path name="tt_external_files_download" path="Download" />
    <files-path name="tt_internal_file_download" path="Download" />
    <cache-path name="tt_internal_cache_download" path="Download" />
</paths>

baidu广告

AndroidManifest配置

        <!-- baidu start================== -->
        <!-- 声明打开落地页的Activity(不建议修改主题配置)-->
        <activity
            android:name="com.baidu.mobads.sdk.api.AppActivity"
            android:configChanges="screenSize|keyboard|keyboardHidden|orientation"
            android:theme="@android:style/Theme.NoTitleBar" />
        <!-- 声明打开显示激励视频/全屏视频的Activity-->
        <activity
            android:name="com.baidu.mobads.sdk.api.MobRewardVideoActivity"
            android:configChanges="screenSize|orientation|keyboardHidden"
            android:launchMode="singleTask"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

        <!-- 如果targetSdkVersion设置值>=24,则强烈建议添加以下provider,否则会影响app变现 -->
        <!-- android:authorities="${packageName}.bd.provider" authorities中${packageName}部分必须替换成app自己的包名 -->
        <!-- 原来的FileProvider在新版本中改为BdFileProvider,继承自v4的FileProvider,需要在应用内引用support-v4包 -->
        <provider
            android:name="com.baidu.mobads.sdk.api.BdFileProvider"
            android:authorities="${applicationId}.bd.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/bd_file_paths" />
        </provider>
        <!-- baidu end================== -->

在res/xml目录下,添加文件 bd_file_paths.xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
     <external-path name="bd_lv_path" path="/" />
     <external-files-path name="bdpath" path="bddownload/" />
     <external-path name="bdpathsd" path="bddownload/" />
     <files-path name="bd_files_path" path="bddownload/" />
     <cache-path name="bd_cache_path" path="bddownload/" />
</paths>

gdt广告

AndroidManifest配置

        <!-- GDT start================== -->
        <!-- targetSDKVersion >= 24时才需要添加这个provider。provider的authorities属性的值为${applicationId}.fileprovider,请开发者根据自己的${applicationId}来设置这个值,例如本例中applicationId为"com.qq.e.union.demo"。 -->
        <provider
            android:name="com.qq.e.comm.GDTFileProvider"
            android:authorities="${applicationId}.gdt.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/gdt_file_path" />
        </provider>

        <activity
            android:name="com.qq.e.ads.PortraitADActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
            android:screenOrientation="portrait" />
        <activity
            android:name="com.qq.e.ads.LandscapeADActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
            android:screenOrientation="landscape"
            tools:replace="android:screenOrientation" />

        <!-- 声明SDK所需要的组件 -->
        <service
            android:name="com.qq.e.comm.DownloadService"
            android:exported="false" />
        <!-- 请开发者注意字母的大小写,ADActivity,而不是AdActivity -->

        <activity
            android:name="com.qq.e.ads.ADActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenSize" />
        <!-- GDT end================== -->

在res/xml目录下,添加文件 gdt_file_path.xml

<paths>
    <!-- 这个下载路径也不可以修改,必须为com_qq_e_download -->
    <external-cache-path
        name="gdt_sdk_download_path1"
        path="com_qq_e_download" />
    <cache-path
        name="gdt_sdk_download_path2"
        path="com_qq_e_download" />
</paths>

添加混淆

如果您需要使用proguard混淆代码,需确保不要混淆SDK的代码。 请在proguard-rules.pro文件(或其他混淆文件)尾部添加如下配置:

###聚合混淆
-keep class com.open.ad.** {public protected *;}
#QM
-keep class com.qumeng.advlib.** {
    public protected *;
}


###穿山甲sdk
-keep class com.bytedance.msdk.adapter.**{ public *; }
-keep class com.bytedance.msdk.api.** {
 public *;
}
-keep class com.bytedance.msdk.base.TTBaseAd{*;}
-keep class com.bytedance.msdk.adapter.TTAbsAdLoaderAdapter{
    public *;
    protected <fields>;
}
### baidu sdk 不接入baidu sdk可以不引入
-ignorewarnings
-dontwarn com.baidu.mobads.sdk.api.**
-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class com.baidu.mobads.** { *; }
-keep class com.style.widget.** {*;}
-keep class com.component.** {*;}
-keep class com.baidu.ad.magic.flute.** {*;}
-keep class com.baidu.mobstat.forbes.** {*;}

###ks 不接入ks sdk可以不引入
-keep class org.chromium.** {*;}
-keep class org.chromium.** { *; }
-keep class aegon.chrome.** { *; }
-keep class com.kwai.**{ *; }
-dontwarn com.kwai.**
-dontwarn com.kwad.**
-dontwarn com.ksad.**
-dontwarn aegon.chrome.**

###oaid 不同的版本混淆代码不太一致,你注意你接入的oaid版本 ,不接入oaid可以不添加
-dontwarn com.bun.**
-keep class com.bun.** {*;}
-keep class a.**{*;}
-keep class XI.CA.XI.**{*;}
-keep class XI.K0.XI.**{*;}
-keep class XI.XI.K0.**{*;}
-keep class XI.vs.K0.**{*;}
-keep class XI.xo.XI.XI.**{*;}
-keep class com.asus.msa.SupplementaryDID.**{*;}
-keep class com.asus.msa.sdid.**{*;}
-keep class com.huawei.hms.ads.identifier.**{*;}
-keep class com.samsung.android.deviceidservice.**{*;}
-keep class com.zui.opendeviceidlibrary.**{*;}
-keep class org.json.**{*;}
-keep public class com.netease.nis.sdkwrapper.Utils {public <methods>;}


###TanxSDK
###优化配置,可进行字段优化、内联、类合并、代码简化、算法指令精简等操作。
-optimizations code/removal/simple,code/removal/advanced,method/removal/parameter,method/inlining/short,method/inlining/tailrecursion
####执行优化的次数,默认1次,多次能达到更好的优化效果。
-optimizationpasses 5
# 混合时不使用大小写混合,混合后的类名为小写
-dontusemixedcaseclassnames
#####保持参数名 指定keep已经被keep的方法的参数类型和参数名称,在混淆library库时非常有用,可供IDE帮助用户进行信息提示和代码自动填充。
-keepparameternames
#####指定保留属性,多个属性可以用多个-keepattributes配置,也可以用逗号分隔,可以使用? * **通配符,并且可以使用否定符(!)。
 ####比如,在混淆ibrary库时,应该至少keep Exceptions, InnerClasses, Signature;如果在追踪代码,还需要keep符号表;使用到注解时也需要keep。
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
####优化时允许访问并修改有修饰符的类和类的成员, 混淆后的类名还会改变地方,到其他包中  需要,所有被混淆的都到一个包去,不需要保留原来的结构
-allowaccessmodification
####混淆前后类、方法、类成员等的对照
-printmapping mapping.txt
####屏蔽警告
-ignorewarnings
####指定在混淆过程中输出更多信息,配置这个选项后,在遇到异常时,将输出完整的堆栈,而不仅仅是异常消息
-verbose
#### 指定不去忽略非公共的库类(不跳过library中的非public的类)
-dontskipnonpubliclibraryclasses
####指定不去忽略非公共库的类成员
-dontskipnonpubliclibraryclassmembers

-dontwarn com.alibaba.fastjson.**

-keep class com.alibaba.fastjson.**{*;}
-keep class com.bumptech.glide.**{*;}

-keep class com.alimm.tanx.**{*;}


#### 有进程间通信,保证service相关不被混淆
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver


#### 自动曝光数据的防混淆
-keep class * implements java.io.Serializable{
     <fields>;
    <methods>;
}

# 京东SDK
-keep class com.jd.ad.sdk.** { *; }

###广点通SDK
-keep class com.qq.e.** {public protected *;}

-keep class com.tencent.** {
    *;
}
-keep class android.support.v4.**{
    public *;
}
-keep class android.support.v7.**{
    public *;
}
#宝宝树
# bbt_sdk_ad_xxx.aar
#宝宝树
# bbt_sdk_ad_xxx.aar
-keep class com.bbt.** {*;}
-keep class com.bbt.saas.** { *; }
-keep class com.bbt.base.** { *; }
-keep class com.ms.saas.** { *; }
-keep class com.hm.saas.** { *; }
-keep class com.jinbig.hmad.** { *; }
-keep class com.android.general.** { *; }

-keep class com.bbt.saas.s2s.sdk.** { *; }
-ignorewarnings
-dontwarn com.bbt.saas.**

# 魔秀qy SDK ProGuard
-dontwarn com.qy.sdk.**
-keep class com.qy.sdk.** { *; }

支持架构

SDK默认支持armeabi-v7a,arm64-v8a两种架构,如果有其他架构(armeabi架构)需求,请联系技术支持同学;

您可以在应用中的build.gradle中使用abiFilters选择支持的架构。如下所示:

ndk { // 设置支持的 SO 库构架,注意这里要根据你的实际情况来设置 
   abiFilters  armeabi-v7a ,  arm64-v8a
}