eoe 移动开发者论坛

 找回密码
 加入eoe

QQ登录

只需一步,快速开始

查看: 248|回复: 2
收起左侧

[Android算法] 教你实现android上传应用市场让用户在应用商店下载app

[复制链接]

签到天数: 64 天

连续签到: 2 天

[LV.6]常住居民II

8

主题

243

帖子

470

e币
发表于 2017-6-1 15:54:01 | 显示全部楼层 |阅读模式

没有eoe的账号,级别还太低,出门如何吹牛逼?

您需要 登录 才可以下载或查看,没有帐号?加入eoe

x
教你实现android上传应用市场让用户在应用商店下载app(QQ:220-5357007提供安卓应用市场分发上架,ios刷榜优化,ios上架等服务Android开发的APK 怎么发布到各个市场上;各位开发者,炎炎夏日就要到来,你是不是还在为上传应用而伤透脑筋。为体恤各位开发者,特此整理了一下上传市场攻略,供各位分享而对于国内开发者来说,Android的市场“碎片化”问题也是一个很头疼的问题。
    一起先来看一段代码:

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
private String getChannelName(String channelKey) {
    String result = "";
    if ("dev".equals(channelKey)) { result = "开发版";
    } else if ("official".equals(channelKey)) { result = "官方版";
    } else if ("google".equals(channelKey)) { result = "谷歌版";
    } else if ("appchina".equals(channelKey)) { result = "应用汇版";
    } else if ("youmi".equals(channelKey)) { result = "有米版";
    } else if ("waps".equals(channelKey)) { result = "万普版";
    } else if ("gfan".equals(channelKey)) { result = "机锋版";
    } else if ("91".equals(channelKey)) { result = "91版";
    } else if ("hiapk".equals(channelKey)) { result = "安卓版";
    } else if ("goapk".equals(channelKey)) { result = "安智版";
    } else if ("mumayi".equals(channelKey)) { result = "木蚂蚁版";
    } else if ("eoe".equals(channelKey)) { result = "优亿版";
    } else if ("nduo".equals(channelKey)) { result = "N多版";
    } else if ("feiliu".equals(channelKey)) { result = "飞流版";
    } else if ("crossmo".equals(channelKey)) { result = "十字猫版";
    } else if ("liantong".equals(channelKey)) { result = "联通版";
    } else if ("huawei".equals(channelKey)) { result = "智汇云版";
    } else if ("qq".equals(channelKey)) { result = "腾讯版";
    } else if ("3g".equals(channelKey)) { result = "3G版";
    } else if ("360".equals(channelKey)) { result = "360版";
    } else if ("baidu".equals(channelKey)) { result = "百度版";
    } else if ("sohu".equals(channelKey)) { result = "搜狐版";
    } else if ("samsung".equals(channelKey)) { result = "三星版";
    } else if ("coolmart".equals(channelKey)) { result = "酷派版";
    } else if ("meizu".equals(channelKey)) { result = "魅族版";
    } else if ("moto".equals(channelKey)) { result = "摩托版";
    } else if ("xiaomi".equals(channelKey)) { result = "小米版";
    } else if ("lenovo".equals(channelKey)) { result = "联想版";
    } else if ("zhuamob".equals(channelKey)) { result = "抓猫版";
    } else if ("iandroid".equals(channelKey)) { result = "爱卓版";
    } else if ("imobile".equals(channelKey)) { result = "手机之家版";
    } else if ("uc".equals(channelKey)) { result = "UC版";
    } else { result = "山寨版";}
    return result;
}




    这还只是一部分市场,有几个是我自定义的和广告平台的,剩下的也有将近30个,第一次光是注册账号就会烦你一天的,以后每次光是上传应用就会弄晕你。
1. 国内到底有哪些市场?
    这是一个很难回答问题,"百密必有一疏",所以我正好借用这个平台列举一下,通过大家慧眼识珠和强大的人肉回答来修正和补充:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 下面主要是列出开发者后台地址
Google Play : https://play.google.com/apps/publish
       应用汇: http://dev.appchina.com
    机锋市场 : http://dev.gfan.com/
91和安卓市场 : http://dev.apk.hiapk.com/
              //说明一下,发布在安卓市场也会发布到91市场,他们其实同一家了
安智(goapk) : http://dev.anzhi.com/
      木蚂蚁 : http://dev.mumayi.com/
      N多网 : http://www.nduoa.com/developer
  联想乐商店 : http://developer.lenovomm.com/developer/
     十字猫 : http://dev.crossmo.com/
  腾讯应用宝 : http://tap.myapp.com/android/index.jsp
       飞流 : http://dev.feiliu.com/
     智汇云 : https://dev.hicloud.com/indexManageAction.action
小米应用商店 : http://developer.xiaomi.com/
       百度 : http://developer.baidu.com/
       魅族 : http://developer.meizu.com/
       易优 : http://www.eomarket.com/user/login/lang/zh_CN
    手机之家 : http://profile.imobile.com.cn
  联通沃商店 : http://dev.wo.com.cn/userportal/mapc_login.action
     爱卓网 : http://www.iandroid.cn/index.php?app=my_sharegoods&act=add&is_original=1




  大家尽情的留言补充啊,期待大家的力量....
2. 哪个市场的好坏?
    这是一个很难回答问题,"圣人为圣,善假于物",同一个平台,适合不同阶层的开发者,有些大平台可能对于个人开发者来说,上首页推荐的机会就比较小,成本比较高,而在小的平台可能性就要大些了。利用好各个平台,不要嫌弃一些小平台,这点我觉得很重要。
    所以,这里不做综合比较。
    我就根据友盟统计的数据来分析一下吧(因为我的应用下载量比较小,而且没有做任何推广,仅供参考):
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
渠道  新增用户    即时新增用户  活跃用户    累计用户(%)
appchina64  73  123 784(66.0 %)
hiapk   16  18  27  209(17.0 %)
lenovo  9   10  17  65(5.0 %)
goapk   3   3   6   63(5.0 %)
dev     0   0   2   20(1.0 %)
xiaomi  9   10  11  15(1.0 %)
meizu   7   7   7   7(0.0 %)
3g      4   4   4   6(0.0 %)
official0   0   1   4(0.0 %)
huawei  3   3   3   4(0.0 %)
feiliu  3   3   3   3(0.0 %)
baidu   1   1   1   1(0.0 %)
gfan    0   0   0   1(0.0 %)
mumayi  0   0   0   1(0.0 %)
google  0   0   0   2(0.0 %)




    这是我周一发布的应用的数据(我就不说名字了,避免做广告嫌疑),能反应一个大概的各市场的量的比例,当然有的市场数据明显不对,比如gfan,这个有待勘察。
    我还有几个应用,也是差不多的量,没什么参考价值,就不列出来了。
    欢迎各位能列出有代表的数据,我可以加到这篇文章来。
3. 提交应用的准备工作
    终于开始进入本文的重点了,应用开发完毕,打包好了,也签名了,是不是马上去提交!
    有一条指导建议:"临时现做总是很慢的";
    OK,可以,但是一个市场两个市场可以,市场一多,你自己会先烦掉的。不如先把下面的准备工作做好的。
    市场对于提交的应用一般需要填写相应的资料,需要提前就做好准备,比如第一次提交:
?
1
2
3
4
5
6
7
8
9
(1). 应用程序APK文件
(2). 应用简短描述,10个字或者20个字内
(3). 应用关键字,以空格或者逗号隔开,有的市场还会限制个数,比如最多5个
(4). 应用介绍,有的市场要大于200字,
(5). 应用icon,个人市场需要单独上传icon图标,google play上需要上传一个512x512的高清icon,最好提前准备好
(6). 应用截图,最好准备5张,一般市场要求3-5张
(7). 官方网站,这个填写博客就可以了,我想不是问题吧
(8). 宣传图,这个是可选的,个别市场上有这个选项,如google play上的尺寸要求为800x480,1024x500,飞流上也有一个,要求224x108尺寸的
(9). 类别,下拉选择一个接近的,各个市场的分类都不大一致




  第二次更新升级的时候,就会简单很多:
?
1
2
3
4
(1). 最新APK文件
(6). 最新截图,有些市场可以用旧的截图
(8). 最新宣传图,可选
(10). 更新日志,必选,发布之前就要整理好,[增加][修复]了哪些功能和问题




  准备工作只要做一次,还算比较简单。下一步才是真正的繁琐。
4. 广告平台问题
    做完上面一步,你可能就要面临下面这个重大问题,广告平台问题:
?
1
不同的市场对不同的广告平台有不同的兼容性。




    很多广告平台在一些市场几乎是不能上的,比如最典型的是,安智网是不容许积分墙的,所以万普的积分墙应用是进入不了安智市场的。
    那这个问题怎么解决?
    不上?不行,没有条件创造条件也要上。
    这个需要在这家广告平台和这家市场之间做一个选择了。
    我的解决办法是发布另外一个不包含这家广告平台的同一个应用,比如我把万普的换成有米没有积分系统的同一款应用,这样就能上传到安智市场了。
    这点最好在开发早期就考虑好,从技术的角度打包不同广告平台的应用,本文就不深入探讨了。
5. 正式提交应用到各大市场
    上面都做好了的话,接下来,就是正式的提交应用到各大市场了。
    提交应用绝对是一个任劳任怨的体力活。
    在公司里面应该是有市场推广部门负责的,但是个人的话,只能亲自操刀上阵,一个一个来了。
    在这个繁琐枯燥的过程中,我记录了各个市场的”脾气“,积累了一点经验,特别拿出来记录、分享,以求共勉。

    (1). 应用汇appchina:
    点评:应用汇是最好上的,量比较大,审核也特别快,1天左右就能上架,也没什么限制积分墙。赞一个!
    详细:应用汇的量大,我初步分析不是应用汇本身的量,而是其他很多第三方网站抓取后转载导致。

    (2). 安卓市场(91):
    点评:安卓市场限制积分墙,一定程度的内容审查和特殊权限的控制,审核速度还行,1-2天吧,量算比较大点的。
    详细:第一,安卓市场是不能上万普积分墙的,会提示不支持的积分墙的应用,不予通过。据说以前可以,但是现在不行。第二,我有一个应用里面包含了”成人用品“的内容(我认为是这个原因),结果别拒绝了,拒绝理由是”抱歉,您的软件中部分文字尺度过大,谢绝发布。安卓市场严禁张贴政治、色情、恐怖、暴力的图片及文字,感谢配合!“。第三,不允许CALL PHONE权限,拒绝理由是”抱歉,您的软件发现功能以外的额外付费权限“拨打电话”,请检查,正常功能需求,请在软件描述中注明使用功能点,感谢配合“。

    (3). 机锋市场
    点评:机锋市场算比较好上的,支持万普积分墙,要求不严格,审核比较快,1-2天吧,量也不错,但是升级好像没什么量。但是需要主要机锋标识,什么竞争对手链接等问题。
    详细:第一,我有一次被拒绝的理由是“因为:含有竞争类产品链接,拒绝。。请修改,修改后我们会尽快再次审核。感谢合作!”,我勒了个去,莫名其妙,后来都不知道改了什么,再上传就通过了。第二,针对万普,桔子,有米等等几个广告平台,机锋市场上提交应用和其他市场有一个很大的区别是,需要增加机锋标识,可以优先上架,刚开始不知道的人还真不知道怎么弄,这里我贴出相关文档的地址:
http://www.gfan.com/dev/gunion/2012032616630.html
否则会被拒绝:”品不符合市场发布规范(广告 万普世纪, SDK未添加机锋标识),暂拒。。请修改“。

    (4). 腾讯应用
     点评:之前印象挺好的,速度快,支持万普积分墙,量也马马虎虎还行,但是现在一个应用上传了快两周了还没审核测试,搞不懂腾讯应用是不是内部出现问题了????
     详细:之前审核速度相当快,我以为是大公司的,要求肯定高,但是腾讯的要求不是很严格,但是,但是,现在,11月26日升级一个应用,到现在还是”待测试“,12月2日上传一个新的应用,两三天了没动静,还是”待审核“,什么情况啊。

    (5). 360应用
     点评:坑爹的一个平台,左一个版权,右一个名堂,还搞黑名单,一旦是黑名单,再修改都提交不了。
     详细:不说了,名堂太多。
    (6). 优亿市场
     点评:对于个人开发者来说,比较坑爹,需要授权证书和证明文档,如下图,和360是一路货色,打心里看不起个人开发者。



    (7). 木蚂蚁
    点评: 比较容易上,支持万普积分墙,量个人觉得不大,审核1-2天吧,但是”不收录个人开发者提交的图书、笑话、连连看、对对碰、壁纸、锁屏类应用。“,需要注意一下,我的《幽默笑话》就被拒绝了。

    (8). 3G安卓市场
    点评:审核算快的,1-2天吧,量感觉还可以,支持万普积分墙。还不错。   
    详细:最近,也就是前几天又提交了一个应用,过了几天,3G安卓市场发来了一个邮件,说软件被下架了,原因是“(产品不通过)封面图与截图不能为同一张”,这都被发现了!!只能换图了。

    (9). N多市场
    点评:审核速度还可以,1天左右有反馈,不支持万普积分墙。
    详细:上传第二天就被拒了,反馈倒是挺快的:”经测试您的应用不符合我们的审核标准,请检查您的应用是否含有积分系统、推荐其他应用或广告自行下载等问题。请确保您再次上传的应用不包含以上问题。“,昨天更新升级,现在还在审核中,之前上传了2款应用都审核通过了,待查。

    (10). 十字猫
    点评:软件刚上传,审核时间稍微长一点,2-3天吧,暂时感觉量一般!
    详细:发生了一件比较搞的事情,之前十字猫我一直登陆不上,点”忘记密码“重置了好几次密码,一直提示我密码错误,非常郁闷啊,试了又试,过了几天又试,搞了很久,后来没办法联系商务,结果告诉是说我的开发者账号需要审核,汗,系统提示也太垃圾了吧,还好,商务很快就给我审核通过了。
    (11). Google Play
    点评:主要是账号需要信用卡申请,我是用招行双币visa信用卡办的,没什么审核,但是要填的东西蛮多的,量比较小。
    详细:软件上传后详细页面生效可能要等几个小时。

    (12). 联想乐商店
    点评:审核速度超快,量还可以,不能上万普积分墙。
    详细:可能是先自动审核,再人工干预。因为我才上传5分钟,就接到邮件通知,因为积分墙被拒绝了:
================================================
检测项目 检测结果 描述
积分墙检测结果 不通过 含有非联想指定的积分墙
兼容性测试检测结果 arm: 通过
================================================
随后我马上更新上传一个不包含积分墙的版本,不到一个小时就审核通过了,邮件如下:
================================================
;;;; 很荣幸地通知您, 您提交的应用——xxxx将于30分钟内上架,您可以先逛逛乐商店,看看有什么好玩的应用。 也请您多关注自己应用的下载情况,并及时回复用户提出的问题,谢谢。
================================================
太特么高效了。

    (13). 智汇云
    点评:审核速度还行,2天吧,不支持万普积分墙吧,量的话一般般。
    详细:华为的平台,还算比较容易上,需要身份实名认证。

    (14). 魅族
    点评:审核速度比较快,一天左右,支持万普积分墙,初步感觉量还可以。
    详细:网上有人说魅族的量比较大,审核非常严格,我没感觉到,继续观察!!!

    (15). 小米
    点评:小米的审核速度也是超快,估计量一般吧,支持万普积分墙。
    详细:上传应用后一会儿就反馈一封邮件,才过了不到一个小时,马上又反馈一封邮件,提示软件已经上架,给力!

    (16). 飞流
    点评:审核速度挺快的,1天吧,量比较小,支持万普积分墙。
    详细:最新上传的2款软件都很快通过审核了,但是有一款很早之前的软件一直没有审核,我很无解!

    (17). 百度
    点评:我个人觉得比较坑爹,搞不懂它的后台管理系统,我通过抓猫提交的,审核速度比较快,没有量。
    详细:感觉和百度首页的”应用“没有关系啊,搞不懂搞不懂。

    (18). 联通沃商店
    点评:需要签约,2-3天账户审核通过。
    详细:联通,移动MM这些国内巨头,都弄的很麻烦,但是感觉东西却不怎么样

    (19). 搜狐应用中心
    点评:账户审核2-3天,继续等待上传软件。


    首先,举几个简单的市场,对市场的上传方式进行一下分类,主要分为以下两类:
一、有后台可供开发者进行自主上传的应用市场(这类市场优点是收录速度快,缺点是步骤繁琐):

小米市场、魅锋网、机锋网、安智网、安卓网等等

二、上传至邮箱,或者有专人负责收录的应用市场(这类市场优点是步骤简单,缺点是审核速度较慢):
乐致网、宝软网、木蚂蚁、历趣等等


    在找寻到市场之后,需要对自己的应用进行一个准确的定位,因为不同的应用适合不同的市场,虽然每一个市场都需要去铺设,但是有的放矢的在有效益,有投入产出比的市场上,毫无疑问是更有价值的。通俗来说就是选择性价比最高的市场进行专攻。
    那么,哪些市场或者说渠道更加适合于应用的发布,哪些市场渠道更加适合于游戏的推广,让我们回过头去看各个市场的起源和最开始做的事情,就会有一些新的发现,举个例子来说,机锋网,安卓,安智等都是老牌应用市场,其用户对于游戏应用的分享积极度非常高,拥有一定规模的忠实用户数。并且热衷于刷机等技术性的活,与其说这几个是应用市场,不如说是比较活跃的手机综合性论坛和社区,也就是说,这三个大的市场的用户对于新的产品有更多的积极性和关注性,并且其庞大的用户基数决定了一款应用在刚开始推广时,有一个好的“舞台”,那么在这些大的市场上,花费一定的时间去做推广是很必要的,依旧以机锋为例,我来详细介绍一下对一款产品如何进行包装和推广。
     首先需要进入开发者平台
     点击应用发布之后,就可以发布新的应用了。
    上传是一个很简单的事情,但是其中也有一些小学问,譬如机锋上传中,在详细描述中,对于字体的排列是有一定的考究的,更好的组织文字有利于用户更加好的理解产品,和对产品产生较好的第一印象,当然适当的“标题党”也将为开发者带来不小的惊喜。同时关键字也能够增加搜索引擎的收录。
图标是一款应用最开始让人看到的最直观的部分,俗话说的好:看人先看脸,图标做的成功,一款产品就成功了一半,所以做一个有诱惑力的图标是非常重要和关键的。
     在此基础上,就是填写其他一些选择项的时候了。
     对于产品分类进行准确的选择,一款RPG类型的动作类游戏,既可以选择是RPG游戏,也可以选择为动作类游戏,在这个选择的时候,就可以去查看机锋网该两类游戏的数量,在进行类型的选择,
如果,角色扮演类的游戏一共有817款,而动作类的游戏有1945款,也就是说动作类中要得到一个好的位置将会更加的难,那么这时候就应该选择角色扮演类以减少同类型游戏的相互竞争,以便之后争取一个靠前的排名。
    游戏上传之后,可能会需要等待一天到两天的审核期,机锋的审核速度相对来说,还是比较快的,当然如果你等不及的话,可以去找寻一下各个市场负责审核的人,其联系方式,本文上面已经列出来。
在此,特别强调一点,一款产品想要得到好的展示机会,其内容是该款应用的核心,只有好的内容,才可以为市场创造价值,市场也会愿意提供展示位等方式免费的替这款产品进行推广,于此同时,市场也需要生存,也需要收入,那么一些免费的广告位就非常的难得,可以说,对这些广告位的抢夺是非常火爆的,在产品质量过关的情况下,如何脱颖而出呢?
    就像一个撰稿人是非常需要一个稳定靠谱的编辑一样,应用开发者同样需要去认识一些可以为自己提供展示位的人,在彼此的熟悉中,应用开发者更好的开发适合市场和用户的产品,而市场也得到了产品,这是一种相生相惜的关系,所以,和市场的人员去套一套交情是很必要的,而市场也需要好的产品来点缀自己,所以市场人员也是很热忱的。
     除了上面的常规方法,开发者也可以使用其他的方法,以机锋网为例,机锋有同广告平台进行合作,这些广告平台手中就握有机锋网的一些推广的资源,嵌入广告平台的广告,也可以得到推广的机会,
     不论是否获得推荐,只要应用审核通过,就需要对应用进行一些评分和评论,这是很重要的一点,很多个人开发者觉得,花费时间在刷评论和刷评分上,还不如再去开发个产品,事实上,一款产品的评价能够决定这款产品飞的有多高,在论坛为主的市场中,口碑传播是病毒式的,所以必要的为自己的产品刷上几个好评,和打上几个好分是很重要的,用户第一眼看到介绍后,总会在去看一眼评论再下载,而你只需要花费几分钟的评论可能给你带来的是比预期中多的多的下载量。事半工倍何乐而不为呢?



<meta-data android:name="CHANNEL" android:value="xxx" />
meta的key值固定,通过循环改变meta中的value值来实现市场渠道的写入。
Ant批量打包实现相对麻烦,以前写的时候多亏了谦虚的天下-《App自动化之使用Ant编译项目多渠道打包》 。如果没有这篇帖子,真不知道当时Ant要折腾多少回才能写好。
Gradle作为新的安卓官方构建工具,有Google老大撑腰,它的批量打包实现会相对简单些。可以参考《迁移到Android Studio》。当然这里面有些指令过时了,例如:runProguard已经被minifyEnabled替代了。
以上两种都是传统的批量打包方式,他们最大的缺点就是打包时间长。
在前期渠道很少时这种方法还可以接受,但只要渠道稍微增多该方法就不再适用了,原因是每打一个包都要执行一遍构建过程,效率太低。(电脑比较烂,以前一般打包都要花费个30-40分钟。)
打包界的曙光
前几天看到美团的技术分享文档:《美团Android自动化之旅—生成渠道包》,其中第三种方式提到:
如果能直接修改apk的渠道号,而不需要再重新签名能节省不少打包的时间。幸运的是我们找到了这种方法。直接解压apk,解压后的根目录会有一个META-INF目录,如下图所示:

如果在META-INF目录内添加空文件,可以不用重新签名应用。因此,通过为不同渠道的应用添加不同的空文件,可以唯一标识一个渠道。
采用这种方式,每打一个渠道包只需复制一个apk,在META-INF中添加一个使用渠道号命名的空文件即可。
这种打包方式速度非常快,900多个渠道不到一分钟就能打完。
OK,到这里,思路就有了。
  • 在META-INF中放置一个类似 channel_xxx 的空文件来标识市场。
  • 在Java代码中解析这个文件名获取市场xxx即可。
由于文档中的代码实现较少,这里我来讲述一下我的实现。
我的实现
基于以上总结的美团思路,实现了一套自己的代码,方便引入到工程后实现这种打包方式。
代码在Github:GavinCT/AndroidMultiChannelBuildTool
Python工具实现(基于Python 3)
  • 首先创建一个空文件,等待写入META-INF目录作为channel_xxx文件
    # 空文件 便于写入此空文件到apk包中作为channel文件src_empty_file = 'info/czt.txt'# 创建一个空文件(不存在则创建)f = open(src_empty_file, 'w') f.close()
  • 获取渠道列表。
    考虑到渠道的更新不应该是程序员来做,因此在info文件夹下放置一个channel文件,便于不懂程序的人更新渠道。(每个渠道以换行结束)
    # 获取渠道列表channel_file = 'info/channel.txt'f = open(channel_file)lines = f.readlines()f.close()
  • 找到初始apk
    考虑到现实中为了防止安装包过大,我们通常分为arm和x86两个版本,所以python中支持当前目录下放多个apk来进行打包。
    当然有人会说共用了一个channel文件,多个apk会生成相同市场的对应包。
    你也可以修改一下python,使不同的apk去找不同的channel文件进行打包。
    这里由于我的业务场景这样更方便,我就不修改了。
    # 获取当前目录中所有的apk源包src_apks = []for file in os.listdir():        if os.path.isfile(file):                extension = os.path.splitext(file)[1][1:]                if extension in 'apk':                        src_apks.append(file)
  • 遍历渠道号并写入apk。
    多个apk只是for循环问题,我们来看单个apk生成多市场包的代码
    # file name (with extension)src_apk_file_name = os.path.basename(src_apk)# 分割文件名与后缀temp_list = os.path.splitext(file)# name without extensionsrc_apk_name = temp_list[0]# 后缀名,包含.   例如: ".apk "src_apk_extension = temp_list[1]# 创建生成目录,与文件名相关output_dir = 'output_' + src_apk_name + '/'# 目录不存在则创建if not os.path.exists(output_dir):os.mkdir(output_dir)# 遍历渠道号并创建对应渠道号的apk文件for line in lines:        # 获取当前渠道号,因为从渠道文件中获得带有\n,所有strip一下        target_channel = line.strip()        # 拼接对应渠道号的apk        target_apk = output_dir + src_apk_name + "-" + target_channel + src_apk_extension          # 拷贝建立新apk        shutil.copy(src_apk,  target_apk)        # zip获取新建立的apk文件        zipped = zipfile.ZipFile(target_apk, 'a', zipfile.ZIP_DEFLATED)        # 初始化渠道信息        empty_channel_file = "META-INF/cztchannel_{channel}".format(channel = target_channel)        # 写入渠道信息        zipped.write(src_empty_file, empty_channel_file)        # 关闭zip流        zipped.close()
以上Python是属于现学现写,有什么可以优化的地方还请告知。
Java工具实现
Python帮我们向apk包中写入了channel信息,Java端当然也需要对应更改才能使用。
由于解析channel需要去apk也就是zip中去找文件,所以相对耗时一些。
因此在ChannelUtil.java中,会将找到的channel和对应versionCode存储在静态变量和SharedPreference中,保证本次甚至本版本中channel只从zip中获取一次。
在Java代码中读取空渠道文件名
从apk中获取channel,美团留下的代码if (entryName.startsWith("mtchannel"))是有问题的,应该采用if (entryName.startsWith("META-INF/mtchannel")) 。
我的代码如下:
/** * 从apk中获取版本信息 * @param context * @param channelKey * @return */private static String getChannelFromApk(Context context, String channelKey) {        //从apk包中获取    ApplicationInfo appinfo = context.getApplicationInfo();    String sourceDir = appinfo.sourceDir;    //注意这里:默认放在meta-inf/里, 所以需要再拼接一下    String key = "META-INF/" + channelKey;    String ret = "";    ZipFile zipfile = null;    try {        zipfile = new ZipFile(sourceDir);        Enumeration<?> entries = zipfile.entries();        while (entries.hasMoreElements()) {            ZipEntry entry = ((ZipEntry) entries.nextElement());            String entryName = entry.getName();            if (entryName.startsWith(key)) {                ret = entryName;                break;            }        }    } catch (IOException e) {        e.printStackTrace();    } finally {        if (zipfile != null) {            try {                zipfile.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }    String[] split = ret.split("_");    String channel = "";    if (split != null && split.length >= 2) {            channel = ret.substring(split[0].length() + 1);    }    return channel;}总结
使用这种方式打包,打包工作不再需要非得是安卓程序员。需要打包时,只要下载安装Python环境,点击MultiChannelBuildTool.py执行即可。
那Gradle是不是没用了呢?
当然不是,Google老大为他做了这么多,怎么能说不用就不用呢?
他的用处在于实现订制,比如打包出x86和arm的包,或者打出手机包和适应平板的hd包,然后借助上面的工具生成多个市场,即完成了多种适配包多个市场的任务。

签到天数: 64 天

连续签到: 2 天

[LV.6]常住居民II

8

主题

243

帖子

470

e币
 楼主| 发表于 2017-6-1 15:56:11 | 显示全部楼层

当贝市场apk下载到u盘                发布apk到市场                上传apk到android市场
apk 一键发布到市场                apk上传到应用市场                当贝市场tv版apk
当贝市场tv版官网apk                当贝市场apk下载                当贝市场apk安装包

签到天数: 21 天

连续签到: 2 天

[LV.4]偶尔看看III

0

主题

43

帖子

299

e币
社区认证会员 QQ认证
发表于 2017-8-5 11:02:24 | 显示全部楼层
挺好的一片文章
*滑动验证:
您需要登录后才可以回帖 登录 | 加入eoe

本版积分规则

推荐阅读
赞助商们

QQ|联系我们|小黑屋|手机版|eoe 移动开发者论坛 ( 京ICP备11018032 京公网安11010802020210  

GMT+8, 2017-8-18 20:45 , Processed in 0.625662 second(s), 45 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表
关闭

扫一扫 关注eoe官方微信