豌豆荚首次打开时会在桌面上创建一个叫做【游戏】的快捷方式。里面就区分了游戏和软件。

这是怎么区分的?
经过Charles抓包分析,得出,豌豆荚是通过把包的应用信息上传到服务器,然后服务器在数据库中进行信息获取之后再返回给本地客户端的。他们服务器存有分类信息,因为本来就是做应用类的嘛。
请求如下

http://api.wandoujia.com/v1/apps?timestamp=1437530874210&id=wandoujia_android&f=phoenix2&v=4.52.1&u=13796e7183104b7b961ac514b9040eb4e5a88db4&token=d0b86e36f0395be5186298ce6c0010e9&pns=%7B%2Ccom.zhihu.daily.android%2Ccom.tencent.pao%2C%7D&opt_fields=title%2CpackageName%2CappType%2Cicons.px256&vc=8061&from=phoenix&ch=wandoujia_wap&net=WIFI

请求参数

返回的json格式结果

appType为APP就是应用,为GAME就是游戏。
既然这样,方案一就出来了。
1.自己服务器保存大量的应用分类信息,然后在你的应用启动以及收到应用安装的系统广播时向服务器请求分类信息,然后把获取到的分类信息存到本地。分类信息怎么来,自己处理(后续会说)或者跟第三方应用市场合作获得数据。
2.跟第三方合作,让他们提供接口。

如果没钱没资源,那怎么办啊。那怎么获得分类信息啊。别急,还有办法,虽然不能保证所有数据一定准确,但是还是能保证大部分数据的准确性的。
1.用爬虫去爬取第三方网站的前8000(具体数据自己把握)的游戏分类数据保存下来。
2.在本地自动分析应用信息,基于特征值。
我们知道一般游戏都是基于一些引擎开发的,而应用不会这么做。一般引擎都会包含一些特定的类或者文件(核心代码见后),只要判断是否存在一般就可以判断是否是游戏了,常见的检测广告也是基于这个策略的。
比如cocos2dx包含包org.cocos2dx.lib,unity包含com.unity3d.player,libGDX包含com.badlogic.gdx等等。

常见的引擎就那么几款(之前的三款只是举例,并不是说常见的只有这3个),所以这是一个实际可行的方案。关键这个新出的游戏也可以自动检测啊,毕竟基于规则。
当然,你说有的应用会不会基于引擎开发啊,有啊,可以加白名单啊,反正一般不多。不过用引擎做应用也真是蛋疼→_→

上面两种策略可以结合着一起使用。
其他的很多具体细节就得自己好好考虑下喽。

判断应用是否存在特定类

try {
path = context.getPackageManager().getApplicationInfo(packageName, 0).sourceDir;// 获得某个程序的APK路径
} catch (NameNotFoundException e) {
e.printStackTrace();
}
try {
DexFile dexFile = new DexFile(path);// get dex file of APK
Enumeration<String> entries = dexFile.entries();
while (entries.hasMoreElements()) {// travel all classes
String className = (String) entries.nextElement();
}

} catch (IOException e) {
e.printStackTrace();
}

以上为示例代码,需要根据实际需求进行改动以及优化。

豌豆荚搜索手机中的游戏app形成列表的原理相关推荐

  1. uniapp - 【全端兼容】实现保存视频到手机相册功能,将 mp4 在线视频下载并存储到用户的手机中,uniapp App h5 小程序将视频文件下载保存(详细示例源码及注释一键复制,开箱即用!)

    效果图 在uniapp开发中,实现安卓苹果app.h5网页网站.小程序保存视频到相册功能,点击保存按钮后下载视频并将其存储到用户的手机相册中,完整示例源码及注释,新手小白开箱即用! 直接复制代码,稍微 ...

  2. android 360卫士跳转权限页面如何实现,奇酷360 手机中怎么跳转安全中心中指定包名App的权限管理页面...

    我是一名程序员,在 MIUI 中,涉及浮窗的 APP 需要在对应的软件设置页面打开 浮窗权限 才能正常使用 APP , MIUI 的权限设置入口就在应用管理页面,可以通过如下的代码跳转至该入口: pr ...

  3. 奇酷360 手机中怎么跳转安全中心中指定包名App的权限管理页面

    在处理SDK开发过程中遇到如下问题,在 MIUI 中,涉及浮窗的 APP  需要在对应的软件设置页面打开   浮窗权限   才能正常使用 APP , MIUI 的权限设置入口就在应用管理页面,可以通过 ...

  4. 【Android】提取Android中已安装app的apk

    提取Android中已安装的apk,这个需求很多时候都会遇到.比如从google play上安装过apk后,如何提取出来给别人用? 本文1. 先介绍转载的apk提取方法并 2. 验证提取出来的apk和 ...

  5. Android实战技巧之十八:adb取出安装在手机中的apk

    场景: 朋友看见你Android手机中的游戏或应用很好玩,也想装一个此程序,但限于网络条件不能从网上下载.那么最简单的办法就是直接从你手机中将此apk扣出来给他安装上. pm命令 第一步,找到程序的包 ...

  6. 动真格了!苹果下架超5万款游戏App, 辛好我有企业签

    对待无版号游戏,这回苹果动真格了. 8月1号到11号 据七麦数据,苹果在其App Store上下架国内App超五万个. 经查具体下架游戏名单,发现其中不乏在App Store上排名靠前,迄今已积累数十 ...

  7. 360浏览器清除缓存_手机中的缓存是什么?

    手机中的缓存是什么? 手机缓存就是数据交换的缓冲区(称作Cache).缓存是CPU的一部分,它存在于CPU中,而CPU存取数据的速度则非常的快,一秒钟能够存取.处理十亿条指令和数据(术语:CPU主频1 ...

  8. 手机中的RF射频芯片和基带芯片的区别和联系

    转载:在路上 » [整理]手机中的RF射频芯片和基带芯片的区别和联系 请教一下[射频芯片,wifi/蓝牙芯片,基带是什么关系?]我看到,射频.wifi.蓝牙是三种并列关系的通信协议.所以我理解射频芯片 ...

  9. 手机中微信无法直接打开棋牌游戏类app下载链怎么办?

    微信内置浏览器不支持外部链接下载,可以进入,但是下载链接全部被封掉了,而且无提示.但是微信作为一款国内最大的社交类APP.绝大多数APP的下载推广都是围绕微信来进行,APP在微信的推广转化率一直是困扰 ...

最新文章

  1. 鲸鱼优化算法_Java 代码优化细节之比比谁更细
  2. Heinz College of Information Systems and Public Policy Carnegie Mellon University
  3. VTK修炼之道48:图形基本操作进阶_符号化操作与模型区率计算
  4. nodejsmongoangularjs
  5. vue中 点击事件的写法_vue基础之事件v-onclick=函数用法示例
  6. Python程序-生成回文
  7. 怎么判断网络回路_地暖管漏水怎么办?一打、二看、三确定,及时查出地暖管漏水点!...
  8. [转]哈希算法(Hash Algorithm)初探
  9. 微信云控系统的实现原理,微信云控系统源码之服务器推送的实现及其核心代码
  10. Kafka上K8S实战
  11. mysql主键和候选键有什么区别?
  12. 基于OMNET++仿真平台的4维超立方体网络仿真
  13. web面向接口_面向未来的响应式Web开发
  14. c语言fscanf 发生段错误,亚嵌教育
  15. Mac Raw 恢复|还原Raw格式硬盘或Raw分区数据恢复
  16. C#模仿腾讯QQ源码下载(附效果图)_张童瑶的博客
  17. 区块链技术在物联网中应用的思路探讨
  18. 微信小程序手动添加收货地址省市区联动
  19. 基础知识12.25-12.26
  20. iframe的属性及其简单使用(点击标签切换页面)

热门文章

  1. 知道经纬度来调高德地图的官网API来获取所在的位置(逆地理编码)
  2. SRAM、PSRAM、SPI FLASH初步认识
  3. python语言的三种基本结构_Python语言基础分支语句、循环语句.PPT
  4. GitHub两天标星2.1K+!自动刷喵币靠这一个脚本就够了.....
  5. 网易互娱2017实习生招聘在线笔试--源代码编译
  6. Python读取图片内容并进行修改
  7. 本田及通用公司利用区块链技术探索智能电网与电动汽车的互操作性
  8. 再续!一篇带你了解那些适合日常使用的开源工具和应用(设计篇)
  9. js插件---弹出层sweetalert2
  10. python列表原地交换nums[i], nums[nums[i]] = nums[nums[i]], nums[i]的解决方法