首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在多个APK之间共享公共共享库以减小大小

在多个APK之间共享公共共享库可以有效减小每个APK的大小,这主要通过使用Android的APK分包机制来实现。以下是具体的基础概念、优势、类型、应用场景以及解决方案:

基础概念

APK分包(APK Splitting)是一种将应用拆分成多个APK的技术,每个APK包含应用的一部分功能或资源。通过这种方式,可以针对不同的设备特性(如屏幕尺寸、CPU架构等)提供优化的APK,同时也可以减少单个APK的大小。

优势

  1. 减小APK大小:通过共享公共库,可以避免在每个APK中重复包含相同的代码和资源。
  2. 加快下载速度:较小的APK可以更快地下载和安装。
  3. 优化存储空间:用户设备上不需要存储多个相同库的副本。

类型

  1. 基于ABI的分包:根据设备的CPU架构(如armeabi-v7a、arm64-v8a等)拆分APK。
  2. 基于屏幕尺寸的分包:根据设备的屏幕尺寸和密度拆分APK。
  3. 基于功能的分包:根据应用的不同功能模块拆分APK。

应用场景

  1. 多设备支持:针对不同设备和配置提供优化的APK。
  2. 大型应用:对于包含大量库和资源的大型应用,分包可以显著减小APK大小。
  3. 按需下载:用户可以根据需要下载特定的功能模块,而不是一次性下载整个应用。

解决方案

  1. 使用Android Studio的APK分包功能
    • build.gradle文件中配置android块,启用APK分包:
    • build.gradle文件中配置android块,启用APK分包:
    • 这会生成多个APK,每个APK包含特定CPU架构的代码。
  • 使用Google Play的动态分发
    • 在Google Play Console中配置动态分发,允许用户按需下载应用的不同部分。
    • 这需要将应用拆分成多个模块,并在build.gradle文件中使用applicationIdSuffixversionNameSuffix来区分不同的模块。
  • 共享库的正确配置
    • 确保公共库在build.gradle文件中正确声明为implementationapi依赖项:
    • 确保公共库在build.gradle文件中正确声明为implementationapi依赖项:
    • 使用api依赖项可以让库中的代码对所有依赖它的模块可见。

示例代码

以下是一个简单的示例,展示如何在build.gradle文件中配置APK分包:

代码语言:txt
复制
android {
    ...
    splits {
        abi {
            enable true
            reset()
            include 'armeabi-v7a', 'arm64-v8a'
            universalApk false
        }
    }
}

dependencies {
    implementation 'com.example:common-library:1.0.0'
}

参考链接

通过以上方法,可以有效地在多个APK之间共享公共共享库,从而减小每个APK的大小,提升用户体验和应用性能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

减小镜像体积-docker最佳实践

而事实上,我们可以通过一些技巧方法减小镜像的大小。本片博文,我将介绍一些优化技巧,同时也会探讨如何在减小镜像大小和可调试性取舍。...go-hello-world-rwxr-xr-x 1 donggang staff 2174056 6 15 11:40 go-hello-world 通过以上两个示例,我们急需一些方法来改善我们的构建减小最终产物的体积...其实这是因为缺失了必要动态文件dynamic library, 程序编译成功运行时,需要使用一些C Hello World中的puts。...,这种无法共享公共的方式很快不再流行。...使用动态链接往往有以下优点: 节省存储资源,多个程序共享一个; 节省内存,多个程序运行内存调用同一片内存; 维护方便,更新时,无需重新编译程序; 有些人可能会说节省内存不是动态链接所带来的优点,而是共享

1.4K10

如何优化您的 Android 应用(Go 版)

保持安装的大小很小 ? APK 大小和安装率之间存在非常明显的相关性:APK 大小越小,安装量越高。使用 Android(Go 版)的人对磁盘大小非常敏感,因为这些手机通常存储容量有限。...使用 Android App Bundle,您可以构建一个工程,其中应用程序包含已编译代码,资源和本地。您不再需要为多个 APK 进行构建,签名,上传和管理版本代码。...dex 代码可占用 APK 中的重要空间。考虑进一步优化代码减小 APK大小。了解更多关于减少代码的信息,并查看我们的为数十亿用户打造的产品指导方针中的相关细节。...在测试 APK 时,我们看看 PSS(比例集大小),了解应用程序或游戏在设备上冷启动的内存量。PSS 的测量方式是您的应用的私有内存加上您的应用在设备上使用的共享内存的比例。...为了在 Activities 和 Fragments 之间传值,可以用公共接口替换公共静态函数,”预算应用程序 Gastos Diarios 3 的创建者 Michel Carvajal 说。

1.8K20
  • 鸿蒙(HarmonyOS)性能优化实战-APP体积包瘦身方案

    开发者可以参考下面三种方法减小应用包大小:配置so压缩选项,通过压缩so减小应用包大小。...应用存在多包(HAP、HSP)的场景时,可以使用 HSP(Harmony Shared Package) 动态共享包在应用的多个包(HAP、HSP)之间共享代码和资源,消除使用 HAR(Harmony...减小应用包大小的方法配置so压缩选项当前DevEco Studio默认打包应用时不压缩so文件,配置so压缩选项后,DevEco Studio会将so文件压缩形式打包到包中,从而减小应用包大小。..."compressNativeLibs": true // 标识libs压缩存储方式打包 }}so压缩效果DevEco Studio中C++默认文件为例,压缩前后的文件大小对比如下:文件名...HAR与HSP都是为了实现代码和资源的共享,都可以包含代码、C++、资源和配置文件,最大的不同之处在于:HAR中的代码和资源跟随使用方编译,如果有多个使用方,它们的编译产物中会存在多份相同拷贝;而HSP

    14120

    笔记——模块化-组件化-插件化小知识(七)

    根据不同的关注点,将一个项目的可以共享的部分抽取出来,形成独立的Module,就是模块化。模块化不只包含公共部分,当然也可以是业务模块。 模块化的概念可以说贯穿整个组件化,插件化。...>2.组件化开发 基于可重用的目的,将一个大的软件系统按照分离关注点的形式,拆分成多个独立的组件,已较少耦合。...将一个app分成多个模块,每个模块都是一个组件(Module),开发的过程中我们可以让这些组件相互依赖或者单独调试部分组件等,但是最终发布的时候是将这些组件合并统一成一个apk,这就是组件化开发。...解决以下项目中的问题: 1.稍微改动一个模块的一点代码都要编译整个工程,耗时耗力 2.公共资源、业务、模块混在一起耦合度太高 3.不方便测试 >3.插件化开发 Android应用程序的.java...用于团队多个人分工开发不同的模块 3. 更好的解耦 ②插件化: 1. 用于版本新添加功能 2. 解决方法数超过65536问题 3. 按照需要下载模块,减小项目apk大小 ③热更新: 1.

    88530

    Oceanus:美团点评HTTP流量定制化路由的实践

    备注:应用apk1和apk2分别配置2个私有策略,apk3使用公共策略。 如上图所示,无论业务根据请求的哪些特征进行分流,策略结构均可以支持。...一个服务可以配置多个私有策略,也可以关联多个Host的Location,Location之间的策略使用完全独立,一个Location可以启用该服务的一个或者多个私有策略。...异步更新机制 为了保证运行时获取策略数据的高效性,我们通过异步定时拉取,把策略数据全量同步到本地的共享内存中。基于稳定性和灵活性的考虑,我们采用了关系型数据MySQL存储策略。...根据Host+location_path,到共享内存中查询所开启的策略名。 如果是公共策略,直接根据策略名去查询策略数据。...备注:公共策略"oceanus"开头,区别于私有策略的命名。 运行时策略渲染 查询到请求开启的策略后,Oceanus需要运行时判断是否匹配,私有策略为例,执行流如下图所示: ?

    1.3K10

    使用快速密集特征提取和PyTorch加速您的CNN

    这包括基于任务的特征提取,相机校准,补丁匹配,光流估计和立体匹配。此外基于补丁的应用程序不被视为特征提取,滑动窗口对象检测或识别。...相反在右边,如果这个CNN在一个图像创建特征中的每个像素位置执行时,许多中间层的结果网络无故之间共享。 节点中的数字表示节点共享的频率。红色连接显示红色节点的共享方式。步幅2汇集输出分辨率。...这个例子的概括是s 是池/步幅大小,u和v是整数,P(x,y)和P(x + su,y + sv)补丁仍然共享共享的像素的汇集输出两个补丁。 在不同的图像位置(红色)修补P....由于s×s汇聚层将输出大小减小到Iw / s ,Ih / s(输入大小为Iw ,Ih),很明显需要s×s这样的输出来获得空间大小Iw的输出O,Ih。 不同池输出被堆叠在一个额外的输出尺寸记为中号。...该测试生成一个大小的随机输入图像I,imH X imW并在Cp和CI上对其进行评估。 该脚本继续并评估CNN输出之间的差异并执行速度基准测试。

    1.7K20

    【Docker】容器化应用程序的配置管理策略与实践

    【4】清理不必要的文件:在构建过程中,删除不必要的中间文件和缓存,减小镜像的大小。可以使用RUN指令执行清理操作。...3.2 使用多阶段构建优化镜像大小和性能 【1】多阶段构建:使用多阶段构建可以减小最终镜像的大小,并提高构建过程的性能。可以将构建环境和运行环境分开,只将必要的文件和依赖项复制到最终镜像中。...为了减小镜像的大小,可以合并多个指令,减少层次的数量。可以使用&&运算符将多个命令合并到一行。...避免使用具有过高权限的用户或服务账号,减少潜在的安全风险。 【2】用户隔离:应该为每个容器分配独立的用户身份,避免不同容器共享同一个用户账号。这样可以限制容器之间的权限和访问范围。...可以使用网络防火墙工具,iptables,来配置容器的防火墙规则。 【3】加密通信:对容器之间的通信进行加密,保护数据的机密性和完整性。可以使用安全传输协议(TLS)来加密容器之间的通信。

    58230

    六个小技巧帮你瘦身Android APK

    通过精简和优化代码,可以减小APK文件的大小。 代码混淆:使用ProGuard或R8进行代码混淆,删除未使用的类和方法,减小APK文件的大小。...移除未使用的和依赖项,可以显著减小APK体积。 资源优化:使用向量图标代替位图图标,减小图标资源的大小。同时,删除未使用的资源文件。...这有助于将APK文件的初始大小保持较小。 动态交付:将应用的功能模块划分为可下载的模块。根据用户需求,只下载所需的模块,减小初始APK大小。...只加载所需的资源文件可以减小APK文件的大小。 资源文件限定符:使用资源文件限定符(hdpi、xhdpi、sw600dp等)来为不同的设备提供适当的资源。...压缩和优化APKAPK文件本身进行压缩和优化也是一种有效的方法来减小APK体积。 APK压缩工具:使用工具ProGuard、R8或Shrinker来压缩和优化APK文件。

    58320

    《Docker极简教程》--Docker基础--基础知识(一)

    以下是容器与虚拟机之间的主要区别: 架构和隔离度: 容器: 利用操作系统的内核进行隔离,使用命名空间和控制组等技术确保容器之间的隔离。容器共享宿主机的内核,但有自己的文件系统和进程空间。...层次结构: 镜像由多个层次组成,每个层次代表一个对镜像的修改。这种分层结构使得镜像在构建和分享时更为高效,因为可以共享相同的层次。...分发和共享: 镜像可以保存在镜像仓库中,Docker Hub,供其他开发者和团队使用。这样的分发方式使得应用程序的共享和交流更加方便。...镜像的多层叠加: 镜像是通过在基础层上叠加多个层次来构建的。每个层次都代表了对镜像的修改,这可以是添加文件、安装软件包、修改配置等。这样的设计允许镜像的复用,多个镜像可以共享相同的基础层。...分层结构还支持镜像的版本控制,不同版本的镜像可以共享相同的基础层,减小存储和传输的开销。 通过这种分层结构,Docker镜像可以更加高效地存储、传输和分享。

    23200

    【Linux】静态进程和动态进程

    节省空间: 多个程序可以共享同一个动态链接减小了每个可执行文件的大小。 易于更新: 如果共享有更新,只需要替换共享而不需要重新编译和部署所有程序。...优缺点: 优势: 节省空间: 共享的使用减小了每个可执行文件的大小。 易于更新: 如果共享有更新,只需要替换共享而不需要重新编译和部署所有程序。...应用场景: 对程序大小有限制的场景,例如移动设备应用程序。 多个程序可以共享相同的情况,减小系统资源占用。...3.2 动态进程的选择场景: 3.2.1 对空间要求较高: 多程序共享: 当多个程序可以共享相同的动态链接时,动态进程可以减小系统资源的占用。...资源敏感环境: 在资源受限但可以共享的环境中,选择动态进程减小可执行文件的大小

    16010

    Matrix-ApkChecker — Apk 分析减包利器

    检查是否经过了资源混淆(AndResGuard) 检查 apk 是否经过了资源混淆,推荐使用资源混淆来进一步减小 apk大小 5....检查是否包含多个ABI版本的动态 so 文件的大小可能会在 apk 文件大小中占很大的比例,可以考虑在 apk 中只包含一个 ABI 版本的动态 7....检查是否有多个动态静态链接了 STL 如果有多个动态都依赖了 STL ,应该采用动态链接的方式而非多个动态都去静态链接 STL 11....搜索 apk 中未经裁剪的动态文件 动态经过裁剪之后,文件大小通常会减小很多 示例分析 下面,我们对一个示例 apk 使用 Matrix-ApkChecker 进行检查,并根据检查的结果进行针对性的减包优化...版本追踪 从下图可以直观看到微信多个版本的 apk 大小变化趋势。 ? 2. 版本 issue 针对每个版本提出可以优化的 issue ,如下图所示: ? 3.

    4.5K40

    致Android开发者:APP 瘦身经验总结

    当然还有很多无损压缩工具,例如 [JPEGMini]4、[MozJPEG]5 等,大家可以从中选择适合自己项目的一个就行,主要是在图片大小和图片质量之间找到一个折衷点。 4 ....最后我们 TinyPng 为例来直观地观察压缩工具对图片的压缩效果。 ?...>> DPI 目录:Android 从出现到现在,历经了多个版本,支持多种不同类型的设备,屏幕密度、屏幕形状、屏幕大小等都差别很大,支持的屏幕密度就有 ldpi、mdpi、hdpi、xhdpi、xxhdpi...在项目开发中,建议抽出一个基础,提供基础的功能,例如网络、数据、加解密、utils 工具包等,实现不同模块间复用基础的功能,甚至在公司层面维护一个公共,在不同产品线之间共享。...这样如果不同产品之间需要相互集成,复用一套公共,能在很大程度上减少重复的代码。 7 .

    92430

    《Docker极简教程》--Docker基础--Docker的基本概念

    确保应用在开发、测试和生产环境之间的一致性。 容器共享宿主机的内核,无需额外的操作系统,因此占用资源较少。 启动速度快,几乎瞬间就能运行起来。...以下是容器与虚拟机之间的主要区别: 架构和隔离度: 容器: 利用操作系统的内核进行隔离,使用命名空间和控制组等技术确保容器之间的隔离。容器共享宿主机的内核,但有自己的文件系统和进程空间。...分发和共享: 镜像可以保存在镜像仓库中,Docker Hub,供其他开发者和团队使用。这样的分发方式使得应用程序的共享和交流更加方便。...镜像的多层叠加: 镜像是通过在基础层上叠加多个层次来构建的。每个层次都代表了对镜像的修改,这可以是添加文件、安装软件包、修改配置等。这样的设计允许镜像的复用,多个镜像可以共享相同的基础层。...分层结构还支持镜像的版本控制,不同版本的镜像可以共享相同的基础层,减小存储和传输的开销。 通过这种分层结构,Docker镜像可以更加高效地存储、传输和分享。

    10600

    Android内存管理(一)官方文档介绍

    这种方法使为框架代码和资源分配的大多数 RAM 页面可在所有应用进程之间共享。大多数静态数据会内存映射到一个进程中。这种方法使得数据不仅可以在进程之间共享,还可以在需要时换出。...例如,窗口 surface 使用在应用和屏幕合成器之间共享的内存,而光标缓冲区则使用在内容提供器和客户端之间共享的内存。...在某些情况下,例如,为了确定在缓存中保存多少数据比较安全,您可能需要查询系统确定当前设备上确切可用的堆空间大小。您可以通过调用 getMemoryClass() 向系统查询此数值。...切换应用 切换应用 当用户在应用之间切换时,Android 会将非前台应用保留在缓存中。非前台应用就是指用户看不到或未运行前台服务(音乐播放)的应用。...当系统资源(内存)不足时,它将会终止缓存中的进程。系统还会考虑终止占用最多内存的进程释放 RAM。

    1.6K10

    APK瘦身-是时候给App进行减负了!

    前言 APK瘦身即是对APK大小进行压缩策略,减小APK安装包大小,更小的安装包更有助于吸引用户安装。前一段时间我司某一App进行APK的瘦身,最终也达到了减小10M的目标,现做一个简单的总结记录。...如图最上方所示的APK Size就是我们应用打包之后的大小,Download Size则是上传到Google Play之后,用户下载的大小。所以我们一般可以只针对前一项的APK Size进行对比。...动图功能,然后减少Fresco的依赖,同样可以减小so的大小。...如果你的App需要支持多种架构,那么就可以在abiFilters里面把多种架构加进去,当然你也可以只保留一种,然后分渠道打包,Google Play就支持arm和x86等多个渠道打包。...删除无用的语言 大部分应用都不需要支持几十种上百种语言,所以在我们引用一些第三方时(Google、Facebook的),它们往往带有上百种多语言资源,而大部分多语言对于我们自己的应用是没有用处的,

    1.2K30

    Java并发Map的面试指南:线程安全数据结构的奥秘

    然而,与其引人入胜的潜力相伴而来的是复杂性和挑战,其中之一就是处理共享数据。当多个线程同时访问和修改共享数据时,很容易出现各种问题,竞态条件和数据不一致性。...另外,还有一些第三方Caffeine和Ehcache,提供了高性能的缓存和并发Map功能。...分布式系统需要解决网络分区、故障恢复和数据同步等问题,确保数据的正确性和可用性。 性能: 分布式Map需要在不同节点之间传输数据,这可能会引入网络延迟。...以下是一些关键的最佳实践和注意事项: 避免锁定整个Map: 尽量只锁定需要修改的部分数据,减小锁的粒度,提高并发性能。例如,使用分段锁或读写锁来限制对特定部分数据的访问。...最后,不要忘记线程安全编程的基本原则:最小化共享状态,最大化不可变性。尽量减少多个线程之间共享数据,而是将数据不可变化或限制在需要同步的最小范围内。这将有助于减少竞态条件和数据不一致性的可能性。

    17020

    Java并发Map的面试指南:线程安全数据结构的奥秘

    然而,与其引人入胜的潜力相伴而来的是复杂性和挑战,其中之一就是处理共享数据。当多个线程同时访问和修改共享数据时,很容易出现各种问题,竞态条件和数据不一致性。...另外,还有一些第三方Caffeine和Ehcache,提供了高性能的缓存和并发Map功能。...分布式系统需要解决网络分区、故障恢复和数据同步等问题,确保数据的正确性和可用性。性能: 分布式Map需要在不同节点之间传输数据,这可能会引入网络延迟。...以下是一些关键的最佳实践和注意事项:避免锁定整个Map: 尽量只锁定需要修改的部分数据,减小锁的粒度,提高并发性能。例如,使用分段锁或读写锁来限制对特定部分数据的访问。...最后,不要忘记线程安全编程的基本原则:最小化共享状态,最大化不可变性。尽量减少多个线程之间共享数据,而是将数据不可变化或限制在需要同步的最小范围内。这将有助于减少竞态条件和数据不一致性的可能性。

    35760

    盘一盘那些高性能设计的点(一)

    简单的说就是设置一个公共对象池,对于其中的对象直接复用而不再使用新创建的方式。...1、JDK 的包装类型值缓存池 Integer::IntegerCache 整形包装类缓存 用于 [-128, 127] 之间数字装箱操作使用。...PoolArena 是由多个Chunk组成的大块内存区域,每个 Chunk 由一个多个 Page 组成。...如果连续两次实际使用的容量低于分配的缓冲区大小特定比例,则减小下一次分配的缓冲区大小。 其它情景,保持分配大小不变。...的这种“智能化”处理,可以说是相当有用的: 首先,实际的应用场景千差万别,同一场景下不同时刻的缓冲区需求也是实时变化(一句话可以是一个字,也可能是1000个字),这就需要 Netty 动态调整缓冲分配大小适应不同的业务场景

    21320

    Android--MaterialDesign动画之转场动画(Activity transitions)

    以前的Activity之间跳转比较生硬,用户很明显的会感觉到跳转,MaterialDesign推出了新的转场动画,可以实现两个界面之间共享元素,使跳转带来的体验感德芙般丝滑 1.基本使用 效果如下:...transitionName传入,并最终调用ActivityCompat的startActivity方法 2.多个共享元素 如果想要共享多个元素,可以使用第二个makeSceneTransitionAnimation...3.自定义共享元素跳转效果 如果觉得系统提供的共享元素转场动画不够酷炫,我们还可以自定义动画 首先需要新建transition目录,自定义共享元素动画xml <changeImageTransform android:duration="1000..." android:startDelay="0" /> 设置自定义共享元素转场动画,两种方式 1.在style的主题中设置自定义共享元素转场动画

    1.5K30

    Android 11 正式版发布

    为了向下兼容,我们也将这些功能加入到了 Jetpack Biometric 开发 中。随着工作的进展,我们会为大家带来进一步的更新。...请访问 5G 开发者网页,了解如何在 Android 上使用 5G 功能。 ? 新的屏幕类型 :设备厂商们也在持续进行创新,将新的屏幕形态投入市场,包括挖孔屏和瀑布屏。...相对于 GIF 动画,HEIF 图像序列可以显著减小文件尺寸。...原生图像解码器 :应用可以使用新的 NDK API 来通过原生代码解码和编码图像 ( JPEG、PNG、WebP),以便进行图形或后期处理,而且因为您无需捆绑外部代码,从而得以保持较小的 APK 尺寸...共享快捷方式 (自 Android 10 开始支持) :想要接收共享数据的应用应该使用 共享快捷方式 API 来创建共享目标。

    1.2K50
    领券