oynix

于无声处听惊雷,于无色处见繁花

多apk导出与安装

在aab盛行的年代,一个应用已经不单单对应一个apk文件了,经常是两个,或是多个。

在设备上安装一个应用后,安装时的apk文件都是会存储在手机里的。不知道做没做过这样的需求,就是反编译别人apk,看看里面都有些什么,图片资源也好,库文件也罢。

adb导出apk

1
2
3
4
5
6
7
8
# 如果不知道完整的包名,就先这样过滤出目标包名
$ adb shell pm list package | grep key-word

# 获取apk文件路径
$ adb shell pm path target.pakcage.name

# 经过上一步,会得到一个或多个apk文件的路径,导出到本地
$ adb pull xxxx.apk ~/xxx.apk

拿到apk文件了,就可以做想做的事了,比如用jadx反编译。

另外,这个文件的位置,通过package manager也可以得到,代码如下:

1
2
3
PackageManager pm = getPackageManager();
ApplicationInfo info = pm.getApplicationInfo("package_name", 0);
String path = info.sourceDir; // 这个path就是上面pm path的结果

adb安装多apk

安装单个apk

1
$ adb install xxx.apk

安装多个apk

1
$ adb install-multiple 1.apk 2.apk 3.apk

题外话

终端窗口直接执行adb命令,会显示出命令介绍,不难发现它有三个安装命令,

1
2
3
4
5
6
7
$ adb
app installation (see also `adb shell cmd package help`):
install [-lrtsdg] [--instant] PACKAGE
push a single package to the device and install it
install-multiple [-lrtsdpg] [--instant] PACKAGE...
push multiple APKs to the device for a single package and install them
install-multi-package [-lrtsdpg] [--instant] PACKAGE...

除了install和install-multiple,还有个install-multi-package命令。

install和install-multiple都是安装单应用的,一个对应单apk,一个是多apk。而install-multi-package命令是安装多应用,意思就是一次同时安装多个应用。你可能会想,怎么会需要一次安装多个应用呢,平常不都是单个开发的吗?

有些需求吧,直到你遇到前你都不会相信:原来还真的会有这样的需求啊~

我是真的遇到了,所以顺便提一提。另外还有,不是所有版本的设备都支持这个命令,在不支持的设备上执行后就会报错,不用深究,换个测试机就可以。

------------- (完) -------------
  • 本文作者: oynix
  • 本文链接: https://oynix.com/2021/09/0b2bb4ebed80/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

欢迎关注我的其它发布渠道