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
}