首页 > 其他分享 >apk合包,apk合并。附工具

apk合包,apk合并。附工具

时间:2024-05-18 15:18:49浏览次数:24  
标签:方案 适配 合并 apk Android 加载 合包

Android应用合并:实现apk合并,将两个不同功能的单独apk,合并成一个apk。

0.序

在市面上发现了一款牛逼的Android应用,里面能加载展示不同的其他Android应用。两个应用的功能完全不一样,分别就是两个不同的包。

1.如何实现apk合并

那他是如何实现多个apk合并到一个apk里的呢。

1.1.方案1-虚拟化Android引擎

这个方案是比较牛逼的方案。

原理:就是一个架子,壳。hook和虚拟化了apk加载运行的Android环境。

用户启动真实apk时,会被这个壳拦截,然后包装成这个壳在展示请求,清单等注册时也只用注册这个壳的相关信息。

你可以把这个壳理解为虚拟的Android系统,在里面安装运行apk

1.1.1.优点

开发apk时,基本上不用太做注意和更改,就正常开发apk就行,前期开发适配需要的开发量很少。

可以动态下载apk,动态按需加载apk。

1.1.2 缺点

这个方案实在是太牛逼,导致技术门槛高,一般开发者只能用,自己开发没戏。有公司在搞这个,技术支持费用肯定是免不了的。

性能有影响,加载启动apk速度慢,因为每次启动一个apk,都需要先启动一个虚拟的Android系统,这个速度比较慢。

适配性有一定的问题,毕竟是虚拟Android系统,hook拦截真实系统的消息,这种操作相当危险,这种方案的代码有的已经被标记为病毒,很难改动。

有些权限和功能,在有的设备和环境会无法运行,这个兼容程度取决于提供这个技术的开发者适配的能力。

如果自己公司想确保应用的兼容性和稳定性,不建议这种方案。

1.2.方案2-插件化

这个方案市面上很多公司都在用。大公司基本都是用的这个。
如果应用很大,模块很多,功能很多,就会实现插件化,其他不常用和非基础的模块都是后面下载动态加载的。

原理:设计一个基础通用框架协议,所有其他应用或模块都遵循使用这个框架协议,相当于套了一层壳。

运行时,是这个通用框架协议的壳与系统交互,里面的应用或模块不会直接与系统交互。

1.2.1. 优点

这个方案很稳定,适配性好,毕竟所有代码都是自己开发的,维护也比较方便。
可以动态下载apk,动态按需加载apk。

1.2.2 缺点

前期开发成本很大,每个应用都需要遵循通用模块协议开发,
如果已经开发完的apk,想合并,那重写适配的成本很高很高。

1.3. 方案3-资源代码合并

这个方案是我目前使用的方案。市面上也有人在自行研究,大多是因为觉得方案1太贵,适配不太好,方案2开发量太大。

原理:将多个apk的资源代码so直接加密保存,清单进行合并,不同包注册为不同进程,启动对应进程时释放加载对应的资源代码so。

运行时,对应apk是一个单独的进程,资源代码等互不影响。

优缺点介于上述两种方案之间。

1.3.1. 优点

已开发完的apk基本不用改动就能合并。开发适配工作量不大。

相对方案一来说,兼容和性能较好,基本和方案二持平。

1.3.2 缺点

实现 对apk处理 资源代码so 动态加载比较麻烦,原理就是市面上的加固方案。有一定的技术门槛。

合包时有一定的困难,毕竟需要将多个独立的apk合并在一起,会有很多冲突,有些自动解决后会有一定的问题,有些还是需要对原包做一定改动进行适配。

2.工具介绍

我最开始是处于应用安全的目的去开发的工具,实现了apk加固的功能。
后面看见这种对应用合并的功能,觉得很牛逼,于是基于apk加固的实现上,实现了apk合并。

详见工具apk加固合并工具

3.尾

可能你有这方面的研究兴趣和需求,可以使用工具合并研究一下。欢迎技术交流讨论。

标签:方案,适配,合并,apk,Android,加载,合包
From: https://www.cnblogs.com/Yongersblog/p/18199365

相关文章

  • Qt/C++音视频开发74-合并标签图形/生成yolo运算结果图形/文字和图形合并成一个/水印滤
    一、前言在使用yolo做人工智能运算后,运算结果除了一个方框,还可能需要增加文字显示在对应方框上,以便标记是何种物体,比如显示是人还是动物,或者还有可能追踪人员,显示该人员的姓名。这种应用场景非常普遍,而且非常有必要,可以非常直观的直接看到对应移动的物体是什么。当然也有个缺点,就......
  • C122 李超树合并+DP CF932F Escape Through Leaf
    视频链接:C122李超树合并+DPCF932FEscapeThroughLeaf_哔哩哔哩_bilibili   C65【模板】线段树合并P4556[Vani有约会]雨天的尾巴-董晓-博客园(cnblogs.com)CF932FEscapeThroughLeaf#include<iostream>#include<cstring>#include<algorithm>using......
  • Singleflight(合并请求)
    简介看到一个有意思的库:SingleFlight是Go语言提供的一个扩展包。作用是当有多个goroutine同时调用同一个函数的时候,只允许一个goroutine去调用这个函数,等到这个调用的goroutine返回结果的时候,再把结果返回给这几个同时调用的goroutine,这样可以减少并发调用的数量。Singleflight......
  • PDF加密转APK大师 (支持一机一码, 无需额外安装PDF浏览器, 强力加密保护PDF文件)
    PDF加密转APK大师是一款PDF加密软件,它可以把PDF文件直接转成安卓APP,并支持一机一码加密,静态密码加密等高级功能,可以用来保护PDF文档,防止未经授权的传播,并方便向用户收费.加密生成的APK被高强度加密混淆,并且PDF文件也使用了128位加密保护,可以有效保护PDF文件. ......
  • Libz打包/合并DLL与可执行文件(EXE)
    Libz是一个.NET的库,它提供了一种方法将多个DLLs和其他资源打包进一个单独的可执行文件(EXE)或另一个动态链接库(DLL)。Libz的功能类似于ILMerge,但它提供了更多的灵活性和功能,特别是对于处理压缩和资源管理。Libz使用了自定义的加载器来在运行时解压和加载程序集和资源,这样可以减少部署......
  • 反编译APK获取代码&资源
    反编译APK获取代码&资源"反编译Apk",看上去好像好像很高端的样子,其实不然,就是通过某些反编译软件,对我们的APK进行反编译,从而获取程序的源代码,图片,XML资源等文件;不知道你有没有这样做过,看到一个别人的一个APP界面做得很精美,或者你看上别人的图片素材,简单点的,我们可以下载别人的A......
  • 合并多张图像到一张
    publicstaticclassImageUtil{publicstaticvoidMergeImages(List<string>imageFileNames,stringfinalImageName,ImageFormatimageFormat){using(varfile=File.OpenWrite(finalImageName)){......
  • openGauss 使用合并方式更新和插入数据
    使用合并方式更新和插入数据在用户需要将一个表中所有的数据或大量的数据添加至现有表的场景下,openGauss提供了MERGEINTO语句通过两个表合并的方式高效地将新数据添加到现有表。MERGEINTO语句将目标表和源表中数据针对关联条件进行匹配,若关联条件匹配时对目标表进行UPDATE,关联......
  • python处理exl中行的合并
    描述:现在我们有一个项目名,项目状态以及项目负责人统计的exl表格,第一列是项目名称,第二列是项目完成状态,第三列是项目负责人。但是同一个项目可能有多个负责人,但是最开始的表格并没有将这几个负责人合并起来放入同一行,所以这里就是为了将第一列相同的数据合并在一起,在owner中同时......
  • 洛谷题单指南-动态规划3-P1880 [NOI1995] 石子合并
    原题链接:https://www.luogu.com.cn/problem/P1880题意解读:计算n堆石子合并的最小、最大得分,只不过这n堆石子是环形的,也就是首、尾也相邻,是区间DP的升级版-环形DP问题。解题思路:如果是常规区间DP的方法:对于n堆石子,考察区间的长度范围是1~n先枚举左端点i,范围是1~n再计算右......