Android笔记之:App应用之发布各广告平台版本的详解
Android的广告平台是很多的,各市场对各平台的接受程度是不一样的,Android的开发者如果想集成广告基本要考虑下面两个问题:
(1)集成什么广告,会赚钱?
(2)集成什么广告,不会被市场拒绝?
最终的结果往往是折中的。
第一个问题是广告平台的判断问题,我没有发言权去评论,本文主要是针对第二个问题展开。
解决方案就是打包应用的不同广告平台版本,本文接下来逐一展开相关话题。
2.广告平台的选择
我以三个平台为例子吧:万普,有米,桔子。
这里我强调的是,我不做广告,我不是要推荐这三个平台,只是以三个平台为例子。同时,我还要骂这些广告平台,拖款,扣量等等。
为什么选择这三个平台?
(1).万普是单价比较高,应用比较多,收入比较好,很多开发者选择这个平台,但是因为之前推送的用户体验和积分墙问题,被很多市场封杀,很典型。
(2).有米,宣传做的好,但是普遍反映收入低,banner广告和积分墙是分开的,所以banner部分可以单独拿出来,发布到一些要求严格的市场。
(3).桔子,暂时也不大了解,有积分墙,貌似打款还算比较积极,很多新平台开始都很积极(随便挑了个新平台陪衬陪衬吧)
有人说,使用聚合呀,能够使用不同的广告平台,我觉得这和本文讨论是完全不同的两个问题,此处省略五千字。
3.集成架构
在讨论集成架构之前,我们必须讨论一下应用和广告的关联方式:
(1).多对多的关系,一个广告平台肯定会被嵌入到很多应用中,一个应用往往也需要发布多个广告平台的版本。
(2).一对多的关系,这一条是和第一条矛盾的,但是,广告平台的sdk本身就是解决了嵌入到各个应用的问题,而且真要考虑多对多的方案,会很麻烦而且无太大价值,所以我们的重点是,一个应用发布多个广告平台的版本。
(3).先广告,后应用,再后广告平台。意思是,一开始就考虑广告的集成,但是仅仅是空白占位,什么地方显示banner,要不要在哪里显示个应用推荐,留个空方法会接口;然后开发应用;应用完成之后,在考虑如何集成不同的广告平台,根据不同的平台重写不同的广告占位,或者是以不同的广告形式展示广告。
在这几个考虑的前提下,我画出如下的集成架构图:
这个架构图是系列应用的一个例子,不仅每个应用能发布多个广告版本,而且一个基库能封装定制出多个应用,这应该是一个比较典型的例子。
4.举例
我已经把这个思路应用在world项目中了,参考地址:https://github.com/openproject/world2
而且经过验证,效果还不错。
当然,具体的广告占位和覆写,我就在此略去,你也可以参考上面地址的代码。
5.编译的问题
针对不同的广告平台,我们需要对自动编译打包脚本做一些修改。
(1).三层工程使用ANT编译的问题:R.java文件的生成和资源打包的问题。
强调这个问题,主要是提醒注意一下别搞错了。
R.java的生成,三层工程则要生成3次(build.xml):
<echo>generatingR.javaforprojecttodirgen(usingaapt)...</echo>
<execexecutable="aapt">
<argvalue="package"/>
<argvalue="-m"/>
<argvalue="-J"/>
<argvalue="gen"/>
<argvalue="-M"/>
<argvalue="AndroidManifest.xml"/>
<argvalue="-S"/>
<argvalue="res"/>
<argvalue="-S"/>
<argvalue="../baseworld2.waps/res"/>
<argvalue="-S"/>
<argvalue="../baseworld2/res"/>
<argvalue="-I"/>
<argvalue="${android-jar}"/>
<argvalue="--auto-add-overlay"/>
</exec>
<echo>generatingR.javaforwaplibraryprojecttodirgen(usingaapt)...</echo>
<execexecutable="aapt">
<argvalue="package"/>
<argvalue="-m"/>
<argvalue="--non-constant-id"/>
<argvalue="--auto-add-overlay"/>
<argvalue="-J"/>
<argvalue="gen"/>
<argvalue="-M"/>
<argvalue="../baseworld2.waps/AndroidManifest.xml"/>
<argvalue="-S"/>
<argvalue="res"/>
<argvalue="-S"/>
<argvalue="../baseworld2.waps/res"/>
<argvalue="-S"/>
<argvalue="../baseworld2/res"/>
<argvalue="-I"/>
<argvalue="${android-jar}"/>
</exec>
<echo>generatingR.javaforlibrarytodirgen(usingaapt)...</echo>
<execexecutable="aapt">
<argvalue="package"/>
<argvalue="-m"/>
<argvalue="--non-constant-id"/>
<argvalue="--auto-add-overlay"/>
<argvalue="-J"/>
<argvalue="gen"/>
<argvalue="-M"/>
<argvalue="../baseworld2/AndroidManifest.xml"/>
<argvalue="-S"/>
<argvalue="res"/>
<argvalue="-S"/>
<argvalue="../baseworld2.waps/res"/>
<argvalue="-S"/>
<argvalue="../baseworld2/res"/>
<argvalue="-I"/>
<argvalue="${android-jar}"/>
</exec>
资源打包也是如此,要特别注意资源文件夹的顺序:
<echo>packagingresource(includeres,assets,AndroidManifest.xml,etc.)tores.zip...</echo>
<execexecutable="aapt">
<argvalue="package"/>
<argvalue="-f"/>
<argvalue="-M"/>
<argvalue="AndroidManifest.xml"/>
<argvalue="-S"/>
<argvalue="res"/>
<argvalue="-S"/>
<argvalue="../baseworld2.waps/res"/>
<argvalue="-S"/>
<argvalue="../baseworld2/res"/>
<argvalue="-A"/>
<argvalue="assets"/>
<argvalue="-I"/>
<argvalue="${android-jar}"/>
<argvalue="-F"/>
<argvalue="bin/res.zip"/>
<argvalue="--auto-add-overlay"/>
</exec>
(2).多渠道打包编译脚本(build.sh)
#!/bin/bash
#getthefileparentdir
basedir=$(cd"$(dirname"$0")";pwd)
#getprojectnamebydirname
project=$(echo$basedir|awk-F"/""{print$NF}")
project=${project/\.*/}
#entertherightparentdir
cd$basedir
#markets="wapsgoogleofficialappchinagfanqqnduofeiliu3g360zhuamobbaidusohu163samsungcoolmartmeizumotoliantongiandroidimobilexiaominearmedev"
markets="mumayieodev"
formarketin$markets
do
echopackaging$project.v2.1_$market.apk...
sed-i"s/\(android:value=\)\"\(.*\)\"\(android:name=\"UMENG_CHANNEL\"\)/\1\"$market\"\3/g"AndroidManifest.xml
sed-i"s/\(android:value=\)\"\(.*\)\"\(android:name=\"YOUMI_CHANNEL\"\)/\1\"$market\"\3/g"AndroidManifest.xml
sed-i"s/\(android:value=\)\"\(.*\)\"\(android:name=\"WAPS_PID\"\)/\1\"$market\"\3/g"AndroidManifest.xml
ant-Dapk-name=$project-Dapk-version=v2.1-Dapk-market=$market
done
这两个脚本是放在app.waps下执行,为了通用方便,可以放在某个地方,然后使用ln命令建立一个软链接也可以。
6.小结
本文可以说是炒剩饭,新瓶装旧酒,所以,很多地方都是一言带过,如果觉得思维有些跳跃的话,呵呵,请阅读前面相关的文章。
本文就是用之前的知识解决把应用打包多个广告平台版本的问题,分享了一些注意的地方,希望有所帮助。
相关文章
- android studio不能输入中文_Android模拟器
- android onresume函数,Android界面跳转时候onDestroy和onResume的调用顺序
- android+制作开机动画,Android 开机动画制作详解
- android bindservice方法,Android bindservice方法返回false
- android 锁屏壁纸时钟,桌面锁屏时钟下载-桌面锁屏时钟app安卓版v2.8.0-七度网「建议收藏」
- 【Android 文件管理】应用可访问的存储空间 ( 存储空间分类 | 存储空间访问权限 | 分区存储 )
- 【错误记录】Android 应用安装后出现两个启动图标 ( 排查应用及依赖库中配置了 android.intent.category.LAUNCHER 的 Activity )
- Android控制文字水平间距android:letterSpacing详解手机开发
- Android 手机保持屏幕高亮详解编程语言
- Android系统与Linux之间的联系(android和linux)
- Kali将Android设备变成黑客瑞士军刀
- 韩国 TmaxSoft 发布操作系统挑战微软,兼容 Android 和 iOS
- 安卓APP配合MSSQL强势发力,创新移动应用体验(安卓app mssql)
- 轻松上手,Oracle入门App就在你身边(oracle入门app)
- 肯德基APP上乘体验Redis助力(肯德基app redis)
- APP与MySQL实现无缝连接让你办公更轻松(app连接mysql实例)
- 构建App端Mysql数据库,打造智能体验(app mysql数据库)
- 开发Redis在APP开发中的应用(redis进行app)
- Android控件系列之Button以及Android监听器使用介绍
- android开发之方形圆角listview代码分享
- ANDROID完美退出APP的实例代码
- android开机自启动app示例分享
- android使用handlerthread创建线程示例