请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

根据CPU架构类型选择so的问题

老师您好,将两种架构的so文件放入同一个目录下,根据CPU架构类型去选择加载那个so,但是这两个so还是都放入到了apk中了呀,只是由原来的放在两个目录下,变成了放在一个目录下,如何达到瘦身目的?

正在回答 回答被采纳积分+3

4回答

随风绽放 2021-01-22 16:18:09

同学你好,比如有两个so,libexc.so 和 libcore.so,如果每个架构的目录都放对应架构的libexc.so 和 libcore.so,假设我们适配两个架构,那它俩其实就占用了两份空间(也就是此时是 4 个 So)。

此时

如果 libcore.so 不是性能敏感的,而libexc是性能敏感的

我们想进行包大小优化

那我们可以只放在一个 cpu 架构的文件夹下,此时只有两个 so。但是libexc是性能敏感的,因此我们将libexc两个架构的 so 都放在一起,而libcore只需要放一个即可(性能不敏感),此时是三个 so在一个架构的文件夹里。然后我们在运行阶段根据判断来决定加载哪个架构的libexc。

从原来的 4 个 so,到现在的 3 个 so,是不是节省了空间。



0 回复 有任何疑惑可以回复我~
上进的学渣 2020-03-17 13:40:37

同样的困惑:放在不同目录和放在一个目录,这只是位置改变了,但是包大小还不是一样,感觉视频里面没讲清楚

0 回复 有任何疑惑可以回复我~
_hubery 2020-01-08 18:56:53

我也有这个好奇,后来想了下可能是有些有些so会特定处理,有些so就不用都加进来了,因为如果两个文件夹同时都存在的话里面的so文件个数不一样貌似会之前会报错出现问题

0 回复 有任何疑惑可以回复我~
随风绽放 2019-12-07 11:07:45

同学你好,比如有一个so,libexc.so,如果只放在一个目录下的话那它只占一份空间,而如果每个架构的目录都放对应架构的libexc.so,那它其实就占用了多份空间。从多个目录都有libexc到只有一个目录有这个文件,这样就达到了瘦身目的。

0 回复 有任何疑惑可以回复我~
  • 提问者 若邪913 #1
    还是不明白,为何会只有一个目录下有so,打个比方,用户cpu系统有三种,对应的so文件也有三种同名的不同的so,一般是分别放在不同的目录下,但是这个放在一个目录下,是放在哪个目录下,感觉老师说的方案应该是在线动态加载so的吗?先判断手机cpu架构,再决定下载哪一个,但是如我上面所述,这种情况是怎么选,选哪个so,放哪个目录
    回复 有任何疑惑可以回复我~ 2019-12-09 00:37:03
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信