疑难杂症记录3:广告模块以及三方sdk同步升级androidx问题
发布时间:2025-05-18 01:31:35 发布人:远客网络
一、疑难杂症记录3:广告模块以及三方sdk同步升级androidx问题
广告模块引入了很多三方sdk,这里的问题体现在google的admob上,期望是将admob升级到18.3.0版本,结果主工程中由于引入了firebase,具体来讲就是admob和firebase都引入了google的基础服务gms,但版本没统一导致了Duplicate class的错误。
com.google.android.gms:play-services-ads:18.3.0这个版本里面使用了
com.google.android.gms:play-services-measurement-base:17.1.0
我们项目中还使用了两个google的服务框架,分别如下(已是最高版本了):
com.google.android.gms:play-services-gcm:17.0.0
com.google.firebase:firebase-core:17.0.0
这两个包里面使用了com.google.android.gms:play-services-measurement-base:17.0.0,导致工程现在编译时报错:Duplicate class com.google.android.gms.internal.measurement.zzio found in modules classes.jar(com.google.android.gms:play-services-measurement-base:17.1.0) and classes.jar(com.google.android.gms:play-services-measurement:17.0.0)
解决方法:将admob18.3.0降到18.0.0,因为这个版本里面是play-services-measurement-base:17.0.0
上面已经定调了admob使用18.0.0,内部的play-services-measurement-base是17.0.0,更内部的firebase-iid是19.0.0。这个依赖是确定下来的了。
In project'app' a resolved Google Play services library dependency depends on another at an exact version(e.g."[17.0.4]", but isn't being resolved to that version. Behavior exhibited by the library will be unknown.
Dependency failing: com.google.firebase:firebase-messaging:17.3.4-> com.google.firebase:firebase-iid@[17.0.4], but firebase-iid version was 19.0.0.
日志中说的也很清楚了,要将firebase-iid 17.0.4升级到 19.0.0。下面要解决的问题是将com.google.firebase:firebase-messaging:17.3.4这个升级到内部依赖了firebase-iid version19.0.0的版本,通过在 上查询搜索关键词:firebase-messaging,定位到firebase-messaging:19.0.0内部依赖了firebase-iid version19.0.0,那么在主工程中将firebase-messaging升级到19.0.0就将问题解决了。
说实话,google下面的各类服务框架包纷繁复杂,版本又不统一,在同时引入多个google的服务框架时势必会遇到这种问题,那么后续解决该类问题的思路是怎样呢?总的思路是:先定一个核心服务的目标版本,然后其他服务适配该核心服务版本。比如确定了要将admob升级到18.3.0,那么非核心的服务就需要将其内部依赖的paly-service-base保持一致,基本上就不出现Duplicate class的问题。
二、如何:在Android应用中加入广告方法步骤
广告墙和推送广告我使用万普,广告条我使用芒果的聚合,暂时打算用多盟、有米这2个平台。(之所以用多个平台是可以根据情况做实时的在线比例分配,这样可以有更多的选择余地,当然也不是越多越好,加的平台越多应用就越臃肿,你的收入当然就分散了,而每个平台都至少要求100元才能提款的。)
首先我们来添加广告墙和推送广告。
1.登录万普平台,进入开发者页面,点击添加应用,输入应用名称,点保存,之后打开应用详情页面,记下WAPS_ID的值备第2步骤使用。后面的信息也尽量完善起来,
文件程序等最后完成广告集成并测试后再上传即可。
2.在我的项目的AndroidManifest.xml文件下添加广告需要的权限(具体要哪些权限参加广告SDK的帮助和实际情况定):
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<meta-data android:name="WAPS_ID" android:value="2f9dd55307ede480a80ba0783be835d"/>
<meta-data android:name="WAPS_PID" android:value="WAPS"/>
<activity android:name="com.waps.OffersWebView"
android:configChanges="keyboardHidden|orientation"/>
第一行android:value对应的字符串要替换成步骤1从万普添加应用后得到的ID,千万不要填错哦。
第二行是万普进行渠道设置选项,最好按其开发者手册最后对应的表格来填写
第三行是展示广告墙所使用的activity,不添加会导致展示不了广告墙
3.Eclipse->Project->Properties->Java Build Path->Libraries->Add External JARs->选择我们前面下载解压出来的AppOffer_1.5.3.jar,来完成添加万普SDK的Jar包。
在对应更多应用菜单的处理事件里加入AppConnect.getInstance(this).showOffers(this);来打开广告墙。
运行应用,点击更多应用,顺利打开推荐列表如图:
4.打开项目的入口Activity,在onCreate事件里写入
AppConnect.getInstance(this).getPushAd();//自动推送使用,如果你在万普web端配置自动推送则可以注释次行
在退出应用的地方(我是在入口Activity的onDestroy事件)写入
AppConnect.getInstance(this).finalize();
这样我们就把万普的广告墙和推送模式的广告集成好了,将应用使用正式签名(方法网上搜很多,这里不介绍)编译后将apk上传到万普审核,同时就可以发布到市场渠道去让用户下载了。(关于市场发布下篇里再介绍)
下面介绍使用芒果聚合来添加广告条:
1.登录芒果平台,添加新应用,打*的必须填写,点下一步来进入广告平台选择页面。
2.到你要添加的广告平台添加新应用来获取对应的ID,并把这些ID设置到1步骤芒果平台对应的ID设置中(点对应平台后面的“未设置”)。
3.点击芒果页面上对应平台后面的按钮来打开对应平台的状态,并点击开启测试,以便接下来测试是否能正常获取测试广告。同时将2个平台的比例均配成50%。
4.点击下一步,应用就添加完成了。会得到一个芒果ID备用,下载芒果广告的SDK。(因为该SDK里已经包含了其所支持的所有平台的jar包,所以不需要单独再去下载其他广告平台的包了,而且聚合平台不一定及时更新所有平台的包,可能会对广告平台的更新没有及时更改其SDK,所以也必须从这里下)
5.解压芒果上下载下来的SDK,并将其libs下对应平台的包加入工程(我这里加入AdsMOGO-SDK-Android.jar[芒果]、youmi-android.jar[有米]、domob_android_sdk.jar[多盟])。
6.修改AndroidManifest.xml文件,添加必要的权限,以及到芒果SDK的开发帮助文档里找到对应平台要求添加的activity。我这里加入:
<activity android:name="cn.domob.android.ads.DomobActivity"
android:theme="@android:style/Theme.Translucent"/>
<activity android:name="net.youmi.android.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation"/>
<activity android:name="net.youmi.android.spotad.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation"/>
7.加入芒果Key的meta-data,将值替换你在芒果平台最后得到的KEY值,我这边如下:
<meta-data android:value="25fff80a3966465e888e0db9735fef11" android:name="ADMOGO_KEY"/>
8.在要展示的地方添加代码如下:
AdMogoLayout adview= new AdMogoLayout(this,"25fff80a3966465e888e0db9735fef11");//ID跟xml配置的相同
FrameLayout.LayoutParams params= new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT);
//设置广告出现的位置(悬浮于顶部)
params.gravity= Gravity.TOP|Gravity.CENTER_HORIZONTAL;
addContentView(adview, params);
这段代码作用是新建一个芒果广告的View,并将它加到activity的最顶端。
9.OK,代码都添加完成,运行测试,广告正常展示如下:
自己点击测试下,是否能正常打开广告页面。到芒果web页面调整广告平台的分配比例,分别测试所有你的平台是否均成功展示。如果有失败,请核对芒果上配置的ID或密码是否相同(包括前后不能有空格),任然有问题的话联系平台技术人员帮你协助解决。
10.最后一步,将芒果web页面上的比例平均分配,关闭测试模式。然后将应用签名打包,上传到各个广告平台审核。(平均分配是为了审核人员保证有机会能看到你的应用上有展示他们平台的广告),审核均通过后就可以发布到各个市场上来开始收益旅程了。
三、Google Android SDK开发范例大全(第3版)的目录
2.2创建第一个Android项目(Hello Android!)
2.3 Android应用程序架构——从此开始
3.10不同Activity之间的数据传递
3.24判断手机操作系统版本是否允许运行程序
3.26指定安装应用程序迁移至SD卡
3.27手机动态Layout主题随手势物换迁移
4.23动态放大缩小ImageView里的图片
4.30实时配置桌面上的AppWidget UI Layout
4.31识别输入装置ID与InputDevice装置
4.33设计与Launcher相同的三页滑动Layout
5.11制作有图标的文件资源管理器
5.24取得电信网络与手机的相关信息
5.26判断手持设备的WiFi与GPS状态
5.29模拟文件下载Notification进度变化与关闭
5.30取得已安装应用程序列表与安装日期信息
6.20取出通讯录数据及多组电话号码
6.24开启内置闹钟与已安装的应用程序设置
6.25在SDK开发环境中访问JNI接口
7.6取得手机内置媒体中的图片文件
7.23设置录音取样频率与显示录音时间
7.25声音音效均衡器、重低音与音场控制
7.26在自定义的SurfaceView上绘制动画
8.5将网络图像网址放入Gallery中显示
8.11将手机文件上传至网站服务器
8.18通过Web API动态更改手机Spinner控件
8.23 WebView网页载入中、载入完成样版
8.24通过内嵌Flash Player播放FLV电影
8.25 WebView网站Session Cookie判断与访问
第9章 Google服务与Android完美整合
9.10通过YouTube ID调用YouTube播放影片
9.11 Google Analytics分析手机用户行为
10.4手机QR Code二维条形码生成器
10.5 Android QR Code二维条形码扫描仪
10.12动起来!手机桌面上会动的动态桌布
10.14 YouTube影片FLV文件下载器
第11章 HTML5 Mobile应用程序开发
11.1 HTML5 INPUT输入框控制手机输入键盘
11.2 HTML5利用CSS3排版的墙贴相册
11.5 HTML5取回所在经纬度坐标并反查地址
附录A如何发布程序到Android Market
A.1支付Google Android Market注册费
A.2生成签署凭证.keystore金钥档案
A.3上传*.apk程序到Android Market上
附录B升级项目至新版SDK与Honeycomb平板程序部署
B.1 Android SDK版本与项目最低运行版本设置
B.2升级程序至Honeycomb平板运行