相关疑难解决方法(0)

我怎么从Android设备上获取apk文件?

我如何从Android设备上获取apk文件?或者如何将apk文件从设备传输到系统?

android adb apk

453
推荐指数
15
解决办法
38万
查看次数

如何在Android内部共享使用即时运行时创建的拆分APK?

背景

我有一个应用程序(这里),除了其他功能,允许共享APK文件.

为了做到这一点,它通过访问packageInfo.applicationInfo.sourceDir(这里是 docs链接)的路径到达文件,并且只是共享文件(在需要时使用ContentProvider,就像我在这里使用的那样).

问题

这在大多数情况下都可以正常工作,尤其是从Play商店或独立的APK文件安装APK文件时,但是当我使用Android-Studio本身安装应用程序时,我在此路径上看到多个APK文件,而且没有一个是有效的,可以安装和运行没有任何问题.

这是从"Alerter"github repo中试用样本后该文件夹内容的屏幕截图 :

在此输入图像描述

我不确定这个问题何时开始,但至少在我的Nexus 5x和Android 7.1.2上确实发生过.也许甚至以前.

我发现了什么

这似乎只是因为在IDE上启用了即时运行这一事实,因此它可以帮助更新应用程序,而无需一起重新构建它:

在此输入图像描述

禁用它后,我可以看到有一个APK,就像过去一样:

在此输入图像描述

您可以在正确的APK和分割的APK之间看到文件大小的差异.

此外,似乎有一个API来获取所有分裂的APK的路径:

https://developer.android.com/reference/android/content/pm/ApplicationInfo.html#splitPublicSourceDirs

这个问题

什么应该是最简单的方式来共享一个被分成多个的APK?

真的需要以某种方式合并它们吗?

根据文档似乎有可能:

零或更多拆分APK的完整路径,当与sourceDir中定义的基本APK结合使用时,形成一个完整的应用程序.

但是这样做的正确方法是什么,并且有一种快速有效的方法吗?也许没有真正创建文件?

是否有一个API可以从所有拆分的APK中获得合并的APK?或者也许这样的APK已经存在于其他路径中,并且不需要合并?

编辑:刚刚注意到,我尝试过的所有第三方应用程序都应该共享已安装的应用程序的APK,在这种情况下无法执行此操作.

android apk android-instant-run

42
推荐指数
1
解决办法
5602
查看次数

如何将应用程序/ apk转换为系统/用户应用程序,包括拆分应用程序

背景

没有root用户,我知道可以使用Intent安装一个普通的APK(此处)。

给定root,我知道可以使用this安装它。

这将像正常安装过程一样将应用程序安装为用户应用程序。

还有一种方法来安装拆分式APK应用程序(在此处),尽管由于某种原因我没有成功使用它。

问题

我想知道如何将应用程序转换和/或安装为系统安装的应用程序,然后再转换为用户应用程序。

这包括尚未安装的应用程序和已经安装的应用程序的APK文件。

我发现了什么

我发现了一些很旧的方式将现有的应用程序(或安装一个新的)到系统的应用程序(在这里,例如或这里),称(简称),我应该只是移动APK文件转换成/system/app/路径。

事实是,这可能在过去有效,但现在却没有。我认为这是因为现在的应用程序/system/app/以不同的方式存在:每个应用程序都有一个文件夹,其中包含一些文件。

至于转换回用户应用程序,我找不到它。将拆分的APK应用程序安装到系统应用程序并将其转换回用户应用程序也是如此。

实际上,我记得Play商店中有一些应用程序(例如这一类),可以将其他应用程序很好地转换为系统应用程序(使用root)-现在无法执行任何操作。

问题

  1. 将应用安装/转换为系统应用的方法何时生效?为什么它不再起作用了?

  2. 在旧版和新版Android上,将应用程序安装/转换为系统应用程序,然后再转换回用户应用程序应怎么做?

  3. 分离式应用程序(例如:AirBnb应用程序)或至少已安装的应用程序是否可能具有相同的作用?

android root apk android-install-apk

5
推荐指数
1
解决办法
1178
查看次数

给定一个APK文件,是否可以知道它是拆分的APK文件的一部分还是独立文件?

背景

有时,当您备份某个应用程序的某些APK文件时,您会注意到它们由多个APK文件组成,这意味着拆分的APK文件(又称为应用程序捆绑包)。

问题

我想知道,当有人向用户发送APK文件时,它的确是独立文件还是拆分APK文件的一部分。原因是不同的过程,甚至是这样的警告,因为拆分的APK文件并不是真的要像正常文件一样安装。

我尝试过的

给定PackageManager类(在此处),我找不到getPackageArchiveInfo获取此类信息的方法。

splitNamessplitRevisionCodes,但都为空。

我的问题

给定一个APK文件,是否可以检查它是否属于多个拆分APK文件的一部分?


编辑:因此,由于这里,我已经找到了如何对拆分的APK文件(“ base.APK”)的主要APK进行操作:

    val packageInfo = pm.getPackageArchiveInfo(apkPath, PackageManager.GET_META_DATA)
    val isSplit = packageInfo.applicationInfo.metaData.getBoolean("com.android.vending.splits.required", false)
Run Code Online (Sandbox Code Playgroud)

但是,至于其余的拆分apk文件,getPackageArchiveInfo在其上使用将仅返回null。我找不到如何解析它们的清单以找到“ split”属性。

所以我的问题是:

给定其余的拆分APK文件,我如何解析它们以检查它们是否确实是属于base.APK文件的拆分APK文件?

android apk android-app-bundle

5
推荐指数
0
解决办法
322
查看次数