Android笔记之:App应用之发布各广告平台版本的详解

2016-02-19 10:07 13 1 收藏

关注图老师设计创意栏目可以让大家能更好的了解电脑,知道有关于电脑的更多有趣教程,今天给大家分享Android笔记之:App应用之发布各广告平台版本的详解教程,希望对大家能有一点小小的帮助。

【 tulaoshi.com - 编程语言 】

Android的广告平台是很多的,各市场对各平台的接受程度是不一样的,Android的开发者如果想集成广告基本要考虑下面两个问题:
(1)集成什么广告,会赚钱?
(2)集成什么广告,不会被市场拒绝?
最终的结果往往是折中的。
第一个问题是广告平台的判断问题,我没有发言权去评论,本文主要是针对第二个问题展开。
解决方案就是打包应用的不同广告平台版本,本文接下来逐一展开相关话题。

1. 基础
本文其实是针对《Android笔记之:App模块化及工程扩展的应用》和《Android笔记之:App自动化之使用Ant编译项目多渠道打包的使用详解》的一个扩展和应用场景。
所以当然也需要这两篇文章的基础:
(1). Android类库的应用
(2). 因为要结合自动编译各市场版本,所以要更新编译打包的脚本,当然这一步是可选的,如果你愿意手动的话。

2. 广告平台的选择
我以三个平台为例子吧:万普,有米,桔子。
这里我强调的是,我不做广告,我不是要推荐这三个平台,只是以三个平台为例子。同时,我还要骂这些广告平台,拖款,扣量等等。
为什么选择这三个平台?
(1). 万普是单价比较高,应用比较多,收入比较好,很多开发者选择这个平台,但是因为之前推送的用户体验和积分墙问题,被很多市场封杀,很典型。
(2). 有米,宣传做的好,但是普遍反映收入低,banner广告和积分墙是分开的,所以banner部分可以单独拿出来,发布到一些要求严格的市场。
(3). 桔子,暂时也不大了解,有积分墙,貌似打款还算比较积极,很多新平台开始都很积极(随便挑了个新平台陪衬陪衬吧)
有人说,使用聚合呀,能够使用不同的广告平台,我觉得这和本文讨论是完全不同的两个问题,此处省略五千字。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

3. 集成架构
在讨论集成架构之前,我们必须讨论一下应用和广告的关联方式:
(1). 多对多的关系,一个广告平台肯定会被嵌入到很多应用中,一个应用往往也需要发布多个广告平台的版本。
(2). 一对多的关系,这一条是和第一条矛盾的,但是,广告平台的sdk本身就是解决了嵌入到各个应用的问题,而且真要考虑多对多的方案,会很麻烦而且无太大价值,所以我们的重点是,一个应用发布多个广告平台的版本。
(3). 先广告,后应用,再后广告平台。意思是,一开始就考虑广告的集成,但是仅仅是空白占位,什么地方显示banner,要不要在哪里显示个应用推荐,留个空方法会接口;然后开发应用;应用完成之后,在考虑如何集成不同的广告平台,根据不同的平台重写不同的广告占位,或者是以不同的广告形式展示广告。
在这几个考虑的前提下,我画出如下的集成架构图:

这个架构图是系列应用的一个例子,不仅每个应用能发布多个广告版本,而且一个基库能封装定制出多个应用,这应该是一个比较典型的例子。

4. 举例
我已经把这个思路应用在world项目中了,参考地址:https://github.com/openproject/world2
而且经过验证,效果还不错。
当然,具体的广告占位和覆写,我就在此略去,你也可以参考上面地址的代码。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

5. 编译的问题
针对不同的广告平台,我们需要对自动编译打包脚本做一些修改。
(1). 三层工程使用ANT编译的问题:R.java文件的生成和资源打包的问题。
强调这个问题,主要是提醒注意一下别搞错了。
R.java的生成,三层工程则要生成3次(build.xml):
代码如下:

echogenerating R.java for project to dir gen (using aapt) ... /echo
exec executable="aapt"
    arg value="package" /
    arg value="-m" /
    arg value="-J" /
    arg value="gen" /
    arg value="-M" /
    arg value="AndroidManifest.xml" /
    arg value="-S" /
    arg value="res" /
    arg value="-S" /
    arg value="../baseworld2.waps/res" /
    arg value="-S" /
    arg value="../baseworld2/res" /
    arg value="-I" /
    arg value="${android-jar}" /
    arg value="--auto-add-overlay" /
/exec

echogenerating R.java for wap library project to dir gen (using aapt) ... /echo
exec executable="aapt"
    arg value="package" /
    arg value="-m" /
    arg value="--non-constant-id" /
    arg value="--auto-add-overlay" /
    arg value="-J" /
    arg value="gen" /
    arg value="-M" /
    arg value="../baseworld2.waps/AndroidManifest.xml" /
    arg value="-S" /
    arg value="res" /
    arg value="-S" /
    arg value="../baseworld2.waps/res" /
    arg value="-S" /
    arg value="../baseworld2/res" /
    arg value="-I" /
    arg value="${android-jar}" /
/exec

echogenerating R.java for library to dir gen (using aapt) ... /echo
exec executable="aapt"
    arg value="package" /
    arg value="-m" /
    arg value="--non-constant-id" /
    arg value="--auto-add-overlay" /
    arg value="-J" /
    arg value="gen" /
    arg value="-M" /
    arg value="../baseworld2/AndroidManifest.xml" /
    arg value="-S" /
    arg value="res" /
    arg value="-S" /
    arg value="../baseworld2.waps/res" /
    arg value="-S" /
    arg value="../baseworld2/res" /
    arg value="-I" /
    arg value="${android-jar}" /
/exec

资源打包也是如此,要特别注意资源文件夹的顺序:
代码如下:

echopackaging resource (include res, assets, AndroidManifest.xml, etc.) to res.zip ... /echo
exec executable="aapt"
    arg value="package" /
    arg value="-f" /
    arg value="-M" /
    arg value="AndroidManifest.xml" /
    arg value="-S" /
    arg value="res" /
    arg value="-S" /
    arg value="../baseworld2.waps/res" /
    arg value="-S" /
    arg value="../baseworld2/res" /
    arg value="-A" /
    arg value="assets" /
    arg value="-I" /
    arg value="${android-jar}" /
    arg value="-F" /
    arg value="bin/res.zip" /
    arg value="--auto-add-overlay" /
/exec

(2). 多渠道打包编译脚本(build.sh)
代码如下:

#!/bin/bash

# get the file parent dir
basedir=$(cd "$(dirname "$0")";pwd)

# get project name by dir name
project=$(echo $basedir | awk -F "/" '{print $NF}')
project=${project/.*/}

# enter the right parent dir
cd $basedir

#markets="waps google official appchina gfan qq nduo feiliu 3g 360 zhuamob baidu sohu 163 samsung coolmart meizu moto liantong iandroid imobile xiaomi nearme dev"
markets="mumayi eo dev"
for market in $markets
do
    echo packaging $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. 小结
本文可以说是炒剩饭,新瓶装旧酒,所以,很多地方都是一言带过,如果觉得思维有些跳跃的话,呵呵,请阅读前面相关的文章。
本文就是用之前的知识解决把应用打包多个广告平台版本的问题,分享了一些注意的地方,希望有所帮助。

来源:http://www.tulaoshi.com/n/20160219/1593463.html

延伸阅读
车一百考驾照APP应用发布   汇车网络近日推出了一个新的独立应用车一百考驾照,该应用是一款轻松的手机驾考学习工具,拥有最新最全的驾考题库,覆盖驾照考试的全部流程。通过模拟考试、视频讲解等特色功能帮助用户顺利取得驾照。 汇车网络此前因一款热门的违章查询工具车一百查违章而被广大车主所熟知,该应用更是一直排在各大应...
标签: Android
Android平台11款最佳动态壁纸应用   其实,在现在的Google Play商店中有不计其数的生活壁纸类应用。在这些应用中,你可以找到各种类型的壁纸,简洁时尚或是多彩斑斓,甚至有许多来自于生活中的漂亮照片都可以成为壁纸。不过,如果你想要真正找到自己喜欢的那一张,其实并不是一件容易的事。相信有许多人都曾经为了找到一张自己满意的...
8款Android平台最佳RSS订阅应用推荐   如果你已经习惯了通过RSS聚合阅读的方式来获取各种各样的资讯,那么谷歌在7月1日开始正式关闭Google Reader的行为绝对会让你感到有些无所适从。没错,这太令人沮丧了,因为目前依然有大批聚合用户尤其是Google Reader用户依然非常依赖这种阅读方式,而谷歌选择关闭Google Reader服务真的让人无...
前言          Content Provider为存储数据和获取数据提供了统一的接口,它可以完成在不同应用程序下的数据共享,而在上一篇文章Android开发之SQLite的使用方法讲到的SQLite只能在同一个程序中共享数据。另外android为一些常见的数据,比如说音频,视频,图片,通讯录等提供了Content Provider,...
有道云笔记怎么用之查找笔记   关键词搜索 有道云笔记支持搜索功能,方便您在众多信息中迅速定位想要的笔记。在图一所示搜索框中输入关键词后,笔记标题或正文中包含该关键词的笔记将被选出,关键词同时被高亮。 图一 按时间选择 您也可以在界面左侧按时间选择区域中操作,选中在一定时间内创建或修...

经验教程

77

收藏

70
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部