Android客户端.So 精简策略

简介: /** * Created by chenchangjun on 17/10/27. */1..So 理论基础首先介绍一下 目前所有手机上 .So 的指令集Android系统目前支持以下七种不同的CPU架构,每一种都关联着一个相应的ABI。
/**
 * Created by chenchangjun on 17/10/27.
 */

1..So 理论基础

首先介绍一下 目前所有手机上 .So 的指令集

Android系统目前支持以下七种不同的CPU架构,每一种都关联着一个相应的ABI。而架构上对应的指令集是以下几种

  • Intel 64 指令集在 x86基础上扩展的(x86指令集有两种CPU位,既有32位的,也有64位的.)
  • armabi 是针对旧的或者普通的ARM v5 CPU.
  • armabi-v7a 是针对ARM v7 CPU (是针对有浮点运算或高级扩展功能的arm cpu).
  • arm64-v8a 是针对最新的 ARM v8a CPU的(就是在MIPS64架构上增加了ARMv7).

安卓这些固定平台的应用通常都编译成ARM处理器的程序,不全都会编译成Intel或者MIPS处理器的程序。

为了解决这个问题,Intel和MIPS要使用特殊的转换软件把ARM的指令转换成他们处理器使用的指令。这当然是会降低性能的

2.项目问题解决

2.1 思路分析

目前项目中的jniLib是这样的,相当冗余.

img_db5ad242f1e6ab78f6187b08a9ab26c6.png
image.png

思路是这样的

  1. armabi指令集是全arm平台(包括armV7 armv8,以及x86,x86_64),都兼容的 指令集.
  1. armabi-v7a 是针对有浮点运算或高级扩展功能的arm cpu,也就是armabi的高性能版本. Android 5.0+同时支持32位与64位ABI的.so. 有arm64-v8a就用,没有就fallback到armeabi-v7a或armeabi.
  1. arm64-v8a 64位指令集,运行在64位手机cpu上,目前主流cpu都已经是64位.

所以说:

为了尽量兼容市面所有手机类型, 尽可能减少crash几率. 所以,
ARM7, ARM8设备能够向下兼容ARM5的SO,也就是说只打包armabi下的so即可

2.2 调研第三方lib库

为了验证这个导论, 我反编译了一些流行app文件.

反编译了 微博 的jniLib中的 文件.

只用了 armabi的兼容包.

img_3fbb82ccf546143f398adb123d03146e.png
image.png

反编译 微信

他们只用了armabi的兼容包,但是里面有_v7.so后缀的 高性能包,提高性能.

img_3c874085abf94ba02c19b1eb0a687e20.png
image.png

反编译 淘宝

只用了 armabi的兼容包.

img_5867bc91b2ca5ed82428b9ad35194425.png
image.png

第三方总结

这里, 都是用了 armeabi包下的.so .

不同的是, 有的他们在这个文件夹下的.so直接做了v7兼容包, 有的则可能选择了插件加载.so的方式.

相同的是, 都是只打包armeabi,提高最大的兼容性,并且减少apk体积.

3.实现,测试

3.1 代码实现

为了确保不出现问题(比如gradle引用第三方可能存在so),保留可选择性的打包.我没有删掉其他cpu指令集,而是用代码选择性编译,只保留armeabi进行编译.

//'armeabi-v7a' // , ‘arm64-v8a’, ‘x86’, ‘x86_64’
        ndk {
            abiFilters 'armeabi'
        }
        

3.2 结果对比

img_d421a50640ee50443f98867906bc5b88.png
image.png

4. 总结

目前,可以只编译armeabi下的so,因为armeabi兼容所有的cpu架构.
理论上行得通, 主流app也都是这么做的.
至于,性能问题,so包影响程度不超过15%,性能问题 最大的还是在手机质量和运行内存..........

5. 后期方向

5.1 只保留armabi-v7a或者arm64-v8a

随着Android 版本的提高(Android5.0以后的版本支持v7和v8指令集), 手机性能的提高(不管高通,麒麟还是联发科,目前主流cpu都是64位处理器.

也就是说支持v7和v8指令集.越来越没必要做ARM5和X86的支持了,以后就更没必要。

5.2 采用插件化 加载.so 包

我们可以采用 插件化加载.so .

目录
相关文章
|
7天前
|
安全 数据安全/隐私保护 Android开发
探索Android与iOS的隐私保护策略
在数字时代,智能手机已成为我们生活中不可或缺的一部分,而随之而来的则是对个人隐私和数据安全的日益关注。本文将深入探讨Android与iOS两大操作系统在隐私保护方面的策略和实践,分析它们如何应对日益严峻的隐私挑战,以及用户应如何保护自己的数据安全。通过对比分析,我们将揭示两大系统在隐私保护方面的优势和不足,为用户提供有价值的见解和建议。
|
3月前
|
缓存 监控 Android开发
探索iOS与安卓开发中的性能优化策略
在移动应用开发的竞技场上,iOS和安卓这两大操作系统不断推动着技术的边界。性能优化,作为提升用户体验的关键因素,已成为开发者们关注的焦点。本文将深入探讨两大平台上的性能优化实践,揭示如何通过工具、技术和策略来提升应用的响应速度和流畅度,同时考虑到电池寿命和内存管理等关键指标。
|
8天前
|
前端开发 Android开发 开发者
探索Android与iOS的跨平台开发策略
在当今多元化的移动设备市场中,开发者面临着为不同操作系统设计应用的挑战。本文深入探讨了Android和iOS两大主流平台的跨平台开发策略。我们将分析使用Flutter、React Native等框架进行跨平台开发的优劣,并讨论如何克服各平台间的差异性,以实现高效、一致的用户体验。此外,文章还将提供一些实用的技巧和最佳实践,帮助开发者优化跨平台应用的性能和兼容性。
25 4
|
9天前
|
前端开发 Android开发 iOS开发
探索Android与iOS的跨平台开发策略
在移动应用开发的多元化时代,跨平台开发已成为开发者追求效率和广泛覆盖的重要手段。本文深入探讨了Android与iOS两大主流平台下的跨平台开发策略,分析了各自的优势与挑战,并通过实际案例展示了如何有效实施跨平台解决方案,以期为开发者提供有价值的参考和启示。
|
1月前
|
调度 Android开发 开发者
构建高效Android应用:探究Kotlin多线程优化策略
【10月更文挑战第11天】本文探讨了如何在Kotlin中实现高效的多线程方案,特别是在Android应用开发中。通过介绍Kotlin协程的基础知识、异步数据加载的实际案例,以及合理使用不同调度器的方法,帮助开发者提升应用性能和用户体验。
47 4
|
1月前
|
监控 测试技术 Android开发
掌握安卓性能优化的关键策略
【10月更文挑战第7天】 在移动应用开发领域,性能优化是一项至关重要的任务。本文将探讨安卓应用性能优化的重要性、关键策略以及实际操作建议,帮助开发者提升应用的用户体验和竞争力。通过深入浅出的方式,我们将从背景介绍到具体实践,全面解析安卓性能优化的各个维度。
|
17天前
|
安全 Android开发 iOS开发
深入探索iOS与Android系统的差异性及优化策略
在当今数字化时代,移动操作系统的竞争尤为激烈,其中iOS和Android作为市场上的两大巨头,各自拥有庞大的用户基础和独特的技术特点。本文旨在通过对比分析iOS与Android的核心差异,探讨各自的优势与局限,并提出针对性的优化策略,以期为用户提供更优质的使用体验和为开发者提供有价值的参考。
|
6月前
|
移动开发 安全 Android开发
构建高效Android应用:Kotlin协程的实践与优化策略
【5月更文挑战第30天】 在移动开发领域,性能优化始终是关键议题之一。特别是对于Android开发者来说,如何在保证应用流畅性的同时,提升代码的执行效率,已成为不断探索的主题。近年来,Kotlin语言凭借其简洁、安全和实用的特性,在Android开发中得到了广泛的应用。其中,Kotlin协程作为一种新的并发处理机制,为编写异步、非阻塞性的代码提供了强大工具。本文将深入探讨Kotlin协程在Android开发中的应用实践,以及如何通过协程优化应用性能,帮助开发者构建更高效的Android应用。
|
1月前
|
安全 Android开发 数据安全/隐私保护
安卓应用开发中的常见挑战及解决策略
【10月更文挑战第7天】在安卓应用开发的旅程中,开发者常面临各种挑战,从设备兼容性到性能优化,再到用户界面设计。本文将深入探讨这些常见问题,并提供实用的解决策略,帮助开发者提升应用质量和用户体验。我们将通过代码示例和实践建议,展示如何克服这些挑战,打造更流畅、更吸引人的安卓应用。
47 0
|
2月前
|
监控 算法 数据可视化
深入解析Android应用开发中的高效内存管理策略在移动应用开发领域,Android平台因其开放性和灵活性备受开发者青睐。然而,随之而来的是内存管理的复杂性,这对开发者提出了更高的要求。高效的内存管理不仅能够提升应用的性能,还能有效避免因内存泄漏导致的应用崩溃。本文将探讨Android应用开发中的内存管理问题,并提供一系列实用的优化策略,帮助开发者打造更稳定、更高效的应用。
在Android开发中,内存管理是一个绕不开的话题。良好的内存管理机制不仅可以提高应用的运行效率,还能有效预防内存泄漏和过度消耗,从而延长电池寿命并提升用户体验。本文从Android内存管理的基本原理出发,详细讨论了几种常见的内存管理技巧,包括内存泄漏的检测与修复、内存分配与回收的优化方法,以及如何通过合理的编程习惯减少内存开销。通过对这些内容的阐述,旨在为Android开发者提供一套系统化的内存优化指南,助力开发出更加流畅稳定的应用。
70 0