大部分游戏我们都会接入bugly,用来监控游戏的崩溃和异常,在bugly后台我们会看到以下崩溃信息:
# GLThread 1371(29457) SIGSEGV(SEGV_MAPERR)
#00 pc 0000000000aa3f58 /data/app/~~6_tV_wy5KiC1VMeFQPNi2g==/com.yddm.haiwai.game-bHeiJjIVfYMTmPlQwANbrw==/split_config.arm64_v8a.apk
#01 pc 0000000000aafb84 /data/app/~~6_tV_wy5KiC1VMeFQPNi2g==/com.yddm.haiwai.game-bHeiJjIVfYMTmPlQwANbrw==/split_config.arm64_v8a.apk
java:
org.cocos2dx.lib.Cocos2dxRenderer.onDrawFrame(Cocos2dxRenderer.java:105) // 一个jni函数,调用到了c++,进行OpenGL相关的绘制
android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1593)
android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1287)
该系列教程会带你一字一行解读崩溃日志,希望对你排查定位bug有所帮助。
Android Apk安装细节
这里需要补充一些基础知识,安卓系统已安装的软件会在/data/app目录内以base.apk形式存在
如果是通过google play安装的,因为Android App Bundle(aab)的原因,apk会以split的形式存在
我在模拟器上验证了,从google play上下载的apk结构,apk大小还都不一样
star2qltechn:/data/app/com.romewargames.strategyempire-AGP1qpUXkGG3E_m0dBHR1A== # ls -ll
total 408188
-rw-r--r-- 1 system system 8197841 2023-11-02 17:11:57.111427681 +0800 base.apk
-rw-r--r-- 1 system system 12532 2023-11-02 17:13:35.134761014 +0800 base.dm
drwxr-xr-x 3 system system 4096 2023-11-02 17:13:35.261427681 +0800 lib
drwxrwx--x 3 system install 4096 2023-11-02 17:13:35.944761014 +0800 oat
-rw-r--r-- 1 system system 355816799 2023-11-02 17:13:04.944761014 +0800 split_base_assets.apk
-rw-r--r-- 1 system system 53932934 2023-11-02 17:13:30.771427681 +0800 split_config.arm64_v8a.apk
通过adb install,或者直接拖拽安装的,是以base.apk存在
star2qltechn:/data/app/free.v2ray.proxy.VPN-6RDmu-BT0ZNqmAZImYDKlA== # ls -ll
total 14608
-rw-r--r-- 1 system system 14950019 2023-10-25 10:28:44.089183196 +0800 base.apk
drwxr-xr-x 3 system system 4096 2023-10-25 10:28:44.175849863 +0800 lib
drwxrwx--x 3 system install 4096 2023-10-25 10:28:45.615849863 +0800 oat
从google play上安装的游戏,发现split_config.arm64_v8a.apk才34M,游戏整体大小是800多M,发现体积最大的是split_asset_pack.apk
x1q:/data/app/com.yddm.haiwai.game-mbV5YOgNm4TcoRDp5ovYqg== # ls -ll
total 906060
-rw-r--r-- 1 system system 49230425 2023-11-03 11:13:00.186139000 +0800 base.apk
-rw-r--r-- 1 system system 20712 2023-11-03 11:13:07.536139000 +0800 base.dm
drwxr-xr-x 3 system system 4096 2023-11-03 11:23:44.736139000 +0800 lib
drwxrwx--x 3 system install 4096 2023-11-03 11:23:48.176139000 +0800 oat
-rw-r--r-- 1 system system 842630903 2023-11-03 11:23:32.496139000 +0800 split_asset_pack.apk
-rw-r--r-- 1 system system 35701753 2023-11-03 11:18:48.466139000 +0800 split_config.arm64_v8a.apk
-rw-r--r-- 1 system system 33177 2023-11-03 11:13:20.846139000 +0800 split_config.en.apk
-rw-r--r-- 1 system system 24985 2023-11-03 11:13:15.056139000 +0800 split_config.es.apk
-rw-r--r-- 1 system system 85791 2023-11-03 11:12:13.916139000 +0800 split_config.xhdpi.apk
-rw-r--r-- 1 system system 41369 2023-11-03 11:18:55.236139000 +0800 split_config.zh.apk
Split APK
细心的你会发现split_config.arm64_v8a.apk,而这个也在bugly中出现了,有必要我们需要了解下。
Android5.0引入了Split APK机制,Split APK是Google为解决65535上限以及APK越来越大的问题而提出的一种方案。
它可以将一个庞大的APK按照屏幕密度、ABI等形式拆分成多个独立的APK,这些APK共享相同的data、cache目录,共享相同的进程,共享相同的包名。
它们还可以使用各自的资源,并且继承了Base APK里的资源。在Android的官方文档中也有提到这一点。
Split APK机制可以将一个APK,拆分成多个独立APK。
在引入了Split APK机制后,APK有两种分类:
-
Single APK:安装文件为一个完整的APK,即base APK。Android称其为Monolithic。 -
Mutiple APK:安装文件在一个文件目录中,其内部有多个被拆分的APK,这些APK由一个 base APK和一个或多个split APK组成。Android称其为Cluster。
小结
了解以上的基础知识,我们再看这个,就更加清晰明了是什么意思了
/data/app
/~~6_tV_wy5KiC1VMeFQPNi2g==
/com.yddm.haiwai.game-bHeiJjIVfYMTmPlQwANbrw==
/split_config.arm64_v8a.apk
下一节我们继续~~~
5864

被折叠的 条评论
为什么被折叠?



