Skip to main content

Android常见问题

一、编译报错#

1.1 拉取TP SDK 或 TP对应的三方Adapter Gradle 失败#

步骤1:开发者需根据打包平台确认集成的SDK正确#
  • (1)是否是5.X更新上来的用户:由于JCenter仓库停止服务,TP和三方平台的仓库均有更新,请老版本升级上来的客户对照打包平台一一修改引用
  • (2)版本号是否能一一对应或者是否有字母写错的情况
  • (3) Android Studio HTTP Proxy状态正常
  • (4) Gradle是否属于“离线模式”—— 'offline mode'情况下构建项目是不会在线拉取第三方依赖包的
步骤2:确认Module级和Project级中build.gradle中正确引入了mavenCentral()google()#
repositories {
mavenCentral()
google()
jcenter()
...
}
}
  • (1)关于Module和Project,Unity开发者可以参考Google官网的Android Studio模块结构说明。
  • (2)需注意mavenCentral()是否写成mavenLocal()mavenLocal()是本地Maven仓库,第一次拉取TP Gradle需从线上拉取
  • (3)各个代码库的列出顺序决定了 Gradle 在这些代码库中搜索各个项目依赖项的顺序。类似如下图情况表明tradplusad跑错了仓库导致拉取失败,此时开发者需要将mavenCentral()的位置调整到最高,重新拉取。
步骤3:Android Studio Gradle是否是离线状态?#
* 不知道怎么判断,初次接触Android的开发者可直接Google或Baidu,“gradle切换online/offline mode模式”。
步骤4:电脑是不是开了代理?导致“All packages are not available for download”报错。#
* 不知道怎么关闭,初次接触Android的开发者可直接Google或Baidu,“Android Studio如何关闭代理”。
步骤5:海外源一些拉取成功,个别拉取失败,大多是网络问题,开VPN切换国家尝试。#

1.2 queries相关#

unexpected element <queries> found in <manifest>&#x60;或&#x60;Error: Missing 'package' key attribute on element package

1.3 try name ‘AndroidManifest.xml’ collided`#

需开发者要在build.gradle中添加

android {
packagingOptions {
exclude 'AndroidManifest.xml'
}
}

1.4 java.lang.NoClassDefFoundError:Failed resolution of:Lcom/google/android/gms/ads/rewarded/RewardedAd#

  • 原因:同时引入 AdMobFirebase

  • 解决: 只能引入一个,同时firebase要引入和推荐的Admob Adapter一样的版本。

// 版本号,仅作举例说明,具体Firebase接入的版本要和TP Admob 推荐的版本号一致
// implementation 'com.google.android.gms:play-services-ads:21.0.0'
implementation 'com.google.firebase:firebase-ads:21.0.0'

1.5 The Google Mobile Ads SDK was initialized incorrectly#

  • 原因:集成Google Admob后自 Google 移动广告 SDK v17.0.0 起,必须添加此 <meta-data> 标记,如果不添加应用会崩溃,同时收到上面的Log。

  • 解决: 根据《集成文档》中三方配置声明部分,正常集成SDK

1.6 AAPT: error: resource android:attr/lStar not found.#

详细报错信息如下:

Execution failed for task ':app:checkDebugAarMetadata'.
> Multiple task action failures occurred:
> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction
> The minCompileSdk (31) specified in a
dependency's AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties)
is greater than this module's compileSdkVersion (android-30).
Dependency: androidx.core:core-ktx:1.7.0.
AAR metadata file: .gradle/caches/transforms-2/files-2.1/14c9ccd33a3c43ada608a2400c01e86e/jetified-core-ktx-1.7.0/META-INF/com/android/build/gradle/aar-metadata.properties.
> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction
> The minCompileSdk (31) specified in a
dependency's AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties)
is greater than this module's compileSdkVersion (android-30).
Dependency: androidx.core:core:1.7.0.
AAR metadata file:.gradle/caches/transforms-2/files-2.1/ac6a4373db31c761b96c2d467c311f0a/core-1.7.0/META-INF/com/android/build/gradle/aar-metadata.properties.
  • 原因:集成三方平台SDK版本中引用core-ktx、core版本和项目版本不同
  • 解决方法一: 需要更改编译版本compileSdkVersion升级到31,然后重新编译
  • 解决方法二: 在app的build.gradle中添加如下,强制项目使用具体的版本,代码示范如下:
configurations.all {
resolutionStrategy {
// 开发者需引入项目中已有版本
force 'androidx.core:core-ktx:1.5.0','androidx.core:core:1.6.0'
}
}

1.7 com.tencent.mm.opensdk重复引用#

  • MTG从SDK16.1.7版本起,支持小程序跳转功能

  • 非上架GP市场SDK会自动引入opensdk。如果开发者同时接入GDT会有冲突。可以使用exclude排除.

implementation ("com.mbridge.msdk.china:reward:${sdkVersion}"){
exclude group: "com.tencent.mm.opensdk", module: "wechat-sdk-android"
}
implementation ("com.mbridge.msdk.china:mbsplash:${sdkVersion}"){
exclude group: "com.tencent.mm.opensdk", module: "wechat-sdk-android"
}
implementation ("com.mbridge.msdk.china:mbbanner:${sdkVersion}"){
exclude group: "com.tencent.mm.opensdk", module: "wechat-sdk-android"
}
implementation ("com.mbridge.msdk.china:mbnative:${sdkVersion}"){
exclude group: "com.tencent.mm.opensdk", module: "wechat-sdk-android"
}
implementation ("com.mbridge.msdk.china:mbnativeadvanced:${sdkVersion}"){
exclude group: "com.tencent.mm.opensdk", module: "wechat-sdk-android"
}
implementation ("com.mbridge.msdk.china:newinterstitial:${sdkVersion}"){
exclude group: "com.tencent.mm.opensdk", module: "wechat-sdk-android"
}
implementation ("com.mbridge.msdk.china:mbbid:${sdkVersion}"){
exclude group: "com.tencent.mm.opensdk", module: "wechat-sdk-android"
}

1.8 更新Google Admob SDK到V21.0.0后与Firebase有冲突报错#

Duplicate class com.google.android.gms.measurement.internal.zzhe found in modules jetified-play-services-measurement-base-20.1.2-runtime (com.google.android.gms:play-services-measurement-base:20.1.2) and jetified-play-services-measurement-impl-19.0.1-runtime (com.google.android.gms:play-services-measurement-impl:19.0.1)
  • 解决: 更新FireBase到最新版本

二、运行时异常#

2.1 Adx Crash:android.content.res.Resources$NotFoundException: String resource ID #0x0.#

  • 需要将tp为前缀的资源添加到白名单中,详细了解《SDK配置-资源优化》文档

2.2 Caused by: android.view. InflateException: Binary XML file line #34:Error inflating class com. kwad.components.ad.reflux. KsRefluxView#

Caused by: android.view. InflateException: Binary XML file line #34:Error inflating class com. kwad.components.ad.reflux. KsRefluxView Caused by: android. view. InflateException: Binary XML file line #34: Error inflating class com.kwad.components.ad.reflux. KsRefluxView.

  • 集成快手SDK,在展示视频的时候出现Crash。

  • 原因:缺少recyclerview引入导致

  • 解决: 核对打包平台,填加漏引入的依赖

2.3 java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion#

  • 原因:在 Android 6.0 中,SDK移除了对 Apache HTTP 客户端的支持。从 Android 9 开始,该内容库已从 bootclasspath 中移除,且默认情况下应用无法使用它。
  • 解决:清单文件中配置apache
<application>
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
</application>

2.4 java.lang.RuntimeException: Manifest merger failed with multiple errors#

  • 原因:V9.2.0.1版本网络安全配写入SDK。老版本升级上来的项目,清单文件中会因有添加过该配置而导致报错
  • 解决
方法一 : 删除原本项目中添加的网络安全配置#
<application
// 删除此配置
android:networkSecurityConfig="@xml/network_security_config">
</application>
方法二 :指定属性替换,使用项目中的配置#
<application
android:networkSecurityConfig="@xml/network_security_config"
tools:replace="android:networkSecurityConfig"
>
</application>

三、广告加载失败#

3.1 集成错误#

(1)适配文件没有集成#

开发者需要根据打包平台确认集成的SDK都正确添加到项目中,找不到三方Adapter会报错adapter not found 或 Couldn't locate or instantiate custom event null;

(2)TP的混淆配置没有添加#

根据《SDK配置》文档添加混淆,不添加混淆会报Couldn't locate or instantiate custom event null

(3)确认集成广告源是否需要传入Activity#

部分三方源需要activity才能请求成功,没有传入Activity会一直失败

(4)对象调用错误#

确认TP的广告位类型和new TPObject的类型一致,例如不能创建开屏的广告位ID,但是用激励视频API去请求

3.2 后台配置问题#

(1)后台没有添加广告源#

确认在TradPlus创建的广告位ID下已经添加了三方广告网络,会由于拉取不到配置报no config

(2)同一个广告平台配置不同的APPID#

  • 确认TradPlus后台是否配置的三方广告源有多个APPID
  • 后台配置错误即使是不同类型也只能配置同一个APPID
  • 例如Mintegral开屏类型的appId、appkey和激励视频类型的appId、appkey不一致,三方平台只支持初始化同一个APPID,多个APPID初始化会导致请求失败

3.3 请求某个源一直无填充#

  • 开发者需配合《错误码和错误信息》定位错误问题

  • 如果广告一直请求失败,就需要开发者根据三方平台错误码确认集成三方广告加载失败的原因

  • 开发者可以通过过滤TradPlusLog查看日志信息或设置LoadAdEveryLayerListener监听oneLayerLoadFailed(TPAdError adError, TPAdInfo adInfo)回调,打印每个广告源加载失败的原因

(1)Meta或者Admob一直没有填充#

  • Meta必须使用测试广告测试,否则会有封号风险.需要使用三方提供的测试ID去测试,可配合如何使用测试模式来测试

  • Admob必须使用测试广告测试,否则会有封号风险。(见下面截图)TradPlus测试模式测试,TradPlus后台已经将Admob测试测试广告配置到后台,开发者可以直接使用。

  • 网络不好会偶现插屏视频中间视频播放黑屏,或者原生广告展示无展示事件。

  • 请求次数过多,即使是使用测试广告也会无填充。

(2)Bidding源正式广告拉不到配置#

报错日志为:
waterfall bean is null
Bidding Failed
  • 由于TradPlus服务器策略能访问国内ip的网无法拉取到海外Bidding配置的。

  • 开发者可以使用TradPlus测试模式进行测试。测试广告请求成功并展示表示内部流程已经跑通,是可以直接上线。

  • 如果有需求上线前必须要用正式广告测试,那么IP必须在海外Bidding才能拉取到配置。例如:VPN开启后,不能打开CSDN情况下,才能拉取到,如下图:

四、广告加载成功但是展示失败#

4.1 是否是在广告加载成功后调用showAd#

  • 1、各类型广告onAdLoaded(TPAdInfo tpAdInfo, TPBaseAd tpBaseAd)oneLayerLoaded(TPAdInfo adInfo)加载成功监听是否回调
  • 2、激励、插屏、开屏isReady()为true,后调用showAd()。

4.2 广告位类型请求的API是否类型匹配#

  • 例如创建开屏的广告位,但是使用激励视频的API去请求。
  • 开发者可以通过打印onAdVideoError(TPAdInfo tpAdInfo, TPAdError tpAdError)onAdShowFailed(TPAdError error, TPAdInfo tpAdInfo)查看报错原因。

4.3 激励视频、插屏#

  • API调用问题 showAd(Activity activity, String sceneId) 展示广告是否传入Activity,context会导致部分广告源展示失败。
  • 后台配置问题 errorMsg为frequency limit,TP广告位是否设置了频次限制。

4.4 标准原生#

  • showAd(ViewGroup adContainer, int layoutId)容器是否为空
  • 开发者是否修改布局文件中的android🆔 资源ID,会导致自渲染广告的元素无法找到对应id而展示失败
  • 后台配置问题 errorMsg为frequency limit,TP广告位是否设置了频次限制。

4.5 开屏#

  • 开发者需确认加载和展示广告是否使用配对的API,正确传入容器,具体请查看《开屏文档》
  • 后台配置问题 errorMsg为frequency limit,TP广告位是否设置了频次限制。

4.6 Meta的原生横幅#

  • 容器的宽必须是match_parent,不能是wrap_content,否则会导致展示失败。

五、Unity接入#

5.1 激励(插屏)广告播放时切屏再回到游戏广告没有继续播放问题#

  • unity在编译时使用的singletask模式,所以切到桌面点击icon进入会将游戏界面上层的全部清除。如果是任务管理器回来并不会有异常。
  • singletask是Unity官方建议模式,如果需要修改,可以网上查找下相关文章。

六、国内上架应用市场#

6.1 点击直接下载问题#

开发者可根据《国内隐私规范》文档中的“下载类广告二次弹窗确认”调用API或联系广告平台配置

6.2 开启个性化广告问题#

开发者可根据《国内隐私规范》文档中的“国内个性化推荐广告开关”调用API

七.上架GooglePlay#

7.1 权限问题#

开发者需根据打包平台确认是否集成国内源,国内源不能上架GP。

7.2 发布警告提醒 “play-services-tasks (com.google.android.gms:play-services-tasks)”版本 18.0.0 存在严重问题,要求更新#

  • 原因:由于某一海外源pom文件中引入play-services-tasksV18.0.0的版本导致。

  • 解决: build.gradle中配置移除指定版本

android {
...
configurations.all{
resolutionStrategy.force 'com.google.android.gms:play-services-tasks:18.0.0'
}
}

7.3 上架报错com.my.tracker:mytracker-sdk该SDK会收集个人数据或敏感数据。#

  • 原因:MyTarget SDK某个引用导致
  • 解决: build.gradle中配置移除指定mytracker-sdk版本
implementation ('com.my.target:mytarget-sdk:5.15.0') {
exclude group: 'com.my.tracker', module: 'mytracker-sdk'
}
implementation 'com.my.tracker:mytracker-sdk:3.0.9'

八.应用ID与广告位ID不匹配问题#

一般出现这样提示有以下几种情况:

  • 没有调用tradplus的初始化就去load了,这种情况下load广告的时候用的appid是空的
  • 调用tradplus的初始化是在load广告后,同上一种情况
  • 开启了tradplus的测试模式,测试模式下发的是tradplus默认配置,确实会不一样。这种可以忽略
  • 初始化也是提前调的,但是load还提示这个,那么可能确实用的appid和广告位id不是一个app下的,需要去tradplus后台查看应用管理。

更多问题,请联系我们,邮箱:tech_support@tradplus.com