• Android学习系列(34)App应用之发布各广告平台版本


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

    1. 基础
    本文其实是针对《Android学习系列(6)--App模块化及工程扩展》和《Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包》的一个扩展和应用场景。
    所以当然也需要这两篇文章的基础:
    (1). Android类库的应用
    (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):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    <echo>generating 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>
     
    <echo>generating 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>
     
    <echo>generating 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>

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

    <echo>packaging 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)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #!/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. 小结
    本文可以说是炒剩饭,新瓶装旧酒,所以,很多地方都是一言带过,如果觉得思维有些跳跃的话,呵呵,请阅读前面相关的文章。
    本文就是用之前的知识解决把应用打包多个广告平台版本的问题,分享了一些注意的地方,希望有所帮助。

  • 相关阅读:
    201671010456-张琼 实验三作业互评与改进
    阅读《构建之法》后的相关问题
    个人作业-软件工程实践总结
    团队作业第二次—项目选题报告
    结对第二次—文献摘要热词统计及进阶需求
    结对第一次—原型设计(文献摘要热词统计)
    第一次作业-准备篇
    个人作业——软件工程实践总结作业
    团队作业第二次—项目选题报告
    结对第二次—文献摘要热词统计及进阶需求
  • 原文地址:https://www.cnblogs.com/mingliangzhai/p/3042307.html
Copyright © 2020-2023  润新知