ARTICLE · 1225514
下载了1万个App,我看到了这些
不知道从什么时候开始,变成了喜欢看数据的人。于是最近就让AI从应用商店下载10049个各个分类的应用(不包含游戏),并解析入库,现在把它贴出来
1. SO 文件
库里有 34759 条 so 路径,归成 21870 个文件名。同一个文件名出现在 arm64 和 armeabi 等多个目录时,仍然只算一个应用。下图是进入应用数量最多的 20 个。

第一名是友盟统计的 libumeng-spy.so,出现在 5911 个应用里,大约占样本的 58.8%。往后是 libmmkv.so 4300 个,libc++_shared.so 4274 个。再往下集中在广告和崩溃收集:穿山甲的 libpangleflipped.so 有 3583 个,libcrashsdk.so 有 3458 个,Bugly 的 libbugly_native.so 有 3059 个。libpanglearmor.so、libpglbizssdk_ml.so、libavmdl_lite.so、libttmplayer_lite.so 都挤在 3000 上下。前 20 名都是统计、广告、崩溃和基础库。
2. minSdk

最高点是 24,也就是 Android 7.0,有 4046 个应用,约占 40.3%。其次是 21,也就是 Android 5.0,有 2903 个,约占 28.9%。23 和 26 各有一千出头。19 及更低的版本都很少,9 和 15 只有个位数。样本里的 minSdk 最高到 28,也就是 Android 9,这一档有 247 个。
3. 包名第二段
包名按点切开,取第二段。com.tencent.mm 会记成 tencent。10049 个包名里出现了 7450 种第二段,其中 6441 种只出现一次。榜首并不高。

第一名 sinyee 有 187 个。其中 182 个包名以 com.sinyee.babybus 开头,也就是宝宝巴士这一系列儿童应用,另外 5 个也挂在 sinyee 下面。
第二名 com 有 94 个。里面 54 个以 cn.com 开头,是把公司域名写进了包名。
再往后,app 有 87 个。honghusaas 有 53 个,其中 51 个包名以 driver 结尾,是同一套司机端换了不同名字。example 有 40 个,全部是 com.example 开头,Android 示例工程的默认包名没有改。
tencent 只有 35 个,baidu 17 个,字节跳动常用的 ss 只有 14 个。成系列上架的包,比单个大厂包名更靠前。
4. targetSdk

最高点是 30,也就是 Android 11,有 3299 个,约占 32.8%。33 有 1681 个,对应 Android 13。34 有 1640 个,对应 Android 14。31、35、36 也都在九百到一千左右。26 到 29 很少。
37 有 100 个。另外有 1 个应用写成 40,5 个写成 60。60 对不上已发布的 API 级别,40 也跳出了旁边的连续版本,更像打包时填错了。
5. 类名
这里数的是 APK 里定义出来的类,不是它引用的系统类,所以 java.lang.Object 不会上榜。库里有 42306126 个不同类名,其中 34081437 个只出现在一个应用里。下图是出现应用数最多的 20 个。图上只保留类名最后一段,两份 IconCompatParcelizer 分别来自 android.support 和 androidx。

前 20 名挤在 6192 到 6380 之间,柱高几乎一样。第一名是 androidx.versionedparcelable.ParcelImpl,6380 个应用,约占 63.5%。紧跟着的也全是 AndroidX 和旧版 support 库里的界面类,比如 IconCompat、NestedScrollView、Toolbar。
6. 签名
按证书上的 Common Name 计数。同名但不是同一张证书时,图上会附上哈希前几位。这次前 20 名没有重名。

第一名 Louis Lu,188 个应用。其中 182 个就是上面的宝宝巴士。第二名是安徽众翼网络科技有限公司,145 个,包名各不相同,是同一家主体签了一批工具应用。第三名 nearme 有 63 个。再往下 Yangqi 58 个,合肥奥瑞利科技有限公司 30 个,很快掉到十几个。
7. 权限
图上的系统权限去掉了 android.permission. 前缀。

INTERNET 有 10040 个,只差 9 个应用。ACCESS_NETWORK_STATE 和 ACCESS_WIFI_STATE 也在九千七百以上。读写外部存储、振动、唤醒锁都在八千以上。
REQUEST_INSTALL_PACKAGES 有 7989 个,接近八成应用声明了安装其他应用的权限。相机 7983 个,读取手机状态 7244 个,粗略定位 6900 个,精确定位 6416 个,录音 6299 个。
两条广告相关的自定义权限也进了前 20。华硕 MSA 的补充设备标识权限有 6510 个,Google 广告 ID 有 5832 个。通知和读取图片权限在 5400 上下。
8. 资源
assets 和 res 分开统计。库里 assets 路径有 3841049 条,res 路径有 9646349 条。下面两张图各取出现应用数最多的 20 条,横轴只写文件名。
assets

前两名是 assets/dexopt/baseline.prof 和 baseline.profm,分别有 6189 和 5954 个应用。这是 ART 用来加快启动的配置。
接着是华为移动服务带进来的文件。grs_sdk_server_config.json、grs_sp.bks、hmsrootcas.bks、hmsincas.bks 都在 4300 到 4400 之间。
3000 上下又是一串广告相关文件。广点通的 gdtadv2.jar 有 3145 个,腾讯开放平台的 com.tencent.open.config.json 有 3041 个,微博 SDK 常见的 libwbsafeedit 有 3028 个。旁边几份 Lottie 动画的文件名是摇一摇和扭一扭,数量也在 3020 左右,和前面穿山甲那一组 so 的规模很接近。
res

前 20 名全是 AppCompat 的颜色资源,路径都在 res/color 或 res/color-v23 下面。第一名 res/color/switch_thumb_material_light.xml 有 9314 个应用,约占 92.7%。res/color 这一组在 9100 以上。换成 res/color-v23 之后降到 8700 多。
9. 版本号
版本号有三千多种写法。下图是出现次数最多的 20 个。

前六名是 1.0.0 到 1.0.5,分别是 372、317、257、177、144、142 个。很多应用上架时还留着工程默认的版本号。
9.93.00.00 有 84 个,9.93.00.05 有 73 个。这两个版本号合计 157 个应用,其中 150 个是宝宝巴士,其余几个也是同一类儿童应用。系列产品共用一个版本号,所以能排到前面。
10. APK 大小
区间按 1024 进位,1MB 等于 1048576 字节。从左到右六档是:不满 1MB,2MB 到不满 50MB,50MB 到不满 100MB,100MB 到不满 500MB,500MB 到不满 1GB,1GB 及以上。1MB 到不满 2MB 只有 1 个应用,没有单独画成一档。

应用集中在中间。100MB 到不满 500MB 有 4012 个,约占 39.9%。50MB 到不满 100MB 有 3686 个,约占 36.7%。这两档合计 7698 个,占样本的 76.6%。2MB 到不满 50MB 有 2260 个。
两头很少。不满 1MB 的只有 1 个。500MB 到不满 1GB 有 66 个。1GB 以上有 23 个。
11. 图标颜色
图标先缩到 32 像素,丢掉接近全透明的像素,剩下的像素取平均色,再按色相分成红、橙、黄、绿、青、蓝、紫、粉、棕、灰、白、黑。10049 个图标里有 9 个没能解开,其余 10040 个进了下图。

蓝色最多,2406 个,大约占已识别图标的四分之一。红色 1514 个,橙色 1166 个。灰色、青色、绿色排在中间。黑色最少,145 个。
看下来
这一万个应用里,排到前面的大多不是某个具体产品,而是大家一起带进包里的东西。友盟统计进了一半以上的应用。穿山甲、广点通、Bugly、华为移动服务、AndroidX 和 AppCompat 占据了 so、类名和资源的前排。体积则集中在 50MB 到 500MB。
包名、签名和版本号的榜首被同一批系列应用撑起来,最显眼的是宝宝巴士:182 个 com.sinyee.babybus 包,共用一张 Louis Lu 的证书,也共用 9.93 这一串版本号。















































































