操作系统:支持 Linux/Mac/Windows 系统,具体依赖开发者选择的 IDE
开发工具:支持 Android studio
部署目标:接入TaKu流量的应用
支持设备:运行了 Android 5.0 以及以上系统的 Android 设备
JDK环境:要求>=1.8
操作系统:支持 Linux/Mac/Windows 系统,具体依赖开发者选择的 IDE
开发工具:支持 Android studio
部署目标:接入TaKu流量的应用
支持设备:运行了 Android 5.0 以及以上系统的 Android 设备
JDK环境:要求>=1.8
(1) 进入Taku SDK的打包系统,选择为中国内地的选项,勾选需要聚合的第三方广告平台,如下图所示:
另外为了增加收入,建议额外集成微信Open SDK,并在Taku开发者后台进行App ID的关联。具体接入指引>
选择中国内地之后,从中勾选需要聚合的第三方SDK平台,然后点击生成接入代码
按钮来生成SDK的下载链接。
注意:京东、Mimo、美数、百度等渠道必须要求Androidx接入,不支持Support。
(2) 下载SDK的压缩包,解压后release_folder(xxxxxxxxx)的文件夹里面会有以下内容:
目录/文件 | 说明 |
---|---|
libs | 聚合第三方Network SDK必须集成的包目录(将里面的aar和jar放置开发工程的libs目录下) |
build.gradle | 项目gradle需要集成的代码内容 |
AndroidManifest.xml | 需将AndroidManifest里的组件和配置信息添加到开发工程的AndroidManifest(文件不存在则不需要配置) |
proguard-android.txt | 混淆配置(文件不存在则不需要配置) |
res | 聚合第三方Network SDK必须导入的资源(有则将里面所有的文件夹复制到工程的res目录下,没有则不需要导入) |
keep.xml | 如果打包时有开启shrinkResources或者接入了部分第三方的资源优化框架(如:AndResProguard),则必须将此文件中的资源添加到白名单,否则将导致崩溃或者广告异常 |
whitelists.txt | 如果接入了部分第三方的资源优化框架(如:AndResProguard),则必须将此文件中的资源添加到白名单,否则将导致崩溃或者广告异常 注意:v6.2.93之前的版本请参考keep.xml |
当聚合的广告比较多的情况下,libs文件夹和res文件夹可能会存在比较多的文件,建议在工程中libs的同级目录下创建两个新的文件目录,例如创建taku_libs和taku_res的文件夹,将压缩包里libs的文件放进taku_libs,将res的文件放进taku_res,然后在gradle中引入:
android {
....
sourceSets {
main {
res.srcDirs += 'taku_res'
}
}
...
}
dependencies {
api fileTree(include: ['*.jar','*.aar'], dir: 'taku_libs')
}
这样处理方便后续SDK的更新处理,不会将SDK的资源文件与项目的资源文件混在一起。
(3) Gradle中要补充Support v7插件的引入,否则会集成失败:
android {
//compileSdkVersion最低需要28
compileSdkVersion 28
}
dependencies {
api 'com.android.support:appcompat-v7:28.0.0'
api 'com.android.support:localbroadcastmanager:28.0.0'
}
(4) 聚合 快手,Mintegral 需要添加此依赖:
dependencies {
api 'com.android.support:design:28.0.0'
}
(5) 聚合 米盟(5.2.1 + ) ,需要添加下面的依赖,且必须要按照步骤(6)转换成Android X
dependencies {
api 'androidx.recyclerview:recyclerview:1.2.1'
}
(6) 如果开发者的项目中使用的是AndroidX,可通过以下方法将Support转成AndroidX
在项目中的gradle.properties新增配置如下:
android.enableJetifier=true
android.useAndroidX=true
注意:如果开发者的项目中使用的是AndroidX,并且有聚合快手广告平台时,需额外引入以下依赖:
dependencies {
api 'implementation 'androidx.legacy:legacy-support-v4:1.0.0'
}
(1) Taku SDK所需权限如下:
<!--TaKu SDK通用 必要权限-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--中国区SDK必要权限-->
<uses-permission android:name="android.permission.READ_PHONE_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" />
(2) 建议获取READ_PHONE_STATE权限
注意:广告平台所需权限,必须将下载的SDK压缩包中的AndroidManifest.xml内容配置到您的项目上
(3)安卓操作系统应用权限列表:
权限 |
功能 |
用途和目的 |
调用时机 |
READ_PHONE_STATE 读取电话状态(设备 IMSI/IMEI 号) |
【可选】读取手机设备标识等信息 |
进行广告投放及广告监测归因、反作弊 |
开发者在调用需要该权限的SDK功能时进行调用。例如当开发者需要根据设备信息情况使用调整广告变现策略及数据分析服务时进行时申请。 |
WRITE_EXTERNAL_STORAGE 写入外置存储器 |
【可选】允许应用程序写入外部存储 |
应用下载广告投放及广告素材存储 |
开发者在调用需要该权限的SDK功能时进行调用。例如当开发者投放其他广告平台的广告时,其他广告平台进行广告投放时进行申请。 |
READ_EXTERNAL_STORAGE 读取外置存储器 |
【可选】允许应用程序读取外部存储 |
应用下载广告投放及广告素材存储 |
开发者在调用需要该权限的SDK功能时进行调用。例如当开发者投放其他广告平台的广告时,其他广告平台进行广告投放时进行申请。 |
INTERNET 手机网络请求 |
【可选】手机网络 |
用于线上广告服务请求 |
开发者在调用需要该权限的SDK功能时进行调用。例如当开发者需要根据手机网络情况使用调整广告变现策略及数据分析服务时进行时申请。 |
REQUEST_INSTALL_PACKAGES 应用安装操作 |
【可选】进行应用安装操作 |
用于广告投放的应用安装 |
开发者在调用需要该权限的SDK功能时进行调用。例如当开发者投放其他广告平台的广告,其他广告平台需要依据应用软件列表实现广告投放时进行申请。 |
ACCESS_WIFI_STATE 获取WIFI网络变化 |
【可选】监听WIFI网络变化 |
用于线上广告服务策略更新 |
开发者在调用需要该权限的SDK功能时进行调用。例如当开发者需要根据WIFI网络变化情况使用调整广告变现策略及数据分析服务时进行时申请。 |
ACCESS_NETWORK_STATE 获取网络变化 |
【可选】监听网络变化 |
用于线上广告服务策略更新 |
开发者在调用需要该权限的SDK功能时进行调用。例如当开发者需要根据手机网络变化情况使用调整广告变现策略及数据分析服务时进行时申请。 |
部分广告平台的SDK中带有so库,各平台使用的so文件支持的架构如下:(开发者按需选择以下架构)
穿山甲:arm64-v8a、armeabi-v7a
快手广告:arm64-v8a、armeabi-v7a、armeabi、x86_64、x86
建议:在build.gradle中添加如下配置,可基本支持大部分手机架构:
defaultConfig {
...
ndk{
abiFilters 'armeabi-v7a','x86'
}
}
注意:以下为Taku SDK的混淆配置,广告平台的混淆配置必须参考下载的SDK压缩包中的proguard-android.txt文件
-keep public class com.anythink.**
-keepclassmembers class com.anythink.** {
*;
}
-keep public class com.anythink.network.**
-keepclassmembers class com.anythink.network.** {
public *;
}
-dontwarn com.anythink.hb.**
-keep class com.anythink.hb.**{ *;}
-dontwarn com.anythink.china.api.**
-keep class com.anythink.china.api.**{ *;}
-keep class com.anythink.myoffer.ui.**{ *;}
-keepclassmembers public class com.anythink.myoffer.ui.** {
public *;
}
如果您开启了shrinkResource,则需要在res/raw路径下加一个keep.xml,然后内容是SDK的压缩包的keep.xml文件的内容,例子如下(点击查看Android资源优化处理):
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@layout/anythink_*,@string/anythink_*,@drawable/anythink_*,@id/anythink_*,@dimen/anythink_*,@style/anythink_*,@color/anythink_*,@anim/anythink_*"
tools:shrinkMode="safe" />
如果引入了部分第三方的资源优化框架(如:AndResProguard),需要将所有以anythink为前缀的资源添加到白名单中,例如:
R.string.anythink_*
R.drawable.anythink_*
R.layout.anythink_*
R.id.anythink_*
R.dimen.anythink_*
R.style.anythink_*
R.color.anythink_*
R.anim.anythink_*
注意:如果缺少以下配置,可能导致广告图片显示不出来或者广告加载没有回调
(1) 在AndroidManifest中新增以下配置:
<application>
...
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
...
</application>
(2) 兼容部分第三方广告SDK存在Http请求
在Application Module的AndroidManifest的application标签中增加:android:networkSecurityConfig 的配置:
<application
...
android:networkSecurityConfig="@xml/network_security_config"
...
>
...
</application>
其中在项目的res/xml文件夹新增network_security_config.xml,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
注意:network_security_config.xml中如果有以下配置,可能会导致适配失效
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">xxxxxx</domain>
</domain-config>
(1) 在Application#onCreate()中最开始的位置(必须在初始化其他第三方SDK之前进行设置)添加Webview设置的代码:
public class * extends Application {
@Override
public void onCreate() {
super.onCreate();
//Android 9及以上必须设置
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
String processName = getProcessName();
if (!getPackageName().equals(processName)) {
WebView.setDataDirectorySuffix(processName);
}
}
...
}
}
(2) Google文档说明如下:
如果您的应用必须在多个进程中使用 WebView实例,则您必须先使用 WebView.setDataDirectorySuffix() 方法为每个进程指定唯一的数据目录后缀,然后再在相应进程中使用 WebView 的给定实例。该方法会将每个进程的网络数据放入应用数据目录内其自己的目录中。
在进程中的任何WebView实例被创建之前,并且在此进程中调用android.webkit包中的任何其他方法之前,必须先调用WebView.setDataDirectorySuffix()设置进程的数据目录。